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 
7   This program and the accompanying materials are licensed and made available under
8 
9   the terms and conditions of the BSD License that accompanies this distribution.
10 
11   The full text of the license may be found at
12 
13   http://opensource.org/licenses/bsd-license.php.
14 
15 
16 
17   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
18 
19   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
20 
21 
22 
23 
24 **/
25 
26 
27 #include "CommonHeader.h"
28 
29 
InternalTriggerSmi(IN UINT8 Data)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 
TriggerBootServiceSoftwareSmi(VOID)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 
TriggerRuntimeSoftwareSmi(VOID)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 
InternalGetSwSmiData(VOID)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 
IsBootServiceSoftwareSmi(VOID)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 
IsRuntimeSoftwareSmi(VOID)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 }
ClearSmi(VOID)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