1*1370a723SSascha Wildner /** @file
2*1370a723SSascha Wildner   ACPI 4.0 definitions from the ACPI Specification Revision 4.0a April 5, 2010
3*1370a723SSascha Wildner 
4*1370a723SSascha Wildner   Copyright (c) 2010 - 2022, Intel Corporation. All rights reserved.<BR>
5*1370a723SSascha Wildner   SPDX-License-Identifier: BSD-2-Clause-Patent
6*1370a723SSascha Wildner **/
7*1370a723SSascha Wildner 
8*1370a723SSascha Wildner #ifndef _ACPI_4_0_H_
9*1370a723SSascha Wildner #define _ACPI_4_0_H_
10*1370a723SSascha Wildner 
11*1370a723SSascha Wildner #include <IndustryStandard/Acpi30.h>
12*1370a723SSascha Wildner 
13*1370a723SSascha Wildner //
14*1370a723SSascha Wildner // Ensure proper structure formats
15*1370a723SSascha Wildner //
16*1370a723SSascha Wildner #pragma pack(1)
17*1370a723SSascha Wildner 
18*1370a723SSascha Wildner ///
19*1370a723SSascha Wildner /// ACPI 4.0 Generic Address Space definition
20*1370a723SSascha Wildner ///
21*1370a723SSascha Wildner typedef struct {
22*1370a723SSascha Wildner   UINT8     AddressSpaceId;
23*1370a723SSascha Wildner   UINT8     RegisterBitWidth;
24*1370a723SSascha Wildner   UINT8     RegisterBitOffset;
25*1370a723SSascha Wildner   UINT8     AccessSize;
26*1370a723SSascha Wildner   UINT64    Address;
27*1370a723SSascha Wildner } EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE;
28*1370a723SSascha Wildner 
29*1370a723SSascha Wildner //
30*1370a723SSascha Wildner // Generic Address Space Address IDs
31*1370a723SSascha Wildner //
32*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_MEMORY              0
33*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_IO                  1
34*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_CONFIGURATION_SPACE    2
35*1370a723SSascha Wildner #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER        3
36*1370a723SSascha Wildner #define EFI_ACPI_4_0_SMBUS                      4
37*1370a723SSascha Wildner #define EFI_ACPI_4_0_FUNCTIONAL_FIXED_HARDWARE  0x7F
38*1370a723SSascha Wildner 
39*1370a723SSascha Wildner //
40*1370a723SSascha Wildner // Generic Address Space Access Sizes
41*1370a723SSascha Wildner //
42*1370a723SSascha Wildner #define EFI_ACPI_4_0_UNDEFINED  0
43*1370a723SSascha Wildner #define EFI_ACPI_4_0_BYTE       1
44*1370a723SSascha Wildner #define EFI_ACPI_4_0_WORD       2
45*1370a723SSascha Wildner #define EFI_ACPI_4_0_DWORD      3
46*1370a723SSascha Wildner #define EFI_ACPI_4_0_QWORD      4
47*1370a723SSascha Wildner 
48*1370a723SSascha Wildner //
49*1370a723SSascha Wildner // ACPI 4.0 table structures
50*1370a723SSascha Wildner //
51*1370a723SSascha Wildner 
52*1370a723SSascha Wildner ///
53*1370a723SSascha Wildner /// Root System Description Pointer Structure
54*1370a723SSascha Wildner ///
55*1370a723SSascha Wildner typedef struct {
56*1370a723SSascha Wildner   UINT64    Signature;
57*1370a723SSascha Wildner   UINT8     Checksum;
58*1370a723SSascha Wildner   UINT8     OemId[6];
59*1370a723SSascha Wildner   UINT8     Revision;
60*1370a723SSascha Wildner   UINT32    RsdtAddress;
61*1370a723SSascha Wildner   UINT32    Length;
62*1370a723SSascha Wildner   UINT64    XsdtAddress;
63*1370a723SSascha Wildner   UINT8     ExtendedChecksum;
64*1370a723SSascha Wildner   UINT8     Reserved[3];
65*1370a723SSascha Wildner } EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
66*1370a723SSascha Wildner 
67*1370a723SSascha Wildner ///
68*1370a723SSascha Wildner /// RSD_PTR Revision (as defined in ACPI 4.0b spec.)
69*1370a723SSascha Wildner ///
70*1370a723SSascha Wildner #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION  0x02 ///< ACPISpec (Revision 4.0a) says current value is 2
71*1370a723SSascha Wildner 
72*1370a723SSascha Wildner ///
73*1370a723SSascha Wildner /// Common table header, this prefaces all ACPI tables, including FACS, but
74*1370a723SSascha Wildner /// excluding the RSD PTR structure
75*1370a723SSascha Wildner ///
76*1370a723SSascha Wildner typedef struct {
77*1370a723SSascha Wildner   UINT32    Signature;
78*1370a723SSascha Wildner   UINT32    Length;
79*1370a723SSascha Wildner } EFI_ACPI_4_0_COMMON_HEADER;
80*1370a723SSascha Wildner 
81*1370a723SSascha Wildner //
82*1370a723SSascha Wildner // Root System Description Table
83*1370a723SSascha Wildner // No definition needed as it is a common description table header, the same with
84*1370a723SSascha Wildner // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
85*1370a723SSascha Wildner //
86*1370a723SSascha Wildner 
87*1370a723SSascha Wildner ///
88*1370a723SSascha Wildner /// RSDT Revision (as defined in ACPI 4.0 spec.)
89*1370a723SSascha Wildner ///
90*1370a723SSascha Wildner #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
91*1370a723SSascha Wildner 
92*1370a723SSascha Wildner //
93*1370a723SSascha Wildner // Extended System Description Table
94*1370a723SSascha Wildner // No definition needed as it is a common description table header, the same with
95*1370a723SSascha Wildner // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
96*1370a723SSascha Wildner //
97*1370a723SSascha Wildner 
98*1370a723SSascha Wildner ///
99*1370a723SSascha Wildner /// XSDT Revision (as defined in ACPI 4.0 spec.)
100*1370a723SSascha Wildner ///
101*1370a723SSascha Wildner #define EFI_ACPI_4_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
102*1370a723SSascha Wildner 
103*1370a723SSascha Wildner ///
104*1370a723SSascha Wildner /// Fixed ACPI Description Table Structure (FADT)
105*1370a723SSascha Wildner ///
106*1370a723SSascha Wildner typedef struct {
107*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER               Header;
108*1370a723SSascha Wildner   UINT32                                    FirmwareCtrl;
109*1370a723SSascha Wildner   UINT32                                    Dsdt;
110*1370a723SSascha Wildner   UINT8                                     Reserved0;
111*1370a723SSascha Wildner   UINT8                                     PreferredPmProfile;
112*1370a723SSascha Wildner   UINT16                                    SciInt;
113*1370a723SSascha Wildner   UINT32                                    SmiCmd;
114*1370a723SSascha Wildner   UINT8                                     AcpiEnable;
115*1370a723SSascha Wildner   UINT8                                     AcpiDisable;
116*1370a723SSascha Wildner   UINT8                                     S4BiosReq;
117*1370a723SSascha Wildner   UINT8                                     PstateCnt;
118*1370a723SSascha Wildner   UINT32                                    Pm1aEvtBlk;
119*1370a723SSascha Wildner   UINT32                                    Pm1bEvtBlk;
120*1370a723SSascha Wildner   UINT32                                    Pm1aCntBlk;
121*1370a723SSascha Wildner   UINT32                                    Pm1bCntBlk;
122*1370a723SSascha Wildner   UINT32                                    Pm2CntBlk;
123*1370a723SSascha Wildner   UINT32                                    PmTmrBlk;
124*1370a723SSascha Wildner   UINT32                                    Gpe0Blk;
125*1370a723SSascha Wildner   UINT32                                    Gpe1Blk;
126*1370a723SSascha Wildner   UINT8                                     Pm1EvtLen;
127*1370a723SSascha Wildner   UINT8                                     Pm1CntLen;
128*1370a723SSascha Wildner   UINT8                                     Pm2CntLen;
129*1370a723SSascha Wildner   UINT8                                     PmTmrLen;
130*1370a723SSascha Wildner   UINT8                                     Gpe0BlkLen;
131*1370a723SSascha Wildner   UINT8                                     Gpe1BlkLen;
132*1370a723SSascha Wildner   UINT8                                     Gpe1Base;
133*1370a723SSascha Wildner   UINT8                                     CstCnt;
134*1370a723SSascha Wildner   UINT16                                    PLvl2Lat;
135*1370a723SSascha Wildner   UINT16                                    PLvl3Lat;
136*1370a723SSascha Wildner   UINT16                                    FlushSize;
137*1370a723SSascha Wildner   UINT16                                    FlushStride;
138*1370a723SSascha Wildner   UINT8                                     DutyOffset;
139*1370a723SSascha Wildner   UINT8                                     DutyWidth;
140*1370a723SSascha Wildner   UINT8                                     DayAlrm;
141*1370a723SSascha Wildner   UINT8                                     MonAlrm;
142*1370a723SSascha Wildner   UINT8                                     Century;
143*1370a723SSascha Wildner   UINT16                                    IaPcBootArch;
144*1370a723SSascha Wildner   UINT8                                     Reserved1;
145*1370a723SSascha Wildner   UINT32                                    Flags;
146*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    ResetReg;
147*1370a723SSascha Wildner   UINT8                                     ResetValue;
148*1370a723SSascha Wildner   UINT8                                     Reserved2[3];
149*1370a723SSascha Wildner   UINT64                                    XFirmwareCtrl;
150*1370a723SSascha Wildner   UINT64                                    XDsdt;
151*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPm1aEvtBlk;
152*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPm1bEvtBlk;
153*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPm1aCntBlk;
154*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPm1bCntBlk;
155*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPm2CntBlk;
156*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XPmTmrBlk;
157*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XGpe0Blk;
158*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    XGpe1Blk;
159*1370a723SSascha Wildner } EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE;
160*1370a723SSascha Wildner 
161*1370a723SSascha Wildner ///
162*1370a723SSascha Wildner /// FADT Version (as defined in ACPI 4.0 spec.)
163*1370a723SSascha Wildner ///
164*1370a723SSascha Wildner #define EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x04
165*1370a723SSascha Wildner 
166*1370a723SSascha Wildner //
167*1370a723SSascha Wildner // Fixed ACPI Description Table Preferred Power Management Profile
168*1370a723SSascha Wildner //
169*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_UNSPECIFIED         0
170*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_DESKTOP             1
171*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_MOBILE              2
172*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_WORKSTATION         3
173*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_ENTERPRISE_SERVER   4
174*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_SOHO_SERVER         5
175*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_APPLIANCE_PC        6
176*1370a723SSascha Wildner #define EFI_ACPI_4_0_PM_PROFILE_PERFORMANCE_SERVER  7
177*1370a723SSascha Wildner 
178*1370a723SSascha Wildner //
179*1370a723SSascha Wildner // Fixed ACPI Description Table Boot Architecture Flags
180*1370a723SSascha Wildner // All other bits are reserved and must be set to 0.
181*1370a723SSascha Wildner //
182*1370a723SSascha Wildner #define EFI_ACPI_4_0_LEGACY_DEVICES      BIT0
183*1370a723SSascha Wildner #define EFI_ACPI_4_0_8042                BIT1
184*1370a723SSascha Wildner #define EFI_ACPI_4_0_VGA_NOT_PRESENT     BIT2
185*1370a723SSascha Wildner #define EFI_ACPI_4_0_MSI_NOT_SUPPORTED   BIT3
186*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCIE_ASPM_CONTROLS  BIT4
187*1370a723SSascha Wildner 
188*1370a723SSascha Wildner //
189*1370a723SSascha Wildner // Fixed ACPI Description Table Fixed Feature Flags
190*1370a723SSascha Wildner // All other bits are reserved and must be set to 0.
191*1370a723SSascha Wildner //
192*1370a723SSascha Wildner #define EFI_ACPI_4_0_WBINVD                                BIT0
193*1370a723SSascha Wildner #define EFI_ACPI_4_0_WBINVD_FLUSH                          BIT1
194*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROC_C1                               BIT2
195*1370a723SSascha Wildner #define EFI_ACPI_4_0_P_LVL2_UP                             BIT3
196*1370a723SSascha Wildner #define EFI_ACPI_4_0_PWR_BUTTON                            BIT4
197*1370a723SSascha Wildner #define EFI_ACPI_4_0_SLP_BUTTON                            BIT5
198*1370a723SSascha Wildner #define EFI_ACPI_4_0_FIX_RTC                               BIT6
199*1370a723SSascha Wildner #define EFI_ACPI_4_0_RTC_S4                                BIT7
200*1370a723SSascha Wildner #define EFI_ACPI_4_0_TMR_VAL_EXT                           BIT8
201*1370a723SSascha Wildner #define EFI_ACPI_4_0_DCK_CAP                               BIT9
202*1370a723SSascha Wildner #define EFI_ACPI_4_0_RESET_REG_SUP                         BIT10
203*1370a723SSascha Wildner #define EFI_ACPI_4_0_SEALED_CASE                           BIT11
204*1370a723SSascha Wildner #define EFI_ACPI_4_0_HEADLESS                              BIT12
205*1370a723SSascha Wildner #define EFI_ACPI_4_0_CPU_SW_SLP                            BIT13
206*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_EXP_WAK                           BIT14
207*1370a723SSascha Wildner #define EFI_ACPI_4_0_USE_PLATFORM_CLOCK                    BIT15
208*1370a723SSascha Wildner #define EFI_ACPI_4_0_S4_RTC_STS_VALID                      BIT16
209*1370a723SSascha Wildner #define EFI_ACPI_4_0_REMOTE_POWER_ON_CAPABLE               BIT17
210*1370a723SSascha Wildner #define EFI_ACPI_4_0_FORCE_APIC_CLUSTER_MODEL              BIT18
211*1370a723SSascha Wildner #define EFI_ACPI_4_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE  BIT19
212*1370a723SSascha Wildner 
213*1370a723SSascha Wildner ///
214*1370a723SSascha Wildner /// Firmware ACPI Control Structure
215*1370a723SSascha Wildner ///
216*1370a723SSascha Wildner typedef struct {
217*1370a723SSascha Wildner   UINT32    Signature;
218*1370a723SSascha Wildner   UINT32    Length;
219*1370a723SSascha Wildner   UINT32    HardwareSignature;
220*1370a723SSascha Wildner   UINT32    FirmwareWakingVector;
221*1370a723SSascha Wildner   UINT32    GlobalLock;
222*1370a723SSascha Wildner   UINT32    Flags;
223*1370a723SSascha Wildner   UINT64    XFirmwareWakingVector;
224*1370a723SSascha Wildner   UINT8     Version;
225*1370a723SSascha Wildner   UINT8     Reserved0[3];
226*1370a723SSascha Wildner   UINT32    OspmFlags;
227*1370a723SSascha Wildner   UINT8     Reserved1[24];
228*1370a723SSascha Wildner } EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
229*1370a723SSascha Wildner 
230*1370a723SSascha Wildner ///
231*1370a723SSascha Wildner /// FACS Version (as defined in ACPI 4.0 spec.)
232*1370a723SSascha Wildner ///
233*1370a723SSascha Wildner #define EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
234*1370a723SSascha Wildner 
235*1370a723SSascha Wildner ///
236*1370a723SSascha Wildner /// Firmware Control Structure Feature Flags
237*1370a723SSascha Wildner /// All other bits are reserved and must be set to 0.
238*1370a723SSascha Wildner ///
239*1370a723SSascha Wildner #define EFI_ACPI_4_0_S4BIOS_F                BIT0
240*1370a723SSascha Wildner #define EFI_ACPI_4_0_64BIT_WAKE_SUPPORTED_F  BIT1
241*1370a723SSascha Wildner 
242*1370a723SSascha Wildner ///
243*1370a723SSascha Wildner /// OSPM Enabled Firmware Control Structure Flags
244*1370a723SSascha Wildner /// All other bits are reserved and must be set to 0.
245*1370a723SSascha Wildner ///
246*1370a723SSascha Wildner #define EFI_ACPI_4_0_OSPM_64BIT_WAKE__F  BIT0
247*1370a723SSascha Wildner 
248*1370a723SSascha Wildner //
249*1370a723SSascha Wildner // Differentiated System Description Table,
250*1370a723SSascha Wildner // Secondary System Description Table
251*1370a723SSascha Wildner // and Persistent System Description Table,
252*1370a723SSascha Wildner // no definition needed as they are common description table header, the same with
253*1370a723SSascha Wildner // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
254*1370a723SSascha Wildner //
255*1370a723SSascha Wildner #define EFI_ACPI_4_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x02
256*1370a723SSascha Wildner #define EFI_ACPI_4_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION       0x02
257*1370a723SSascha Wildner 
258*1370a723SSascha Wildner ///
259*1370a723SSascha Wildner /// Multiple APIC Description Table header definition.  The rest of the table
260*1370a723SSascha Wildner /// must be defined in a platform specific manner.
261*1370a723SSascha Wildner ///
262*1370a723SSascha Wildner typedef struct {
263*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
264*1370a723SSascha Wildner   UINT32                         LocalApicAddress;
265*1370a723SSascha Wildner   UINT32                         Flags;
266*1370a723SSascha Wildner } EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
267*1370a723SSascha Wildner 
268*1370a723SSascha Wildner ///
269*1370a723SSascha Wildner /// MADT Revision (as defined in ACPI 4.0 spec.)
270*1370a723SSascha Wildner ///
271*1370a723SSascha Wildner #define EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION  0x03
272*1370a723SSascha Wildner 
273*1370a723SSascha Wildner ///
274*1370a723SSascha Wildner /// Multiple APIC Flags
275*1370a723SSascha Wildner /// All other bits are reserved and must be set to 0.
276*1370a723SSascha Wildner ///
277*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCAT_COMPAT  BIT0
278*1370a723SSascha Wildner 
279*1370a723SSascha Wildner //
280*1370a723SSascha Wildner // Multiple APIC Description Table APIC structure types
281*1370a723SSascha Wildner // All other values between 0x0B an 0xFF are reserved and
282*1370a723SSascha Wildner // will be ignored by OSPM.
283*1370a723SSascha Wildner //
284*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC           0x00
285*1370a723SSascha Wildner #define EFI_ACPI_4_0_IO_APIC                        0x01
286*1370a723SSascha Wildner #define EFI_ACPI_4_0_INTERRUPT_SOURCE_OVERRIDE      0x02
287*1370a723SSascha Wildner #define EFI_ACPI_4_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
288*1370a723SSascha Wildner #define EFI_ACPI_4_0_LOCAL_APIC_NMI                 0x04
289*1370a723SSascha Wildner #define EFI_ACPI_4_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
290*1370a723SSascha Wildner #define EFI_ACPI_4_0_IO_SAPIC                       0x06
291*1370a723SSascha Wildner #define EFI_ACPI_4_0_LOCAL_SAPIC                    0x07
292*1370a723SSascha Wildner #define EFI_ACPI_4_0_PLATFORM_INTERRUPT_SOURCES     0x08
293*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC         0x09
294*1370a723SSascha Wildner #define EFI_ACPI_4_0_LOCAL_X2APIC_NMI               0x0A
295*1370a723SSascha Wildner 
296*1370a723SSascha Wildner //
297*1370a723SSascha Wildner // APIC Structure Definitions
298*1370a723SSascha Wildner //
299*1370a723SSascha Wildner 
300*1370a723SSascha Wildner ///
301*1370a723SSascha Wildner /// Processor Local APIC Structure Definition
302*1370a723SSascha Wildner ///
303*1370a723SSascha Wildner typedef struct {
304*1370a723SSascha Wildner   UINT8     Type;
305*1370a723SSascha Wildner   UINT8     Length;
306*1370a723SSascha Wildner   UINT8     AcpiProcessorId;
307*1370a723SSascha Wildner   UINT8     ApicId;
308*1370a723SSascha Wildner   UINT32    Flags;
309*1370a723SSascha Wildner } EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
310*1370a723SSascha Wildner 
311*1370a723SSascha Wildner ///
312*1370a723SSascha Wildner /// Local APIC Flags.  All other bits are reserved and must be 0.
313*1370a723SSascha Wildner ///
314*1370a723SSascha Wildner #define EFI_ACPI_4_0_LOCAL_APIC_ENABLED  BIT0
315*1370a723SSascha Wildner 
316*1370a723SSascha Wildner ///
317*1370a723SSascha Wildner /// IO APIC Structure
318*1370a723SSascha Wildner ///
319*1370a723SSascha Wildner typedef struct {
320*1370a723SSascha Wildner   UINT8     Type;
321*1370a723SSascha Wildner   UINT8     Length;
322*1370a723SSascha Wildner   UINT8     IoApicId;
323*1370a723SSascha Wildner   UINT8     Reserved;
324*1370a723SSascha Wildner   UINT32    IoApicAddress;
325*1370a723SSascha Wildner   UINT32    GlobalSystemInterruptBase;
326*1370a723SSascha Wildner } EFI_ACPI_4_0_IO_APIC_STRUCTURE;
327*1370a723SSascha Wildner 
328*1370a723SSascha Wildner ///
329*1370a723SSascha Wildner /// Interrupt Source Override Structure
330*1370a723SSascha Wildner ///
331*1370a723SSascha Wildner typedef struct {
332*1370a723SSascha Wildner   UINT8     Type;
333*1370a723SSascha Wildner   UINT8     Length;
334*1370a723SSascha Wildner   UINT8     Bus;
335*1370a723SSascha Wildner   UINT8     Source;
336*1370a723SSascha Wildner   UINT32    GlobalSystemInterrupt;
337*1370a723SSascha Wildner   UINT16    Flags;
338*1370a723SSascha Wildner } EFI_ACPI_4_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
339*1370a723SSascha Wildner 
340*1370a723SSascha Wildner ///
341*1370a723SSascha Wildner /// Platform Interrupt Sources Structure Definition
342*1370a723SSascha Wildner ///
343*1370a723SSascha Wildner typedef struct {
344*1370a723SSascha Wildner   UINT8     Type;
345*1370a723SSascha Wildner   UINT8     Length;
346*1370a723SSascha Wildner   UINT16    Flags;
347*1370a723SSascha Wildner   UINT8     InterruptType;
348*1370a723SSascha Wildner   UINT8     ProcessorId;
349*1370a723SSascha Wildner   UINT8     ProcessorEid;
350*1370a723SSascha Wildner   UINT8     IoSapicVector;
351*1370a723SSascha Wildner   UINT32    GlobalSystemInterrupt;
352*1370a723SSascha Wildner   UINT32    PlatformInterruptSourceFlags;
353*1370a723SSascha Wildner   UINT8     CpeiProcessorOverride;
354*1370a723SSascha Wildner   UINT8     Reserved[31];
355*1370a723SSascha Wildner } EFI_ACPI_4_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
356*1370a723SSascha Wildner 
357*1370a723SSascha Wildner //
358*1370a723SSascha Wildner // MPS INTI flags.
359*1370a723SSascha Wildner // All other bits are reserved and must be set to 0.
360*1370a723SSascha Wildner //
361*1370a723SSascha Wildner #define EFI_ACPI_4_0_POLARITY      (3 << 0)
362*1370a723SSascha Wildner #define EFI_ACPI_4_0_TRIGGER_MODE  (3 << 2)
363*1370a723SSascha Wildner 
364*1370a723SSascha Wildner ///
365*1370a723SSascha Wildner /// Non-Maskable Interrupt Source Structure
366*1370a723SSascha Wildner ///
367*1370a723SSascha Wildner typedef struct {
368*1370a723SSascha Wildner   UINT8     Type;
369*1370a723SSascha Wildner   UINT8     Length;
370*1370a723SSascha Wildner   UINT16    Flags;
371*1370a723SSascha Wildner   UINT32    GlobalSystemInterrupt;
372*1370a723SSascha Wildner } EFI_ACPI_4_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
373*1370a723SSascha Wildner 
374*1370a723SSascha Wildner ///
375*1370a723SSascha Wildner /// Local APIC NMI Structure
376*1370a723SSascha Wildner ///
377*1370a723SSascha Wildner typedef struct {
378*1370a723SSascha Wildner   UINT8     Type;
379*1370a723SSascha Wildner   UINT8     Length;
380*1370a723SSascha Wildner   UINT8     AcpiProcessorId;
381*1370a723SSascha Wildner   UINT16    Flags;
382*1370a723SSascha Wildner   UINT8     LocalApicLint;
383*1370a723SSascha Wildner } EFI_ACPI_4_0_LOCAL_APIC_NMI_STRUCTURE;
384*1370a723SSascha Wildner 
385*1370a723SSascha Wildner ///
386*1370a723SSascha Wildner /// Local APIC Address Override Structure
387*1370a723SSascha Wildner ///
388*1370a723SSascha Wildner typedef struct {
389*1370a723SSascha Wildner   UINT8     Type;
390*1370a723SSascha Wildner   UINT8     Length;
391*1370a723SSascha Wildner   UINT16    Reserved;
392*1370a723SSascha Wildner   UINT64    LocalApicAddress;
393*1370a723SSascha Wildner } EFI_ACPI_4_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
394*1370a723SSascha Wildner 
395*1370a723SSascha Wildner ///
396*1370a723SSascha Wildner /// IO SAPIC Structure
397*1370a723SSascha Wildner ///
398*1370a723SSascha Wildner typedef struct {
399*1370a723SSascha Wildner   UINT8     Type;
400*1370a723SSascha Wildner   UINT8     Length;
401*1370a723SSascha Wildner   UINT8     IoApicId;
402*1370a723SSascha Wildner   UINT8     Reserved;
403*1370a723SSascha Wildner   UINT32    GlobalSystemInterruptBase;
404*1370a723SSascha Wildner   UINT64    IoSapicAddress;
405*1370a723SSascha Wildner } EFI_ACPI_4_0_IO_SAPIC_STRUCTURE;
406*1370a723SSascha Wildner 
407*1370a723SSascha Wildner ///
408*1370a723SSascha Wildner /// Local SAPIC Structure
409*1370a723SSascha Wildner /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
410*1370a723SSascha Wildner ///
411*1370a723SSascha Wildner typedef struct {
412*1370a723SSascha Wildner   UINT8     Type;
413*1370a723SSascha Wildner   UINT8     Length;
414*1370a723SSascha Wildner   UINT8     AcpiProcessorId;
415*1370a723SSascha Wildner   UINT8     LocalSapicId;
416*1370a723SSascha Wildner   UINT8     LocalSapicEid;
417*1370a723SSascha Wildner   UINT8     Reserved[3];
418*1370a723SSascha Wildner   UINT32    Flags;
419*1370a723SSascha Wildner   UINT32    ACPIProcessorUIDValue;
420*1370a723SSascha Wildner } EFI_ACPI_4_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
421*1370a723SSascha Wildner 
422*1370a723SSascha Wildner ///
423*1370a723SSascha Wildner /// Platform Interrupt Sources Structure
424*1370a723SSascha Wildner ///
425*1370a723SSascha Wildner typedef struct {
426*1370a723SSascha Wildner   UINT8     Type;
427*1370a723SSascha Wildner   UINT8     Length;
428*1370a723SSascha Wildner   UINT16    Flags;
429*1370a723SSascha Wildner   UINT8     InterruptType;
430*1370a723SSascha Wildner   UINT8     ProcessorId;
431*1370a723SSascha Wildner   UINT8     ProcessorEid;
432*1370a723SSascha Wildner   UINT8     IoSapicVector;
433*1370a723SSascha Wildner   UINT32    GlobalSystemInterrupt;
434*1370a723SSascha Wildner   UINT32    PlatformInterruptSourceFlags;
435*1370a723SSascha Wildner } EFI_ACPI_4_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
436*1370a723SSascha Wildner 
437*1370a723SSascha Wildner ///
438*1370a723SSascha Wildner /// Platform Interrupt Source Flags.
439*1370a723SSascha Wildner /// All other bits are reserved and must be set to 0.
440*1370a723SSascha Wildner ///
441*1370a723SSascha Wildner #define EFI_ACPI_4_0_CPEI_PROCESSOR_OVERRIDE  BIT0
442*1370a723SSascha Wildner 
443*1370a723SSascha Wildner ///
444*1370a723SSascha Wildner /// Processor Local x2APIC Structure Definition
445*1370a723SSascha Wildner ///
446*1370a723SSascha Wildner typedef struct {
447*1370a723SSascha Wildner   UINT8     Type;
448*1370a723SSascha Wildner   UINT8     Length;
449*1370a723SSascha Wildner   UINT8     Reserved[2];
450*1370a723SSascha Wildner   UINT32    X2ApicId;
451*1370a723SSascha Wildner   UINT32    Flags;
452*1370a723SSascha Wildner   UINT32    AcpiProcessorUid;
453*1370a723SSascha Wildner } EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
454*1370a723SSascha Wildner 
455*1370a723SSascha Wildner ///
456*1370a723SSascha Wildner /// Local x2APIC NMI Structure
457*1370a723SSascha Wildner ///
458*1370a723SSascha Wildner typedef struct {
459*1370a723SSascha Wildner   UINT8     Type;
460*1370a723SSascha Wildner   UINT8     Length;
461*1370a723SSascha Wildner   UINT16    Flags;
462*1370a723SSascha Wildner   UINT32    AcpiProcessorUid;
463*1370a723SSascha Wildner   UINT8     LocalX2ApicLint;
464*1370a723SSascha Wildner   UINT8     Reserved[3];
465*1370a723SSascha Wildner } EFI_ACPI_4_0_LOCAL_X2APIC_NMI_STRUCTURE;
466*1370a723SSascha Wildner 
467*1370a723SSascha Wildner ///
468*1370a723SSascha Wildner /// Smart Battery Description Table (SBST)
469*1370a723SSascha Wildner ///
470*1370a723SSascha Wildner typedef struct {
471*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
472*1370a723SSascha Wildner   UINT32                         WarningEnergyLevel;
473*1370a723SSascha Wildner   UINT32                         LowEnergyLevel;
474*1370a723SSascha Wildner   UINT32                         CriticalEnergyLevel;
475*1370a723SSascha Wildner } EFI_ACPI_4_0_SMART_BATTERY_DESCRIPTION_TABLE;
476*1370a723SSascha Wildner 
477*1370a723SSascha Wildner ///
478*1370a723SSascha Wildner /// SBST Version (as defined in ACPI 4.0 spec.)
479*1370a723SSascha Wildner ///
480*1370a723SSascha Wildner #define EFI_ACPI_4_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION  0x01
481*1370a723SSascha Wildner 
482*1370a723SSascha Wildner ///
483*1370a723SSascha Wildner /// Embedded Controller Boot Resources Table (ECDT)
484*1370a723SSascha Wildner /// The table is followed by a null terminated ASCII string that contains
485*1370a723SSascha Wildner /// a fully qualified reference to the name space object.
486*1370a723SSascha Wildner ///
487*1370a723SSascha Wildner typedef struct {
488*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER               Header;
489*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    EcControl;
490*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    EcData;
491*1370a723SSascha Wildner   UINT32                                    Uid;
492*1370a723SSascha Wildner   UINT8                                     GpeBit;
493*1370a723SSascha Wildner } EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
494*1370a723SSascha Wildner 
495*1370a723SSascha Wildner ///
496*1370a723SSascha Wildner /// ECDT Version (as defined in ACPI 4.0 spec.)
497*1370a723SSascha Wildner ///
498*1370a723SSascha Wildner #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
499*1370a723SSascha Wildner 
500*1370a723SSascha Wildner ///
501*1370a723SSascha Wildner /// System Resource Affinity Table (SRAT.  The rest of the table
502*1370a723SSascha Wildner /// must be defined in a platform specific manner.
503*1370a723SSascha Wildner ///
504*1370a723SSascha Wildner typedef struct {
505*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
506*1370a723SSascha Wildner   UINT32                         Reserved1; ///< Must be set to 1
507*1370a723SSascha Wildner   UINT64                         Reserved2;
508*1370a723SSascha Wildner } EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
509*1370a723SSascha Wildner 
510*1370a723SSascha Wildner ///
511*1370a723SSascha Wildner /// SRAT Version (as defined in ACPI 4.0 spec.)
512*1370a723SSascha Wildner ///
513*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
514*1370a723SSascha Wildner 
515*1370a723SSascha Wildner //
516*1370a723SSascha Wildner // SRAT structure types.
517*1370a723SSascha Wildner // All other values between 0x03 an 0xFF are reserved and
518*1370a723SSascha Wildner // will be ignored by OSPM.
519*1370a723SSascha Wildner //
520*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
521*1370a723SSascha Wildner #define EFI_ACPI_4_0_MEMORY_AFFINITY                      0x01
522*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
523*1370a723SSascha Wildner 
524*1370a723SSascha Wildner ///
525*1370a723SSascha Wildner /// Processor Local APIC/SAPIC Affinity Structure Definition
526*1370a723SSascha Wildner ///
527*1370a723SSascha Wildner typedef struct {
528*1370a723SSascha Wildner   UINT8     Type;
529*1370a723SSascha Wildner   UINT8     Length;
530*1370a723SSascha Wildner   UINT8     ProximityDomain7To0;
531*1370a723SSascha Wildner   UINT8     ApicId;
532*1370a723SSascha Wildner   UINT32    Flags;
533*1370a723SSascha Wildner   UINT8     LocalSapicEid;
534*1370a723SSascha Wildner   UINT8     ProximityDomain31To8[3];
535*1370a723SSascha Wildner   UINT32    ClockDomain;
536*1370a723SSascha Wildner } EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
537*1370a723SSascha Wildner 
538*1370a723SSascha Wildner ///
539*1370a723SSascha Wildner /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
540*1370a723SSascha Wildner ///
541*1370a723SSascha Wildner #define EFI_ACPI_4_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED  (1 << 0)
542*1370a723SSascha Wildner 
543*1370a723SSascha Wildner ///
544*1370a723SSascha Wildner /// Memory Affinity Structure Definition
545*1370a723SSascha Wildner ///
546*1370a723SSascha Wildner typedef struct {
547*1370a723SSascha Wildner   UINT8     Type;
548*1370a723SSascha Wildner   UINT8     Length;
549*1370a723SSascha Wildner   UINT32    ProximityDomain;
550*1370a723SSascha Wildner   UINT16    Reserved1;
551*1370a723SSascha Wildner   UINT32    AddressBaseLow;
552*1370a723SSascha Wildner   UINT32    AddressBaseHigh;
553*1370a723SSascha Wildner   UINT32    LengthLow;
554*1370a723SSascha Wildner   UINT32    LengthHigh;
555*1370a723SSascha Wildner   UINT32    Reserved2;
556*1370a723SSascha Wildner   UINT32    Flags;
557*1370a723SSascha Wildner   UINT64    Reserved3;
558*1370a723SSascha Wildner } EFI_ACPI_4_0_MEMORY_AFFINITY_STRUCTURE;
559*1370a723SSascha Wildner 
560*1370a723SSascha Wildner //
561*1370a723SSascha Wildner // Memory Flags.  All other bits are reserved and must be 0.
562*1370a723SSascha Wildner //
563*1370a723SSascha Wildner #define EFI_ACPI_4_0_MEMORY_ENABLED        (1 << 0)
564*1370a723SSascha Wildner #define EFI_ACPI_4_0_MEMORY_HOT_PLUGGABLE  (1 << 1)
565*1370a723SSascha Wildner #define EFI_ACPI_4_0_MEMORY_NONVOLATILE    (1 << 2)
566*1370a723SSascha Wildner 
567*1370a723SSascha Wildner ///
568*1370a723SSascha Wildner /// Processor Local x2APIC Affinity Structure Definition
569*1370a723SSascha Wildner ///
570*1370a723SSascha Wildner typedef struct {
571*1370a723SSascha Wildner   UINT8     Type;
572*1370a723SSascha Wildner   UINT8     Length;
573*1370a723SSascha Wildner   UINT8     Reserved1[2];
574*1370a723SSascha Wildner   UINT32    ProximityDomain;
575*1370a723SSascha Wildner   UINT32    X2ApicId;
576*1370a723SSascha Wildner   UINT32    Flags;
577*1370a723SSascha Wildner   UINT32    ClockDomain;
578*1370a723SSascha Wildner   UINT8     Reserved2[4];
579*1370a723SSascha Wildner } EFI_ACPI_4_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
580*1370a723SSascha Wildner 
581*1370a723SSascha Wildner ///
582*1370a723SSascha Wildner /// System Locality Distance Information Table (SLIT).
583*1370a723SSascha Wildner /// The rest of the table is a matrix.
584*1370a723SSascha Wildner ///
585*1370a723SSascha Wildner typedef struct {
586*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
587*1370a723SSascha Wildner   UINT64                         NumberOfSystemLocalities;
588*1370a723SSascha Wildner } EFI_ACPI_4_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
589*1370a723SSascha Wildner 
590*1370a723SSascha Wildner ///
591*1370a723SSascha Wildner /// SLIT Version (as defined in ACPI 4.0 spec.)
592*1370a723SSascha Wildner ///
593*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
594*1370a723SSascha Wildner 
595*1370a723SSascha Wildner ///
596*1370a723SSascha Wildner /// Corrected Platform Error Polling Table (CPEP)
597*1370a723SSascha Wildner ///
598*1370a723SSascha Wildner typedef struct {
599*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
600*1370a723SSascha Wildner   UINT8                          Reserved[8];
601*1370a723SSascha Wildner } EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
602*1370a723SSascha Wildner 
603*1370a723SSascha Wildner ///
604*1370a723SSascha Wildner /// CPEP Version (as defined in ACPI 4.0 spec.)
605*1370a723SSascha Wildner ///
606*1370a723SSascha Wildner #define EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION  0x01
607*1370a723SSascha Wildner 
608*1370a723SSascha Wildner //
609*1370a723SSascha Wildner // CPEP processor structure types.
610*1370a723SSascha Wildner //
611*1370a723SSascha Wildner #define EFI_ACPI_4_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
612*1370a723SSascha Wildner 
613*1370a723SSascha Wildner ///
614*1370a723SSascha Wildner /// Corrected Platform Error Polling Processor Structure Definition
615*1370a723SSascha Wildner ///
616*1370a723SSascha Wildner typedef struct {
617*1370a723SSascha Wildner   UINT8     Type;
618*1370a723SSascha Wildner   UINT8     Length;
619*1370a723SSascha Wildner   UINT8     ProcessorId;
620*1370a723SSascha Wildner   UINT8     ProcessorEid;
621*1370a723SSascha Wildner   UINT32    PollingInterval;
622*1370a723SSascha Wildner } EFI_ACPI_4_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
623*1370a723SSascha Wildner 
624*1370a723SSascha Wildner ///
625*1370a723SSascha Wildner /// Maximum System Characteristics Table (MSCT)
626*1370a723SSascha Wildner ///
627*1370a723SSascha Wildner typedef struct {
628*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
629*1370a723SSascha Wildner   UINT32                         OffsetProxDomInfo;
630*1370a723SSascha Wildner   UINT32                         MaximumNumberOfProximityDomains;
631*1370a723SSascha Wildner   UINT32                         MaximumNumberOfClockDomains;
632*1370a723SSascha Wildner   UINT64                         MaximumPhysicalAddress;
633*1370a723SSascha Wildner } EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
634*1370a723SSascha Wildner 
635*1370a723SSascha Wildner ///
636*1370a723SSascha Wildner /// MSCT Version (as defined in ACPI 4.0 spec.)
637*1370a723SSascha Wildner ///
638*1370a723SSascha Wildner #define EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION  0x01
639*1370a723SSascha Wildner 
640*1370a723SSascha Wildner ///
641*1370a723SSascha Wildner /// Maximum Proximity Domain Information Structure Definition
642*1370a723SSascha Wildner ///
643*1370a723SSascha Wildner typedef struct {
644*1370a723SSascha Wildner   UINT8     Revision;
645*1370a723SSascha Wildner   UINT8     Length;
646*1370a723SSascha Wildner   UINT32    ProximityDomainRangeLow;
647*1370a723SSascha Wildner   UINT32    ProximityDomainRangeHigh;
648*1370a723SSascha Wildner   UINT32    MaximumProcessorCapacity;
649*1370a723SSascha Wildner   UINT64    MaximumMemoryCapacity;
650*1370a723SSascha Wildner } EFI_ACPI_4_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
651*1370a723SSascha Wildner 
652*1370a723SSascha Wildner ///
653*1370a723SSascha Wildner /// Boot Error Record Table (BERT)
654*1370a723SSascha Wildner ///
655*1370a723SSascha Wildner typedef struct {
656*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
657*1370a723SSascha Wildner   UINT32                         BootErrorRegionLength;
658*1370a723SSascha Wildner   UINT64                         BootErrorRegion;
659*1370a723SSascha Wildner } EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_HEADER;
660*1370a723SSascha Wildner 
661*1370a723SSascha Wildner ///
662*1370a723SSascha Wildner /// BERT Version (as defined in ACPI 4.0 spec.)
663*1370a723SSascha Wildner ///
664*1370a723SSascha Wildner #define EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_REVISION  0x01
665*1370a723SSascha Wildner 
666*1370a723SSascha Wildner ///
667*1370a723SSascha Wildner /// Boot Error Region Block Status Definition
668*1370a723SSascha Wildner ///
669*1370a723SSascha Wildner typedef struct {
670*1370a723SSascha Wildner   UINT32    UncorrectableErrorValid     : 1;
671*1370a723SSascha Wildner   UINT32    CorrectableErrorValid       : 1;
672*1370a723SSascha Wildner   UINT32    MultipleUncorrectableErrors : 1;
673*1370a723SSascha Wildner   UINT32    MultipleCorrectableErrors   : 1;
674*1370a723SSascha Wildner   UINT32    ErrorDataEntryCount         : 10;
675*1370a723SSascha Wildner   UINT32    Reserved                    : 18;
676*1370a723SSascha Wildner } EFI_ACPI_4_0_ERROR_BLOCK_STATUS;
677*1370a723SSascha Wildner 
678*1370a723SSascha Wildner ///
679*1370a723SSascha Wildner /// Boot Error Region Definition
680*1370a723SSascha Wildner ///
681*1370a723SSascha Wildner typedef struct {
682*1370a723SSascha Wildner   EFI_ACPI_4_0_ERROR_BLOCK_STATUS    BlockStatus;
683*1370a723SSascha Wildner   UINT32                             RawDataOffset;
684*1370a723SSascha Wildner   UINT32                             RawDataLength;
685*1370a723SSascha Wildner   UINT32                             DataLength;
686*1370a723SSascha Wildner   UINT32                             ErrorSeverity;
687*1370a723SSascha Wildner } EFI_ACPI_4_0_BOOT_ERROR_REGION_STRUCTURE;
688*1370a723SSascha Wildner 
689*1370a723SSascha Wildner //
690*1370a723SSascha Wildner // Boot Error Severity types
691*1370a723SSascha Wildner //
692*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SEVERITY_CORRECTABLE  0x00
693*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SEVERITY_RECOVERABLE  0x00
694*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SEVERITY_FATAL        0x01
695*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SEVERITY_CORRECTED    0x02
696*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SEVERITY_NONE         0x03
697*1370a723SSascha Wildner 
698*1370a723SSascha Wildner ///
699*1370a723SSascha Wildner /// Generic Error Data Entry Definition
700*1370a723SSascha Wildner ///
701*1370a723SSascha Wildner typedef struct {
702*1370a723SSascha Wildner   UINT8     SectionType[16];
703*1370a723SSascha Wildner   UINT32    ErrorSeverity;
704*1370a723SSascha Wildner   UINT16    Revision;
705*1370a723SSascha Wildner   UINT8     ValidationBits;
706*1370a723SSascha Wildner   UINT8     Flags;
707*1370a723SSascha Wildner   UINT32    ErrorDataLength;
708*1370a723SSascha Wildner   UINT8     FruId[16];
709*1370a723SSascha Wildner   UINT8     FruText[20];
710*1370a723SSascha Wildner } EFI_ACPI_4_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
711*1370a723SSascha Wildner 
712*1370a723SSascha Wildner ///
713*1370a723SSascha Wildner /// Generic Error Data Entry Version (as defined in ACPI 4.0 spec.)
714*1370a723SSascha Wildner ///
715*1370a723SSascha Wildner #define EFI_ACPI_4_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
716*1370a723SSascha Wildner 
717*1370a723SSascha Wildner ///
718*1370a723SSascha Wildner /// HEST - Hardware Error Source Table
719*1370a723SSascha Wildner ///
720*1370a723SSascha Wildner typedef struct {
721*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
722*1370a723SSascha Wildner   UINT32                         ErrorSourceCount;
723*1370a723SSascha Wildner } EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
724*1370a723SSascha Wildner 
725*1370a723SSascha Wildner ///
726*1370a723SSascha Wildner /// HEST Version (as defined in ACPI 4.0 spec.)
727*1370a723SSascha Wildner ///
728*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION  0x01
729*1370a723SSascha Wildner 
730*1370a723SSascha Wildner //
731*1370a723SSascha Wildner // Error Source structure types.
732*1370a723SSascha Wildner //
733*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
734*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
735*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
736*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
737*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_EXPRESS_DEVICE_AER                     0x07
738*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_EXPRESS_BRIDGE_AER                     0x08
739*1370a723SSascha Wildner #define EFI_ACPI_4_0_GENERIC_HARDWARE_ERROR                     0x09
740*1370a723SSascha Wildner 
741*1370a723SSascha Wildner //
742*1370a723SSascha Wildner // Error Source structure flags.
743*1370a723SSascha Wildner //
744*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST  (1 << 0)
745*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_SOURCE_FLAG_GLOBAL          (1 << 1)
746*1370a723SSascha Wildner 
747*1370a723SSascha Wildner ///
748*1370a723SSascha Wildner /// IA-32 Architecture Machine Check Exception Structure Definition
749*1370a723SSascha Wildner ///
750*1370a723SSascha Wildner typedef struct {
751*1370a723SSascha Wildner   UINT16    Type;
752*1370a723SSascha Wildner   UINT16    SourceId;
753*1370a723SSascha Wildner   UINT8     Reserved0[2];
754*1370a723SSascha Wildner   UINT8     Flags;
755*1370a723SSascha Wildner   UINT8     Enabled;
756*1370a723SSascha Wildner   UINT32    NumberOfRecordsToPreAllocate;
757*1370a723SSascha Wildner   UINT32    MaxSectionsPerRecord;
758*1370a723SSascha Wildner   UINT64    GlobalCapabilityInitData;
759*1370a723SSascha Wildner   UINT64    GlobalControlInitData;
760*1370a723SSascha Wildner   UINT8     NumberOfHardwareBanks;
761*1370a723SSascha Wildner   UINT8     Reserved1[7];
762*1370a723SSascha Wildner } EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
763*1370a723SSascha Wildner 
764*1370a723SSascha Wildner ///
765*1370a723SSascha Wildner /// IA-32 Architecture Machine Check Bank Structure Definition
766*1370a723SSascha Wildner ///
767*1370a723SSascha Wildner typedef struct {
768*1370a723SSascha Wildner   UINT8     BankNumber;
769*1370a723SSascha Wildner   UINT8     ClearStatusOnInitialization;
770*1370a723SSascha Wildner   UINT8     StatusDataFormat;
771*1370a723SSascha Wildner   UINT8     Reserved0;
772*1370a723SSascha Wildner   UINT32    ControlRegisterMsrAddress;
773*1370a723SSascha Wildner   UINT64    ControlInitData;
774*1370a723SSascha Wildner   UINT32    StatusRegisterMsrAddress;
775*1370a723SSascha Wildner   UINT32    AddressRegisterMsrAddress;
776*1370a723SSascha Wildner   UINT32    MiscRegisterMsrAddress;
777*1370a723SSascha Wildner } EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
778*1370a723SSascha Wildner 
779*1370a723SSascha Wildner ///
780*1370a723SSascha Wildner /// IA-32 Architecture Machine Check Bank Structure MCA data format
781*1370a723SSascha Wildner ///
782*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32     0x00
783*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64  0x01
784*1370a723SSascha Wildner #define EFI_ACPI_4_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64    0x02
785*1370a723SSascha Wildner 
786*1370a723SSascha Wildner //
787*1370a723SSascha Wildner // Hardware Error Notification types. All other values are reserved
788*1370a723SSascha Wildner //
789*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_POLLED              0x00
790*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT  0x01
791*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT     0x02
792*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_SCI                 0x03
793*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_NMI                 0x04
794*1370a723SSascha Wildner 
795*1370a723SSascha Wildner ///
796*1370a723SSascha Wildner /// Hardware Error Notification Configuration Write Enable Structure Definition
797*1370a723SSascha Wildner ///
798*1370a723SSascha Wildner typedef struct {
799*1370a723SSascha Wildner   UINT16    Type                           : 1;
800*1370a723SSascha Wildner   UINT16    PollInterval                   : 1;
801*1370a723SSascha Wildner   UINT16    SwitchToPollingThresholdValue  : 1;
802*1370a723SSascha Wildner   UINT16    SwitchToPollingThresholdWindow : 1;
803*1370a723SSascha Wildner   UINT16    ErrorThresholdValue            : 1;
804*1370a723SSascha Wildner   UINT16    ErrorThresholdWindow           : 1;
805*1370a723SSascha Wildner   UINT16    Reserved                       : 10;
806*1370a723SSascha Wildner } EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
807*1370a723SSascha Wildner 
808*1370a723SSascha Wildner ///
809*1370a723SSascha Wildner /// Hardware Error Notification Structure Definition
810*1370a723SSascha Wildner ///
811*1370a723SSascha Wildner typedef struct {
812*1370a723SSascha Wildner   UINT8                                                                            Type;
813*1370a723SSascha Wildner   UINT8                                                                            Length;
814*1370a723SSascha Wildner   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE    ConfigurationWriteEnable;
815*1370a723SSascha Wildner   UINT32                                                                           PollInterval;
816*1370a723SSascha Wildner   UINT32                                                                           Vector;
817*1370a723SSascha Wildner   UINT32                                                                           SwitchToPollingThresholdValue;
818*1370a723SSascha Wildner   UINT32                                                                           SwitchToPollingThresholdWindow;
819*1370a723SSascha Wildner   UINT32                                                                           ErrorThresholdValue;
820*1370a723SSascha Wildner   UINT32                                                                           ErrorThresholdWindow;
821*1370a723SSascha Wildner } EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
822*1370a723SSascha Wildner 
823*1370a723SSascha Wildner ///
824*1370a723SSascha Wildner /// IA-32 Architecture Corrected Machine Check Structure Definition
825*1370a723SSascha Wildner ///
826*1370a723SSascha Wildner typedef struct {
827*1370a723SSascha Wildner   UINT16                                                Type;
828*1370a723SSascha Wildner   UINT16                                                SourceId;
829*1370a723SSascha Wildner   UINT8                                                 Reserved0[2];
830*1370a723SSascha Wildner   UINT8                                                 Flags;
831*1370a723SSascha Wildner   UINT8                                                 Enabled;
832*1370a723SSascha Wildner   UINT32                                                NumberOfRecordsToPreAllocate;
833*1370a723SSascha Wildner   UINT32                                                MaxSectionsPerRecord;
834*1370a723SSascha Wildner   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
835*1370a723SSascha Wildner   UINT8                                                 NumberOfHardwareBanks;
836*1370a723SSascha Wildner   UINT8                                                 Reserved1[3];
837*1370a723SSascha Wildner } EFI_ACPI_4_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
838*1370a723SSascha Wildner 
839*1370a723SSascha Wildner ///
840*1370a723SSascha Wildner /// IA-32 Architecture NMI Error Structure Definition
841*1370a723SSascha Wildner ///
842*1370a723SSascha Wildner typedef struct {
843*1370a723SSascha Wildner   UINT16    Type;
844*1370a723SSascha Wildner   UINT16    SourceId;
845*1370a723SSascha Wildner   UINT8     Reserved0[2];
846*1370a723SSascha Wildner   UINT32    NumberOfRecordsToPreAllocate;
847*1370a723SSascha Wildner   UINT32    MaxSectionsPerRecord;
848*1370a723SSascha Wildner   UINT32    MaxRawDataLength;
849*1370a723SSascha Wildner } EFI_ACPI_4_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
850*1370a723SSascha Wildner 
851*1370a723SSascha Wildner ///
852*1370a723SSascha Wildner /// PCI Express Root Port AER Structure Definition
853*1370a723SSascha Wildner ///
854*1370a723SSascha Wildner typedef struct {
855*1370a723SSascha Wildner   UINT16    Type;
856*1370a723SSascha Wildner   UINT16    SourceId;
857*1370a723SSascha Wildner   UINT8     Reserved0[2];
858*1370a723SSascha Wildner   UINT8     Flags;
859*1370a723SSascha Wildner   UINT8     Enabled;
860*1370a723SSascha Wildner   UINT32    NumberOfRecordsToPreAllocate;
861*1370a723SSascha Wildner   UINT32    MaxSectionsPerRecord;
862*1370a723SSascha Wildner   UINT32    Bus;
863*1370a723SSascha Wildner   UINT16    Device;
864*1370a723SSascha Wildner   UINT16    Function;
865*1370a723SSascha Wildner   UINT16    DeviceControl;
866*1370a723SSascha Wildner   UINT8     Reserved1[2];
867*1370a723SSascha Wildner   UINT32    UncorrectableErrorMask;
868*1370a723SSascha Wildner   UINT32    UncorrectableErrorSeverity;
869*1370a723SSascha Wildner   UINT32    CorrectableErrorMask;
870*1370a723SSascha Wildner   UINT32    AdvancedErrorCapabilitiesAndControl;
871*1370a723SSascha Wildner   UINT32    RootErrorCommand;
872*1370a723SSascha Wildner } EFI_ACPI_4_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
873*1370a723SSascha Wildner 
874*1370a723SSascha Wildner ///
875*1370a723SSascha Wildner /// PCI Express Device AER Structure Definition
876*1370a723SSascha Wildner ///
877*1370a723SSascha Wildner typedef struct {
878*1370a723SSascha Wildner   UINT16    Type;
879*1370a723SSascha Wildner   UINT16    SourceId;
880*1370a723SSascha Wildner   UINT8     Reserved0[2];
881*1370a723SSascha Wildner   UINT8     Flags;
882*1370a723SSascha Wildner   UINT8     Enabled;
883*1370a723SSascha Wildner   UINT32    NumberOfRecordsToPreAllocate;
884*1370a723SSascha Wildner   UINT32    MaxSectionsPerRecord;
885*1370a723SSascha Wildner   UINT32    Bus;
886*1370a723SSascha Wildner   UINT16    Device;
887*1370a723SSascha Wildner   UINT16    Function;
888*1370a723SSascha Wildner   UINT16    DeviceControl;
889*1370a723SSascha Wildner   UINT8     Reserved1[2];
890*1370a723SSascha Wildner   UINT32    UncorrectableErrorMask;
891*1370a723SSascha Wildner   UINT32    UncorrectableErrorSeverity;
892*1370a723SSascha Wildner   UINT32    CorrectableErrorMask;
893*1370a723SSascha Wildner   UINT32    AdvancedErrorCapabilitiesAndControl;
894*1370a723SSascha Wildner } EFI_ACPI_4_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
895*1370a723SSascha Wildner 
896*1370a723SSascha Wildner ///
897*1370a723SSascha Wildner /// PCI Express Bridge AER Structure Definition
898*1370a723SSascha Wildner ///
899*1370a723SSascha Wildner typedef struct {
900*1370a723SSascha Wildner   UINT16    Type;
901*1370a723SSascha Wildner   UINT16    SourceId;
902*1370a723SSascha Wildner   UINT8     Reserved0[2];
903*1370a723SSascha Wildner   UINT8     Flags;
904*1370a723SSascha Wildner   UINT8     Enabled;
905*1370a723SSascha Wildner   UINT32    NumberOfRecordsToPreAllocate;
906*1370a723SSascha Wildner   UINT32    MaxSectionsPerRecord;
907*1370a723SSascha Wildner   UINT32    Bus;
908*1370a723SSascha Wildner   UINT16    Device;
909*1370a723SSascha Wildner   UINT16    Function;
910*1370a723SSascha Wildner   UINT16    DeviceControl;
911*1370a723SSascha Wildner   UINT8     Reserved1[2];
912*1370a723SSascha Wildner   UINT32    UncorrectableErrorMask;
913*1370a723SSascha Wildner   UINT32    UncorrectableErrorSeverity;
914*1370a723SSascha Wildner   UINT32    CorrectableErrorMask;
915*1370a723SSascha Wildner   UINT32    AdvancedErrorCapabilitiesAndControl;
916*1370a723SSascha Wildner   UINT32    SecondaryUncorrectableErrorMask;
917*1370a723SSascha Wildner   UINT32    SecondaryUncorrectableErrorSeverity;
918*1370a723SSascha Wildner   UINT32    SecondaryAdvancedErrorCapabilitiesAndControl;
919*1370a723SSascha Wildner } EFI_ACPI_4_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
920*1370a723SSascha Wildner 
921*1370a723SSascha Wildner ///
922*1370a723SSascha Wildner /// Generic Hardware Error Source Structure Definition
923*1370a723SSascha Wildner ///
924*1370a723SSascha Wildner typedef struct {
925*1370a723SSascha Wildner   UINT16                                                Type;
926*1370a723SSascha Wildner   UINT16                                                SourceId;
927*1370a723SSascha Wildner   UINT16                                                RelatedSourceId;
928*1370a723SSascha Wildner   UINT8                                                 Flags;
929*1370a723SSascha Wildner   UINT8                                                 Enabled;
930*1370a723SSascha Wildner   UINT32                                                NumberOfRecordsToPreAllocate;
931*1370a723SSascha Wildner   UINT32                                                MaxSectionsPerRecord;
932*1370a723SSascha Wildner   UINT32                                                MaxRawDataLength;
933*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE                ErrorStatusAddress;
934*1370a723SSascha Wildner   EFI_ACPI_4_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
935*1370a723SSascha Wildner   UINT32                                                ErrorStatusBlockLength;
936*1370a723SSascha Wildner } EFI_ACPI_4_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
937*1370a723SSascha Wildner 
938*1370a723SSascha Wildner ///
939*1370a723SSascha Wildner /// Generic Error Status Definition
940*1370a723SSascha Wildner ///
941*1370a723SSascha Wildner typedef struct {
942*1370a723SSascha Wildner   EFI_ACPI_4_0_ERROR_BLOCK_STATUS    BlockStatus;
943*1370a723SSascha Wildner   UINT32                             RawDataOffset;
944*1370a723SSascha Wildner   UINT32                             RawDataLength;
945*1370a723SSascha Wildner   UINT32                             DataLength;
946*1370a723SSascha Wildner   UINT32                             ErrorSeverity;
947*1370a723SSascha Wildner } EFI_ACPI_4_0_GENERIC_ERROR_STATUS_STRUCTURE;
948*1370a723SSascha Wildner 
949*1370a723SSascha Wildner ///
950*1370a723SSascha Wildner /// ERST - Error Record Serialization Table
951*1370a723SSascha Wildner ///
952*1370a723SSascha Wildner typedef struct {
953*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
954*1370a723SSascha Wildner   UINT32                         SerializationHeaderSize;
955*1370a723SSascha Wildner   UINT8                          Reserved0[4];
956*1370a723SSascha Wildner   UINT32                         InstructionEntryCount;
957*1370a723SSascha Wildner } EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
958*1370a723SSascha Wildner 
959*1370a723SSascha Wildner ///
960*1370a723SSascha Wildner /// ERST Version (as defined in ACPI 4.0 spec.)
961*1370a723SSascha Wildner ///
962*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION  0x01
963*1370a723SSascha Wildner 
964*1370a723SSascha Wildner ///
965*1370a723SSascha Wildner /// ERST Serialization Actions
966*1370a723SSascha Wildner ///
967*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_BEGIN_WRITE_OPERATION                   0x00
968*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_BEGIN_READ_OPERATION                    0x01
969*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_BEGIN_CLEAR_OPERATION                   0x02
970*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_END_OPERATION                           0x03
971*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SET_RECORD_OFFSET                       0x04
972*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_EXECUTE_OPERATION                       0x05
973*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_CHECK_BUSY_STATUS                       0x06
974*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_COMMAND_STATUS                      0x07
975*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_RECORD_IDENTIFIER                   0x08
976*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SET_RECORD_IDENTIFIER                   0x09
977*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_RECORD_COUNT                        0x0A
978*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_BEGIN_DUMMY_WRITE_OPERATION             0x0B
979*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE             0x0D
980*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH      0x0E
981*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES  0x0F
982*1370a723SSascha Wildner 
983*1370a723SSascha Wildner ///
984*1370a723SSascha Wildner /// ERST Action Command Status
985*1370a723SSascha Wildner ///
986*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_SUCCESS                 0x00
987*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_NOT_ENOUGH_SPACE        0x01
988*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_HARDWARE_NOT_AVAILABLE  0x02
989*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_FAILED                  0x03
990*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_RECORD_STORE_EMPTY      0x04
991*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_RECORD_NOT_FOUND        0x05
992*1370a723SSascha Wildner 
993*1370a723SSascha Wildner ///
994*1370a723SSascha Wildner /// ERST Serialization Instructions
995*1370a723SSascha Wildner ///
996*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_READ_REGISTER                  0x00
997*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_READ_REGISTER_VALUE            0x01
998*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_WRITE_REGISTER                 0x02
999*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_WRITE_REGISTER_VALUE           0x03
1000*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_NOOP                           0x04
1001*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_LOAD_VAR1                      0x05
1002*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_LOAD_VAR2                      0x06
1003*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_STORE_VAR1                     0x07
1004*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_ADD                            0x08
1005*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SUBTRACT                       0x09
1006*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_ADD_VALUE                      0x0A
1007*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SUBTRACT_VALUE                 0x0B
1008*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_STALL                          0x0C
1009*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_STALL_WHILE_TRUE               0x0D
1010*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE  0x0E
1011*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_GOTO                           0x0F
1012*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SET_SRC_ADDRESS_BASE           0x10
1013*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_SET_DST_ADDRESS_BASE           0x11
1014*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_MOVE_DATA                      0x12
1015*1370a723SSascha Wildner 
1016*1370a723SSascha Wildner ///
1017*1370a723SSascha Wildner /// ERST Instruction Flags
1018*1370a723SSascha Wildner ///
1019*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERST_PRESERVE_REGISTER  0x01
1020*1370a723SSascha Wildner 
1021*1370a723SSascha Wildner ///
1022*1370a723SSascha Wildner /// ERST Serialization Instruction Entry
1023*1370a723SSascha Wildner ///
1024*1370a723SSascha Wildner typedef struct {
1025*1370a723SSascha Wildner   UINT8                                     SerializationAction;
1026*1370a723SSascha Wildner   UINT8                                     Instruction;
1027*1370a723SSascha Wildner   UINT8                                     Flags;
1028*1370a723SSascha Wildner   UINT8                                     Reserved0;
1029*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
1030*1370a723SSascha Wildner   UINT64                                    Value;
1031*1370a723SSascha Wildner   UINT64                                    Mask;
1032*1370a723SSascha Wildner } EFI_ACPI_4_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
1033*1370a723SSascha Wildner 
1034*1370a723SSascha Wildner ///
1035*1370a723SSascha Wildner /// EINJ - Error Injection Table
1036*1370a723SSascha Wildner ///
1037*1370a723SSascha Wildner typedef struct {
1038*1370a723SSascha Wildner   EFI_ACPI_DESCRIPTION_HEADER    Header;
1039*1370a723SSascha Wildner   UINT32                         InjectionHeaderSize;
1040*1370a723SSascha Wildner   UINT8                          InjectionFlags;
1041*1370a723SSascha Wildner   UINT8                          Reserved0[3];
1042*1370a723SSascha Wildner   UINT32                         InjectionEntryCount;
1043*1370a723SSascha Wildner } EFI_ACPI_4_0_ERROR_INJECTION_TABLE_HEADER;
1044*1370a723SSascha Wildner 
1045*1370a723SSascha Wildner ///
1046*1370a723SSascha Wildner /// EINJ Version (as defined in ACPI 4.0 spec.)
1047*1370a723SSascha Wildner ///
1048*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_INJECTION_TABLE_REVISION  0x01
1049*1370a723SSascha Wildner 
1050*1370a723SSascha Wildner ///
1051*1370a723SSascha Wildner /// EINJ Error Injection Actions
1052*1370a723SSascha Wildner ///
1053*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_BEGIN_INJECTION_OPERATION       0x00
1054*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE  0x01
1055*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_SET_ERROR_TYPE                  0x02
1056*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_GET_ERROR_TYPE                  0x03
1057*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_END_OPERATION                   0x04
1058*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_EXECUTE_OPERATION               0x05
1059*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_CHECK_BUSY_STATUS               0x06
1060*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_GET_COMMAND_STATUS              0x07
1061*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_TRIGGER_ERROR                   0xFF
1062*1370a723SSascha Wildner 
1063*1370a723SSascha Wildner ///
1064*1370a723SSascha Wildner /// EINJ Action Command Status
1065*1370a723SSascha Wildner ///
1066*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_SUCCESS          0x00
1067*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_UNKNOWN_FAILURE  0x01
1068*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_STATUS_INVALID_ACCESS   0x02
1069*1370a723SSascha Wildner 
1070*1370a723SSascha Wildner ///
1071*1370a723SSascha Wildner /// EINJ Error Type Definition
1072*1370a723SSascha Wildner ///
1073*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_CORRECTABLE               (1 << 0)
1074*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL    (1 << 1)
1075*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL       (1 << 2)
1076*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_CORRECTABLE                  (1 << 3)
1077*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL       (1 << 4)
1078*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL          (1 << 5)
1079*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE             (1 << 6)
1080*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL  (1 << 7)
1081*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL     (1 << 8)
1082*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_CORRECTABLE                (1 << 9)
1083*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL     (1 << 10)
1084*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL        (1 << 11)
1085*1370a723SSascha Wildner 
1086*1370a723SSascha Wildner ///
1087*1370a723SSascha Wildner /// EINJ Injection Instructions
1088*1370a723SSascha Wildner ///
1089*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_READ_REGISTER         0x00
1090*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_READ_REGISTER_VALUE   0x01
1091*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_WRITE_REGISTER        0x02
1092*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_WRITE_REGISTER_VALUE  0x03
1093*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_NOOP                  0x04
1094*1370a723SSascha Wildner 
1095*1370a723SSascha Wildner ///
1096*1370a723SSascha Wildner /// EINJ Instruction Flags
1097*1370a723SSascha Wildner ///
1098*1370a723SSascha Wildner #define EFI_ACPI_4_0_EINJ_PRESERVE_REGISTER  0x01
1099*1370a723SSascha Wildner 
1100*1370a723SSascha Wildner ///
1101*1370a723SSascha Wildner /// EINJ Injection Instruction Entry
1102*1370a723SSascha Wildner ///
1103*1370a723SSascha Wildner typedef struct {
1104*1370a723SSascha Wildner   UINT8                                     InjectionAction;
1105*1370a723SSascha Wildner   UINT8                                     Instruction;
1106*1370a723SSascha Wildner   UINT8                                     Flags;
1107*1370a723SSascha Wildner   UINT8                                     Reserved0;
1108*1370a723SSascha Wildner   EFI_ACPI_4_0_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
1109*1370a723SSascha Wildner   UINT64                                    Value;
1110*1370a723SSascha Wildner   UINT64                                    Mask;
1111*1370a723SSascha Wildner } EFI_ACPI_4_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
1112*1370a723SSascha Wildner 
1113*1370a723SSascha Wildner ///
1114*1370a723SSascha Wildner /// EINJ Trigger Action Table
1115*1370a723SSascha Wildner ///
1116*1370a723SSascha Wildner typedef struct {
1117*1370a723SSascha Wildner   UINT32    HeaderSize;
1118*1370a723SSascha Wildner   UINT32    Revision;
1119*1370a723SSascha Wildner   UINT32    TableSize;
1120*1370a723SSascha Wildner   UINT32    EntryCount;
1121*1370a723SSascha Wildner } EFI_ACPI_4_0_EINJ_TRIGGER_ACTION_TABLE;
1122*1370a723SSascha Wildner 
1123*1370a723SSascha Wildner //
1124*1370a723SSascha Wildner // Known table signatures
1125*1370a723SSascha Wildner //
1126*1370a723SSascha Wildner 
1127*1370a723SSascha Wildner ///
1128*1370a723SSascha Wildner /// "RSD PTR " Root System Description Pointer
1129*1370a723SSascha Wildner ///
1130*1370a723SSascha Wildner #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
1131*1370a723SSascha Wildner 
1132*1370a723SSascha Wildner ///
1133*1370a723SSascha Wildner /// "APIC" Multiple APIC Description Table
1134*1370a723SSascha Wildner ///
1135*1370a723SSascha Wildner #define EFI_ACPI_4_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
1136*1370a723SSascha Wildner 
1137*1370a723SSascha Wildner ///
1138*1370a723SSascha Wildner /// "BERT" Boot Error Record Table
1139*1370a723SSascha Wildner ///
1140*1370a723SSascha Wildner #define EFI_ACPI_4_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
1141*1370a723SSascha Wildner 
1142*1370a723SSascha Wildner ///
1143*1370a723SSascha Wildner /// "CPEP" Corrected Platform Error Polling Table
1144*1370a723SSascha Wildner ///
1145*1370a723SSascha Wildner #define EFI_ACPI_4_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
1146*1370a723SSascha Wildner 
1147*1370a723SSascha Wildner ///
1148*1370a723SSascha Wildner /// "DSDT" Differentiated System Description Table
1149*1370a723SSascha Wildner ///
1150*1370a723SSascha Wildner #define EFI_ACPI_4_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
1151*1370a723SSascha Wildner 
1152*1370a723SSascha Wildner ///
1153*1370a723SSascha Wildner /// "ECDT" Embedded Controller Boot Resources Table
1154*1370a723SSascha Wildner ///
1155*1370a723SSascha Wildner #define EFI_ACPI_4_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
1156*1370a723SSascha Wildner 
1157*1370a723SSascha Wildner ///
1158*1370a723SSascha Wildner /// "EINJ" Error Injection Table
1159*1370a723SSascha Wildner ///
1160*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
1161*1370a723SSascha Wildner 
1162*1370a723SSascha Wildner ///
1163*1370a723SSascha Wildner /// "ERST" Error Record Serialization Table
1164*1370a723SSascha Wildner ///
1165*1370a723SSascha Wildner #define EFI_ACPI_4_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
1166*1370a723SSascha Wildner 
1167*1370a723SSascha Wildner ///
1168*1370a723SSascha Wildner /// "FACP" Fixed ACPI Description Table
1169*1370a723SSascha Wildner ///
1170*1370a723SSascha Wildner #define EFI_ACPI_4_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
1171*1370a723SSascha Wildner 
1172*1370a723SSascha Wildner ///
1173*1370a723SSascha Wildner /// "FACS" Firmware ACPI Control Structure
1174*1370a723SSascha Wildner ///
1175*1370a723SSascha Wildner #define EFI_ACPI_4_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
1176*1370a723SSascha Wildner 
1177*1370a723SSascha Wildner ///
1178*1370a723SSascha Wildner /// "HEST" Hardware Error Source Table
1179*1370a723SSascha Wildner ///
1180*1370a723SSascha Wildner #define EFI_ACPI_4_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
1181*1370a723SSascha Wildner 
1182*1370a723SSascha Wildner ///
1183*1370a723SSascha Wildner /// "MSCT" Maximum System Characteristics Table
1184*1370a723SSascha Wildner ///
1185*1370a723SSascha Wildner #define EFI_ACPI_4_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
1186*1370a723SSascha Wildner 
1187*1370a723SSascha Wildner ///
1188*1370a723SSascha Wildner /// "PSDT" Persistent System Description Table
1189*1370a723SSascha Wildner ///
1190*1370a723SSascha Wildner #define EFI_ACPI_4_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
1191*1370a723SSascha Wildner 
1192*1370a723SSascha Wildner ///
1193*1370a723SSascha Wildner /// "RSDT" Root System Description Table
1194*1370a723SSascha Wildner ///
1195*1370a723SSascha Wildner #define EFI_ACPI_4_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
1196*1370a723SSascha Wildner 
1197*1370a723SSascha Wildner ///
1198*1370a723SSascha Wildner /// "SBST" Smart Battery Specification Table
1199*1370a723SSascha Wildner ///
1200*1370a723SSascha Wildner #define EFI_ACPI_4_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
1201*1370a723SSascha Wildner 
1202*1370a723SSascha Wildner ///
1203*1370a723SSascha Wildner /// "SLIT" System Locality Information Table
1204*1370a723SSascha Wildner ///
1205*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
1206*1370a723SSascha Wildner 
1207*1370a723SSascha Wildner ///
1208*1370a723SSascha Wildner /// "SRAT" System Resource Affinity Table
1209*1370a723SSascha Wildner ///
1210*1370a723SSascha Wildner #define EFI_ACPI_4_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
1211*1370a723SSascha Wildner 
1212*1370a723SSascha Wildner ///
1213*1370a723SSascha Wildner /// "SSDT" Secondary System Description Table
1214*1370a723SSascha Wildner ///
1215*1370a723SSascha Wildner #define EFI_ACPI_4_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
1216*1370a723SSascha Wildner 
1217*1370a723SSascha Wildner ///
1218*1370a723SSascha Wildner /// "XSDT" Extended System Description Table
1219*1370a723SSascha Wildner ///
1220*1370a723SSascha Wildner #define EFI_ACPI_4_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
1221*1370a723SSascha Wildner 
1222*1370a723SSascha Wildner ///
1223*1370a723SSascha Wildner /// "BOOT" MS Simple Boot Spec
1224*1370a723SSascha Wildner ///
1225*1370a723SSascha Wildner #define EFI_ACPI_4_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
1226*1370a723SSascha Wildner 
1227*1370a723SSascha Wildner ///
1228*1370a723SSascha Wildner /// "DBGP" MS Debug Port Spec
1229*1370a723SSascha Wildner ///
1230*1370a723SSascha Wildner #define EFI_ACPI_4_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
1231*1370a723SSascha Wildner 
1232*1370a723SSascha Wildner ///
1233*1370a723SSascha Wildner /// "DMAR" DMA Remapping Table
1234*1370a723SSascha Wildner ///
1235*1370a723SSascha Wildner #define EFI_ACPI_4_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
1236*1370a723SSascha Wildner 
1237*1370a723SSascha Wildner ///
1238*1370a723SSascha Wildner /// "ETDT" Event Timer Description Table
1239*1370a723SSascha Wildner ///
1240*1370a723SSascha Wildner #define EFI_ACPI_4_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
1241*1370a723SSascha Wildner 
1242*1370a723SSascha Wildner ///
1243*1370a723SSascha Wildner /// "HPET" IA-PC High Precision Event Timer Table
1244*1370a723SSascha Wildner ///
1245*1370a723SSascha Wildner #define EFI_ACPI_4_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
1246*1370a723SSascha Wildner 
1247*1370a723SSascha Wildner ///
1248*1370a723SSascha Wildner /// "iBFT" iSCSI Boot Firmware Table
1249*1370a723SSascha Wildner ///
1250*1370a723SSascha Wildner #define EFI_ACPI_4_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
1251*1370a723SSascha Wildner 
1252*1370a723SSascha Wildner ///
1253*1370a723SSascha Wildner /// "IVRS" I/O Virtualization Reporting Structure
1254*1370a723SSascha Wildner ///
1255*1370a723SSascha Wildner #define EFI_ACPI_4_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
1256*1370a723SSascha Wildner 
1257*1370a723SSascha Wildner ///
1258*1370a723SSascha Wildner /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
1259*1370a723SSascha Wildner ///
1260*1370a723SSascha Wildner #define EFI_ACPI_4_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
1261*1370a723SSascha Wildner 
1262*1370a723SSascha Wildner ///
1263*1370a723SSascha Wildner /// "MCHI" Management Controller Host Interface Table
1264*1370a723SSascha Wildner ///
1265*1370a723SSascha Wildner #define EFI_ACPI_4_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
1266*1370a723SSascha Wildner 
1267*1370a723SSascha Wildner ///
1268*1370a723SSascha Wildner /// "SPCR" Serial Port Console Redirection Table
1269*1370a723SSascha Wildner ///
1270*1370a723SSascha Wildner #define EFI_ACPI_4_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
1271*1370a723SSascha Wildner 
1272*1370a723SSascha Wildner ///
1273*1370a723SSascha Wildner /// "SPMI" Server Platform Management Interface Table
1274*1370a723SSascha Wildner ///
1275*1370a723SSascha Wildner #define EFI_ACPI_4_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
1276*1370a723SSascha Wildner 
1277*1370a723SSascha Wildner ///
1278*1370a723SSascha Wildner /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
1279*1370a723SSascha Wildner ///
1280*1370a723SSascha Wildner #define EFI_ACPI_4_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
1281*1370a723SSascha Wildner 
1282*1370a723SSascha Wildner ///
1283*1370a723SSascha Wildner /// "UEFI" UEFI ACPI Data Table
1284*1370a723SSascha Wildner ///
1285*1370a723SSascha Wildner #define EFI_ACPI_4_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
1286*1370a723SSascha Wildner 
1287*1370a723SSascha Wildner ///
1288*1370a723SSascha Wildner /// "WAET" Windows ACPI Enlightenment Table
1289*1370a723SSascha Wildner ///
1290*1370a723SSascha Wildner #define EFI_ACPI_4_0_WINDOWS_ACPI_ENLIGHTENMENT_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
1291*1370a723SSascha Wildner 
1292*1370a723SSascha Wildner ///
1293*1370a723SSascha Wildner /// "WDAT" Watchdog Action Table
1294*1370a723SSascha Wildner ///
1295*1370a723SSascha Wildner #define EFI_ACPI_4_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
1296*1370a723SSascha Wildner 
1297*1370a723SSascha Wildner ///
1298*1370a723SSascha Wildner /// "WDRT" Watchdog Resource Table
1299*1370a723SSascha Wildner ///
1300*1370a723SSascha Wildner #define EFI_ACPI_4_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
1301*1370a723SSascha Wildner 
1302*1370a723SSascha Wildner #pragma pack()
1303*1370a723SSascha Wildner 
1304*1370a723SSascha Wildner #endif
1305