Home | History | Annotate | Download | only in PchSmmLib
      1 /** @file
      2   PCH Smm Library Services that implements both S/W SMI generation and detection.
      3 
      4   Copyright (c) 2007  - 2014, Intel Corporation. All rights reserved.<BR>
      5 
      6   This program and the accompanying materials are licensed and made available under
      8   the terms and conditions of the BSD License that accompanies this distribution.
     10   The full text of the license may be found at
     12   http://opensource.org/licenses/bsd-license.php.
     14 
     16   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     18   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     20 
     22 
     24 **/
     25 
     26 
     27 #include "CommonHeader.h"
     28 
     29 
     30 /**
     31   Triggers a run time or boot time SMI.
     32 
     33   This function triggers a software SMM interrupt and set the APMC status with an 8-bit Data.
     34 
     35   @param  Data                 The value to set the APMC status.
     36 
     37 **/
     38 VOID
     39 InternalTriggerSmi (
     40   IN UINT8                     Data
     41   )
     42 {
     43   ASSERT(FALSE);
     44 }
     45 
     46 
     47 /**
     48   Triggers an SMI at boot time.
     49 
     50   This function triggers a software SMM interrupt at boot time.
     51 
     52 **/
     53 VOID
     54 EFIAPI
     55 TriggerBootServiceSoftwareSmi (
     56   VOID
     57   )
     58 {
     59   ASSERT(FALSE);
     60 }
     61 
     62 
     63 /**
     64   Triggers an SMI at run time.
     65 
     66   This function triggers a software SMM interrupt at run time.
     67 
     68 **/
     69 VOID
     70 EFIAPI
     71 TriggerRuntimeSoftwareSmi (
     72   VOID
     73   )
     74 {
     75   ASSERT(FALSE);
     76 }
     77 
     78 
     79 /**
     80   Gets the software SMI data.
     81 
     82   This function tests if a software SMM interrupt happens. If a software SMI happens,
     83   it retrieves the SMM data and returns it as a non-negative value; otherwise a negative
     84   value is returned.
     85 
     86   @return Data                 The data retrieved from SMM data port in case of a software SMI;
     87                                otherwise a negative value.
     88 
     89 **/
     90 INTN
     91 InternalGetSwSmiData (
     92   VOID
     93   )
     94 {
     95   ASSERT(FALSE);
     96   return -1;
     97 }
     98 
     99 
    100 /**
    101   Test if a boot time software SMI happened.
    102 
    103   This function tests if a software SMM interrupt happened. If a software SMM interrupt happened and
    104   it was triggered at boot time, it returns TRUE. Otherwise, it returns FALSE.
    105 
    106   @retval TRUE   A software SMI triggered at boot time happened.
    107   @retval FLASE  No software SMI happened or the software SMI was triggered at run time.
    108 
    109 **/
    110 BOOLEAN
    111 EFIAPI
    112 IsBootServiceSoftwareSmi (
    113   VOID
    114   )
    115 {
    116   ASSERT(FALSE);
    117   return FALSE;
    118 }
    119 
    120 
    121 /**
    122   Test if a run time software SMI happened.
    123 
    124   This function tests if a software SMM interrupt happened. If a software SMM interrupt happened and
    125   it was triggered at run time, it returns TRUE. Otherwise, it returns FALSE.
    126 
    127   @retval TRUE   A software SMI triggered at run time happened.
    128   @retval FLASE  No software SMI happened or the software SMI was triggered at boot time.
    129 
    130 **/
    131 BOOLEAN
    132 EFIAPI
    133 IsRuntimeSoftwareSmi (
    134   VOID
    135   )
    136 {
    137   ASSERT(FALSE);
    138   return FALSE;
    139 }
    140 
    141 
    142 /**
    143 
    144   Clear APM SMI Status Bit; Set the EOS bit.
    145 
    146 **/
    147 VOID
    148 EFIAPI
    149 ClearSmi (
    150   VOID
    151   )
    152 {
    153 
    154   UINT16                       PmBase;
    155 
    156   //
    157   // Get PMBase
    158   //
    159   PmBase = PcdGet16 (PcdPchAcpiIoPortBaseAddress);
    160 
    161   //
    162   // Clear the APM SMI Status Bit
    163   //
    164   IoWrite16 (PmBase + R_PCH_ACPI_SMI_STS, B_PCH_ACPI_APM_STS);
    165 
    166   //
    167   // Set the EOS Bit
    168   //
    169   IoOr32 (PmBase + R_PCH_ACPI_SMI_EN, B_PCH_ACPI_EOS);
    170 }
    171 
    172