1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   ACPI 6.4 definitions from the ACPI Specification Revision 6.4 Jan, 2021.
3*f334afcfSToomas Soome 
4*f334afcfSToomas Soome   Copyright (c) 2017 - 2022, Intel Corporation. All rights reserved.<BR>
5*f334afcfSToomas Soome   Copyright (c) 2019 - 2021, ARM Ltd. All rights reserved.<BR>
6*f334afcfSToomas Soome 
7*f334afcfSToomas Soome   SPDX-License-Identifier: BSD-2-Clause-Patent
8*f334afcfSToomas Soome **/
9*f334afcfSToomas Soome 
10*f334afcfSToomas Soome #ifndef ACPI_6_4_H_
11*f334afcfSToomas Soome #define ACPI_6_4_H_
12*f334afcfSToomas Soome 
13*f334afcfSToomas Soome #include <IndustryStandard/Acpi63.h>
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome //
16*f334afcfSToomas Soome // Ensure proper structure formats
17*f334afcfSToomas Soome //
18*f334afcfSToomas Soome #pragma pack(1)
19*f334afcfSToomas Soome 
20*f334afcfSToomas Soome ///
21*f334afcfSToomas Soome /// ACPI 6.4 Generic Address Space definition
22*f334afcfSToomas Soome ///
23*f334afcfSToomas Soome typedef struct {
24*f334afcfSToomas Soome   UINT8     AddressSpaceId;
25*f334afcfSToomas Soome   UINT8     RegisterBitWidth;
26*f334afcfSToomas Soome   UINT8     RegisterBitOffset;
27*f334afcfSToomas Soome   UINT8     AccessSize;
28*f334afcfSToomas Soome   UINT64    Address;
29*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE;
30*f334afcfSToomas Soome 
31*f334afcfSToomas Soome //
32*f334afcfSToomas Soome // Generic Address Space Address IDs
33*f334afcfSToomas Soome //
34*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_MEMORY                   0x00
35*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_IO                       0x01
36*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_CONFIGURATION_SPACE         0x02
37*f334afcfSToomas Soome #define EFI_ACPI_6_4_EMBEDDED_CONTROLLER             0x03
38*f334afcfSToomas Soome #define EFI_ACPI_6_4_SMBUS                           0x04
39*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_CMOS                     0x05
40*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_BAR_TARGET                  0x06
41*f334afcfSToomas Soome #define EFI_ACPI_6_4_IPMI                            0x07
42*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERAL_PURPOSE_IO              0x08
43*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_SERIAL_BUS              0x09
44*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_COMMUNICATION_CHANNEL  0x0A
45*f334afcfSToomas Soome #define EFI_ACPI_6_4_FUNCTIONAL_FIXED_HARDWARE       0x7F
46*f334afcfSToomas Soome 
47*f334afcfSToomas Soome //
48*f334afcfSToomas Soome // Generic Address Space Access Sizes
49*f334afcfSToomas Soome //
50*f334afcfSToomas Soome #define EFI_ACPI_6_4_UNDEFINED  0
51*f334afcfSToomas Soome #define EFI_ACPI_6_4_BYTE       1
52*f334afcfSToomas Soome #define EFI_ACPI_6_4_WORD       2
53*f334afcfSToomas Soome #define EFI_ACPI_6_4_DWORD      3
54*f334afcfSToomas Soome #define EFI_ACPI_6_4_QWORD      4
55*f334afcfSToomas Soome 
56*f334afcfSToomas Soome //
57*f334afcfSToomas Soome // ACPI 6.4 table structures
58*f334afcfSToomas Soome //
59*f334afcfSToomas Soome 
60*f334afcfSToomas Soome ///
61*f334afcfSToomas Soome /// Root System Description Pointer Structure
62*f334afcfSToomas Soome ///
63*f334afcfSToomas Soome typedef struct {
64*f334afcfSToomas Soome   UINT64    Signature;
65*f334afcfSToomas Soome   UINT8     Checksum;
66*f334afcfSToomas Soome   UINT8     OemId[6];
67*f334afcfSToomas Soome   UINT8     Revision;
68*f334afcfSToomas Soome   UINT32    RsdtAddress;
69*f334afcfSToomas Soome   UINT32    Length;
70*f334afcfSToomas Soome   UINT64    XsdtAddress;
71*f334afcfSToomas Soome   UINT8     ExtendedChecksum;
72*f334afcfSToomas Soome   UINT8     Reserved[3];
73*f334afcfSToomas Soome } EFI_ACPI_6_4_ROOT_SYSTEM_DESCRIPTION_POINTER;
74*f334afcfSToomas Soome 
75*f334afcfSToomas Soome ///
76*f334afcfSToomas Soome /// RSD_PTR Revision (as defined in ACPI 6.4 spec.)
77*f334afcfSToomas Soome ///
78*f334afcfSToomas Soome #define EFI_ACPI_6_4_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION  0x02 ///< ACPISpec (Revision 6.4) says current value is 2
79*f334afcfSToomas Soome 
80*f334afcfSToomas Soome ///
81*f334afcfSToomas Soome /// Common table header, this prefaces all ACPI tables, including FACS, but
82*f334afcfSToomas Soome /// excluding the RSD PTR structure
83*f334afcfSToomas Soome ///
84*f334afcfSToomas Soome typedef struct {
85*f334afcfSToomas Soome   UINT32    Signature;
86*f334afcfSToomas Soome   UINT32    Length;
87*f334afcfSToomas Soome } EFI_ACPI_6_4_COMMON_HEADER;
88*f334afcfSToomas Soome 
89*f334afcfSToomas Soome //
90*f334afcfSToomas Soome // Root System Description Table
91*f334afcfSToomas Soome // No definition needed as it is a common description table header, the same with
92*f334afcfSToomas Soome // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
93*f334afcfSToomas Soome //
94*f334afcfSToomas Soome 
95*f334afcfSToomas Soome ///
96*f334afcfSToomas Soome /// RSDT Revision (as defined in ACPI 6.4 spec.)
97*f334afcfSToomas Soome ///
98*f334afcfSToomas Soome #define EFI_ACPI_6_4_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
99*f334afcfSToomas Soome 
100*f334afcfSToomas Soome //
101*f334afcfSToomas Soome // Extended System Description Table
102*f334afcfSToomas Soome // No definition needed as it is a common description table header, the same with
103*f334afcfSToomas Soome // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
104*f334afcfSToomas Soome //
105*f334afcfSToomas Soome 
106*f334afcfSToomas Soome ///
107*f334afcfSToomas Soome /// XSDT Revision (as defined in ACPI 6.4 spec.)
108*f334afcfSToomas Soome ///
109*f334afcfSToomas Soome #define EFI_ACPI_6_4_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
110*f334afcfSToomas Soome 
111*f334afcfSToomas Soome ///
112*f334afcfSToomas Soome /// Fixed ACPI Description Table Structure (FADT)
113*f334afcfSToomas Soome ///
114*f334afcfSToomas Soome typedef struct {
115*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER               Header;
116*f334afcfSToomas Soome   UINT32                                    FirmwareCtrl;
117*f334afcfSToomas Soome   UINT32                                    Dsdt;
118*f334afcfSToomas Soome   UINT8                                     Reserved0;
119*f334afcfSToomas Soome   UINT8                                     PreferredPmProfile;
120*f334afcfSToomas Soome   UINT16                                    SciInt;
121*f334afcfSToomas Soome   UINT32                                    SmiCmd;
122*f334afcfSToomas Soome   UINT8                                     AcpiEnable;
123*f334afcfSToomas Soome   UINT8                                     AcpiDisable;
124*f334afcfSToomas Soome   UINT8                                     S4BiosReq;
125*f334afcfSToomas Soome   UINT8                                     PstateCnt;
126*f334afcfSToomas Soome   UINT32                                    Pm1aEvtBlk;
127*f334afcfSToomas Soome   UINT32                                    Pm1bEvtBlk;
128*f334afcfSToomas Soome   UINT32                                    Pm1aCntBlk;
129*f334afcfSToomas Soome   UINT32                                    Pm1bCntBlk;
130*f334afcfSToomas Soome   UINT32                                    Pm2CntBlk;
131*f334afcfSToomas Soome   UINT32                                    PmTmrBlk;
132*f334afcfSToomas Soome   UINT32                                    Gpe0Blk;
133*f334afcfSToomas Soome   UINT32                                    Gpe1Blk;
134*f334afcfSToomas Soome   UINT8                                     Pm1EvtLen;
135*f334afcfSToomas Soome   UINT8                                     Pm1CntLen;
136*f334afcfSToomas Soome   UINT8                                     Pm2CntLen;
137*f334afcfSToomas Soome   UINT8                                     PmTmrLen;
138*f334afcfSToomas Soome   UINT8                                     Gpe0BlkLen;
139*f334afcfSToomas Soome   UINT8                                     Gpe1BlkLen;
140*f334afcfSToomas Soome   UINT8                                     Gpe1Base;
141*f334afcfSToomas Soome   UINT8                                     CstCnt;
142*f334afcfSToomas Soome   UINT16                                    PLvl2Lat;
143*f334afcfSToomas Soome   UINT16                                    PLvl3Lat;
144*f334afcfSToomas Soome   UINT16                                    FlushSize;
145*f334afcfSToomas Soome   UINT16                                    FlushStride;
146*f334afcfSToomas Soome   UINT8                                     DutyOffset;
147*f334afcfSToomas Soome   UINT8                                     DutyWidth;
148*f334afcfSToomas Soome   UINT8                                     DayAlrm;
149*f334afcfSToomas Soome   UINT8                                     MonAlrm;
150*f334afcfSToomas Soome   UINT8                                     Century;
151*f334afcfSToomas Soome   UINT16                                    IaPcBootArch;
152*f334afcfSToomas Soome   UINT8                                     Reserved1;
153*f334afcfSToomas Soome   UINT32                                    Flags;
154*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    ResetReg;
155*f334afcfSToomas Soome   UINT8                                     ResetValue;
156*f334afcfSToomas Soome   UINT16                                    ArmBootArch;
157*f334afcfSToomas Soome   UINT8                                     MinorVersion;
158*f334afcfSToomas Soome   UINT64                                    XFirmwareCtrl;
159*f334afcfSToomas Soome   UINT64                                    XDsdt;
160*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPm1aEvtBlk;
161*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPm1bEvtBlk;
162*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPm1aCntBlk;
163*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPm1bCntBlk;
164*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPm2CntBlk;
165*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XPmTmrBlk;
166*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XGpe0Blk;
167*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    XGpe1Blk;
168*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    SleepControlReg;
169*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    SleepStatusReg;
170*f334afcfSToomas Soome   UINT64                                    HypervisorVendorIdentity;
171*f334afcfSToomas Soome } EFI_ACPI_6_4_FIXED_ACPI_DESCRIPTION_TABLE;
172*f334afcfSToomas Soome 
173*f334afcfSToomas Soome ///
174*f334afcfSToomas Soome /// FADT Version (as defined in ACPI 6.4 spec.)
175*f334afcfSToomas Soome ///
176*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIXED_ACPI_DESCRIPTION_TABLE_REVISION        0x06
177*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION  0x04
178*f334afcfSToomas Soome 
179*f334afcfSToomas Soome //
180*f334afcfSToomas Soome // Fixed ACPI Description Table Preferred Power Management Profile
181*f334afcfSToomas Soome //
182*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_UNSPECIFIED         0
183*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_DESKTOP             1
184*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_MOBILE              2
185*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_WORKSTATION         3
186*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_ENTERPRISE_SERVER   4
187*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_SOHO_SERVER         5
188*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_APPLIANCE_PC        6
189*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_PERFORMANCE_SERVER  7
190*f334afcfSToomas Soome #define EFI_ACPI_6_4_PM_PROFILE_TABLET              8
191*f334afcfSToomas Soome 
192*f334afcfSToomas Soome //
193*f334afcfSToomas Soome // Fixed ACPI Description Table Boot Architecture Flags
194*f334afcfSToomas Soome // All other bits are reserved and must be set to 0.
195*f334afcfSToomas Soome //
196*f334afcfSToomas Soome #define EFI_ACPI_6_4_LEGACY_DEVICES        BIT0
197*f334afcfSToomas Soome #define EFI_ACPI_6_4_8042                  BIT1
198*f334afcfSToomas Soome #define EFI_ACPI_6_4_VGA_NOT_PRESENT       BIT2
199*f334afcfSToomas Soome #define EFI_ACPI_6_4_MSI_NOT_SUPPORTED     BIT3
200*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCIE_ASPM_CONTROLS    BIT4
201*f334afcfSToomas Soome #define EFI_ACPI_6_4_CMOS_RTC_NOT_PRESENT  BIT5
202*f334afcfSToomas Soome 
203*f334afcfSToomas Soome //
204*f334afcfSToomas Soome // Fixed ACPI Description Table Arm Boot Architecture Flags
205*f334afcfSToomas Soome // All other bits are reserved and must be set to 0.
206*f334afcfSToomas Soome //
207*f334afcfSToomas Soome #define EFI_ACPI_6_4_ARM_PSCI_COMPLIANT  BIT0
208*f334afcfSToomas Soome #define EFI_ACPI_6_4_ARM_PSCI_USE_HVC    BIT1
209*f334afcfSToomas Soome 
210*f334afcfSToomas Soome //
211*f334afcfSToomas Soome // Fixed ACPI Description Table Fixed Feature Flags
212*f334afcfSToomas Soome // All other bits are reserved and must be set to 0.
213*f334afcfSToomas Soome //
214*f334afcfSToomas Soome #define EFI_ACPI_6_4_WBINVD                                BIT0
215*f334afcfSToomas Soome #define EFI_ACPI_6_4_WBINVD_FLUSH                          BIT1
216*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROC_C1                               BIT2
217*f334afcfSToomas Soome #define EFI_ACPI_6_4_P_LVL2_UP                             BIT3
218*f334afcfSToomas Soome #define EFI_ACPI_6_4_PWR_BUTTON                            BIT4
219*f334afcfSToomas Soome #define EFI_ACPI_6_4_SLP_BUTTON                            BIT5
220*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIX_RTC                               BIT6
221*f334afcfSToomas Soome #define EFI_ACPI_6_4_RTC_S4                                BIT7
222*f334afcfSToomas Soome #define EFI_ACPI_6_4_TMR_VAL_EXT                           BIT8
223*f334afcfSToomas Soome #define EFI_ACPI_6_4_DCK_CAP                               BIT9
224*f334afcfSToomas Soome #define EFI_ACPI_6_4_RESET_REG_SUP                         BIT10
225*f334afcfSToomas Soome #define EFI_ACPI_6_4_SEALED_CASE                           BIT11
226*f334afcfSToomas Soome #define EFI_ACPI_6_4_HEADLESS                              BIT12
227*f334afcfSToomas Soome #define EFI_ACPI_6_4_CPU_SW_SLP                            BIT13
228*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_EXP_WAK                           BIT14
229*f334afcfSToomas Soome #define EFI_ACPI_6_4_USE_PLATFORM_CLOCK                    BIT15
230*f334afcfSToomas Soome #define EFI_ACPI_6_4_S4_RTC_STS_VALID                      BIT16
231*f334afcfSToomas Soome #define EFI_ACPI_6_4_REMOTE_POWER_ON_CAPABLE               BIT17
232*f334afcfSToomas Soome #define EFI_ACPI_6_4_FORCE_APIC_CLUSTER_MODEL              BIT18
233*f334afcfSToomas Soome #define EFI_ACPI_6_4_FORCE_APIC_PHYSICAL_DESTINATION_MODE  BIT19
234*f334afcfSToomas Soome #define EFI_ACPI_6_4_HW_REDUCED_ACPI                       BIT20
235*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOW_POWER_S0_IDLE_CAPABLE             BIT21
236*f334afcfSToomas Soome 
237*f334afcfSToomas Soome ///
238*f334afcfSToomas Soome /// Firmware ACPI Control Structure
239*f334afcfSToomas Soome ///
240*f334afcfSToomas Soome typedef struct {
241*f334afcfSToomas Soome   UINT32    Signature;
242*f334afcfSToomas Soome   UINT32    Length;
243*f334afcfSToomas Soome   UINT32    HardwareSignature;
244*f334afcfSToomas Soome   UINT32    FirmwareWakingVector;
245*f334afcfSToomas Soome   UINT32    GlobalLock;
246*f334afcfSToomas Soome   UINT32    Flags;
247*f334afcfSToomas Soome   UINT64    XFirmwareWakingVector;
248*f334afcfSToomas Soome   UINT8     Version;
249*f334afcfSToomas Soome   UINT8     Reserved0[3];
250*f334afcfSToomas Soome   UINT32    OspmFlags;
251*f334afcfSToomas Soome   UINT8     Reserved1[24];
252*f334afcfSToomas Soome } EFI_ACPI_6_4_FIRMWARE_ACPI_CONTROL_STRUCTURE;
253*f334afcfSToomas Soome 
254*f334afcfSToomas Soome ///
255*f334afcfSToomas Soome /// FACS Version (as defined in ACPI 6.4 spec.)
256*f334afcfSToomas Soome ///
257*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
258*f334afcfSToomas Soome 
259*f334afcfSToomas Soome ///
260*f334afcfSToomas Soome /// Firmware Control Structure Feature Flags
261*f334afcfSToomas Soome /// All other bits are reserved and must be set to 0.
262*f334afcfSToomas Soome ///
263*f334afcfSToomas Soome #define EFI_ACPI_6_4_S4BIOS_F                BIT0
264*f334afcfSToomas Soome #define EFI_ACPI_6_4_64BIT_WAKE_SUPPORTED_F  BIT1
265*f334afcfSToomas Soome 
266*f334afcfSToomas Soome ///
267*f334afcfSToomas Soome /// OSPM Enabled Firmware Control Structure Flags
268*f334afcfSToomas Soome /// All other bits are reserved and must be set to 0.
269*f334afcfSToomas Soome ///
270*f334afcfSToomas Soome #define EFI_ACPI_6_4_OSPM_64BIT_WAKE_F  BIT0
271*f334afcfSToomas Soome 
272*f334afcfSToomas Soome //
273*f334afcfSToomas Soome // Differentiated System Description Table,
274*f334afcfSToomas Soome // Secondary System Description Table
275*f334afcfSToomas Soome // and Persistent System Description Table,
276*f334afcfSToomas Soome // no definition needed as they are common description table header, the same with
277*f334afcfSToomas Soome // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
278*f334afcfSToomas Soome //
279*f334afcfSToomas Soome #define EFI_ACPI_6_4_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x02
280*f334afcfSToomas Soome #define EFI_ACPI_6_4_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION       0x02
281*f334afcfSToomas Soome 
282*f334afcfSToomas Soome ///
283*f334afcfSToomas Soome /// Multiple APIC Description Table header definition.  The rest of the table
284*f334afcfSToomas Soome /// must be defined in a platform specific manner.
285*f334afcfSToomas Soome ///
286*f334afcfSToomas Soome typedef struct {
287*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
288*f334afcfSToomas Soome   UINT32                         LocalApicAddress;
289*f334afcfSToomas Soome   UINT32                         Flags;
290*f334afcfSToomas Soome } EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
291*f334afcfSToomas Soome 
292*f334afcfSToomas Soome ///
293*f334afcfSToomas Soome /// MADT Revision (as defined in ACPI 6.4 spec.)
294*f334afcfSToomas Soome ///
295*f334afcfSToomas Soome #define EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION  0x05
296*f334afcfSToomas Soome 
297*f334afcfSToomas Soome ///
298*f334afcfSToomas Soome /// Multiple APIC Flags
299*f334afcfSToomas Soome /// All other bits are reserved and must be set to 0.
300*f334afcfSToomas Soome ///
301*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCAT_COMPAT  BIT0
302*f334afcfSToomas Soome 
303*f334afcfSToomas Soome //
304*f334afcfSToomas Soome // Multiple APIC Description Table APIC structure types
305*f334afcfSToomas Soome // All other values between 0x10 and 0x7F are reserved and
306*f334afcfSToomas Soome // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
307*f334afcfSToomas Soome //
308*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_LOCAL_APIC           0x00
309*f334afcfSToomas Soome #define EFI_ACPI_6_4_IO_APIC                        0x01
310*f334afcfSToomas Soome #define EFI_ACPI_6_4_INTERRUPT_SOURCE_OVERRIDE      0x02
311*f334afcfSToomas Soome #define EFI_ACPI_6_4_NON_MASKABLE_INTERRUPT_SOURCE  0x03
312*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_APIC_NMI                 0x04
313*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
314*f334afcfSToomas Soome #define EFI_ACPI_6_4_IO_SAPIC                       0x06
315*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_SAPIC                    0x07
316*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_INTERRUPT_SOURCES     0x08
317*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_LOCAL_X2APIC         0x09
318*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_X2APIC_NMI               0x0A
319*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC                            0x0B
320*f334afcfSToomas Soome #define EFI_ACPI_6_4_GICD                           0x0C
321*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_MSI_FRAME                  0x0D
322*f334afcfSToomas Soome #define EFI_ACPI_6_4_GICR                           0x0E
323*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_ITS                        0x0F
324*f334afcfSToomas Soome #define EFI_ACPI_6_4_MULTIPROCESSOR_WAKEUP          0x10
325*f334afcfSToomas Soome 
326*f334afcfSToomas Soome //
327*f334afcfSToomas Soome // APIC Structure Definitions
328*f334afcfSToomas Soome //
329*f334afcfSToomas Soome 
330*f334afcfSToomas Soome ///
331*f334afcfSToomas Soome /// Processor Local APIC Structure Definition
332*f334afcfSToomas Soome ///
333*f334afcfSToomas Soome typedef struct {
334*f334afcfSToomas Soome   UINT8     Type;
335*f334afcfSToomas Soome   UINT8     Length;
336*f334afcfSToomas Soome   UINT8     AcpiProcessorUid;
337*f334afcfSToomas Soome   UINT8     ApicId;
338*f334afcfSToomas Soome   UINT32    Flags;
339*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_LOCAL_APIC_STRUCTURE;
340*f334afcfSToomas Soome 
341*f334afcfSToomas Soome ///
342*f334afcfSToomas Soome /// Local APIC Flags.  All other bits are reserved and must be 0.
343*f334afcfSToomas Soome ///
344*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_APIC_ENABLED         BIT0
345*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOCAL_APIC_ONLINE_CAPABLE  BIT1
346*f334afcfSToomas Soome 
347*f334afcfSToomas Soome ///
348*f334afcfSToomas Soome /// IO APIC Structure
349*f334afcfSToomas Soome ///
350*f334afcfSToomas Soome typedef struct {
351*f334afcfSToomas Soome   UINT8     Type;
352*f334afcfSToomas Soome   UINT8     Length;
353*f334afcfSToomas Soome   UINT8     IoApicId;
354*f334afcfSToomas Soome   UINT8     Reserved;
355*f334afcfSToomas Soome   UINT32    IoApicAddress;
356*f334afcfSToomas Soome   UINT32    GlobalSystemInterruptBase;
357*f334afcfSToomas Soome } EFI_ACPI_6_4_IO_APIC_STRUCTURE;
358*f334afcfSToomas Soome 
359*f334afcfSToomas Soome ///
360*f334afcfSToomas Soome /// Interrupt Source Override Structure
361*f334afcfSToomas Soome ///
362*f334afcfSToomas Soome typedef struct {
363*f334afcfSToomas Soome   UINT8     Type;
364*f334afcfSToomas Soome   UINT8     Length;
365*f334afcfSToomas Soome   UINT8     Bus;
366*f334afcfSToomas Soome   UINT8     Source;
367*f334afcfSToomas Soome   UINT32    GlobalSystemInterrupt;
368*f334afcfSToomas Soome   UINT16    Flags;
369*f334afcfSToomas Soome } EFI_ACPI_6_4_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
370*f334afcfSToomas Soome 
371*f334afcfSToomas Soome ///
372*f334afcfSToomas Soome /// Platform Interrupt Sources Structure Definition
373*f334afcfSToomas Soome ///
374*f334afcfSToomas Soome typedef struct {
375*f334afcfSToomas Soome   UINT8     Type;
376*f334afcfSToomas Soome   UINT8     Length;
377*f334afcfSToomas Soome   UINT16    Flags;
378*f334afcfSToomas Soome   UINT8     InterruptType;
379*f334afcfSToomas Soome   UINT8     ProcessorId;
380*f334afcfSToomas Soome   UINT8     ProcessorEid;
381*f334afcfSToomas Soome   UINT8     IoSapicVector;
382*f334afcfSToomas Soome   UINT32    GlobalSystemInterrupt;
383*f334afcfSToomas Soome   UINT32    PlatformInterruptSourceFlags;
384*f334afcfSToomas Soome   UINT8     CpeiProcessorOverride;
385*f334afcfSToomas Soome   UINT8     Reserved[31];
386*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_INTERRUPT_APIC_STRUCTURE;
387*f334afcfSToomas Soome 
388*f334afcfSToomas Soome //
389*f334afcfSToomas Soome // MPS INTI flags.
390*f334afcfSToomas Soome // All other bits are reserved and must be set to 0.
391*f334afcfSToomas Soome //
392*f334afcfSToomas Soome #define EFI_ACPI_6_4_POLARITY      (3 << 0)
393*f334afcfSToomas Soome #define EFI_ACPI_6_4_TRIGGER_MODE  (3 << 2)
394*f334afcfSToomas Soome 
395*f334afcfSToomas Soome ///
396*f334afcfSToomas Soome /// Non-Maskable Interrupt Source Structure
397*f334afcfSToomas Soome ///
398*f334afcfSToomas Soome typedef struct {
399*f334afcfSToomas Soome   UINT8     Type;
400*f334afcfSToomas Soome   UINT8     Length;
401*f334afcfSToomas Soome   UINT16    Flags;
402*f334afcfSToomas Soome   UINT32    GlobalSystemInterrupt;
403*f334afcfSToomas Soome } EFI_ACPI_6_4_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
404*f334afcfSToomas Soome 
405*f334afcfSToomas Soome ///
406*f334afcfSToomas Soome /// Local APIC NMI Structure
407*f334afcfSToomas Soome ///
408*f334afcfSToomas Soome typedef struct {
409*f334afcfSToomas Soome   UINT8     Type;
410*f334afcfSToomas Soome   UINT8     Length;
411*f334afcfSToomas Soome   UINT8     AcpiProcessorUid;
412*f334afcfSToomas Soome   UINT16    Flags;
413*f334afcfSToomas Soome   UINT8     LocalApicLint;
414*f334afcfSToomas Soome } EFI_ACPI_6_4_LOCAL_APIC_NMI_STRUCTURE;
415*f334afcfSToomas Soome 
416*f334afcfSToomas Soome ///
417*f334afcfSToomas Soome /// Local APIC Address Override Structure
418*f334afcfSToomas Soome ///
419*f334afcfSToomas Soome typedef struct {
420*f334afcfSToomas Soome   UINT8     Type;
421*f334afcfSToomas Soome   UINT8     Length;
422*f334afcfSToomas Soome   UINT16    Reserved;
423*f334afcfSToomas Soome   UINT64    LocalApicAddress;
424*f334afcfSToomas Soome } EFI_ACPI_6_4_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
425*f334afcfSToomas Soome 
426*f334afcfSToomas Soome ///
427*f334afcfSToomas Soome /// IO SAPIC Structure
428*f334afcfSToomas Soome ///
429*f334afcfSToomas Soome typedef struct {
430*f334afcfSToomas Soome   UINT8     Type;
431*f334afcfSToomas Soome   UINT8     Length;
432*f334afcfSToomas Soome   UINT8     IoApicId;
433*f334afcfSToomas Soome   UINT8     Reserved;
434*f334afcfSToomas Soome   UINT32    GlobalSystemInterruptBase;
435*f334afcfSToomas Soome   UINT64    IoSapicAddress;
436*f334afcfSToomas Soome } EFI_ACPI_6_4_IO_SAPIC_STRUCTURE;
437*f334afcfSToomas Soome 
438*f334afcfSToomas Soome ///
439*f334afcfSToomas Soome /// Local SAPIC Structure
440*f334afcfSToomas Soome /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
441*f334afcfSToomas Soome ///
442*f334afcfSToomas Soome typedef struct {
443*f334afcfSToomas Soome   UINT8     Type;
444*f334afcfSToomas Soome   UINT8     Length;
445*f334afcfSToomas Soome   UINT8     AcpiProcessorId;
446*f334afcfSToomas Soome   UINT8     LocalSapicId;
447*f334afcfSToomas Soome   UINT8     LocalSapicEid;
448*f334afcfSToomas Soome   UINT8     Reserved[3];
449*f334afcfSToomas Soome   UINT32    Flags;
450*f334afcfSToomas Soome   UINT32    ACPIProcessorUIDValue;
451*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
452*f334afcfSToomas Soome 
453*f334afcfSToomas Soome ///
454*f334afcfSToomas Soome /// Platform Interrupt Sources Structure
455*f334afcfSToomas Soome ///
456*f334afcfSToomas Soome typedef struct {
457*f334afcfSToomas Soome   UINT8     Type;
458*f334afcfSToomas Soome   UINT8     Length;
459*f334afcfSToomas Soome   UINT16    Flags;
460*f334afcfSToomas Soome   UINT8     InterruptType;
461*f334afcfSToomas Soome   UINT8     ProcessorId;
462*f334afcfSToomas Soome   UINT8     ProcessorEid;
463*f334afcfSToomas Soome   UINT8     IoSapicVector;
464*f334afcfSToomas Soome   UINT32    GlobalSystemInterrupt;
465*f334afcfSToomas Soome   UINT32    PlatformInterruptSourceFlags;
466*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
467*f334afcfSToomas Soome 
468*f334afcfSToomas Soome ///
469*f334afcfSToomas Soome /// Platform Interrupt Source Flags.
470*f334afcfSToomas Soome /// All other bits are reserved and must be set to 0.
471*f334afcfSToomas Soome ///
472*f334afcfSToomas Soome #define EFI_ACPI_6_4_CPEI_PROCESSOR_OVERRIDE  BIT0
473*f334afcfSToomas Soome 
474*f334afcfSToomas Soome ///
475*f334afcfSToomas Soome /// Processor Local x2APIC Structure Definition
476*f334afcfSToomas Soome ///
477*f334afcfSToomas Soome typedef struct {
478*f334afcfSToomas Soome   UINT8     Type;
479*f334afcfSToomas Soome   UINT8     Length;
480*f334afcfSToomas Soome   UINT8     Reserved[2];
481*f334afcfSToomas Soome   UINT32    X2ApicId;
482*f334afcfSToomas Soome   UINT32    Flags;
483*f334afcfSToomas Soome   UINT32    AcpiProcessorUid;
484*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
485*f334afcfSToomas Soome 
486*f334afcfSToomas Soome ///
487*f334afcfSToomas Soome /// Local x2APIC NMI Structure
488*f334afcfSToomas Soome ///
489*f334afcfSToomas Soome typedef struct {
490*f334afcfSToomas Soome   UINT8     Type;
491*f334afcfSToomas Soome   UINT8     Length;
492*f334afcfSToomas Soome   UINT16    Flags;
493*f334afcfSToomas Soome   UINT32    AcpiProcessorUid;
494*f334afcfSToomas Soome   UINT8     LocalX2ApicLint;
495*f334afcfSToomas Soome   UINT8     Reserved[3];
496*f334afcfSToomas Soome } EFI_ACPI_6_4_LOCAL_X2APIC_NMI_STRUCTURE;
497*f334afcfSToomas Soome 
498*f334afcfSToomas Soome ///
499*f334afcfSToomas Soome /// GIC Structure
500*f334afcfSToomas Soome ///
501*f334afcfSToomas Soome typedef struct {
502*f334afcfSToomas Soome   UINT8     Type;
503*f334afcfSToomas Soome   UINT8     Length;
504*f334afcfSToomas Soome   UINT16    Reserved;
505*f334afcfSToomas Soome   UINT32    CPUInterfaceNumber;
506*f334afcfSToomas Soome   UINT32    AcpiProcessorUid;
507*f334afcfSToomas Soome   UINT32    Flags;
508*f334afcfSToomas Soome   UINT32    ParkingProtocolVersion;
509*f334afcfSToomas Soome   UINT32    PerformanceInterruptGsiv;
510*f334afcfSToomas Soome   UINT64    ParkedAddress;
511*f334afcfSToomas Soome   UINT64    PhysicalBaseAddress;
512*f334afcfSToomas Soome   UINT64    GICV;
513*f334afcfSToomas Soome   UINT64    GICH;
514*f334afcfSToomas Soome   UINT32    VGICMaintenanceInterrupt;
515*f334afcfSToomas Soome   UINT64    GICRBaseAddress;
516*f334afcfSToomas Soome   UINT64    MPIDR;
517*f334afcfSToomas Soome   UINT8     ProcessorPowerEfficiencyClass;
518*f334afcfSToomas Soome   UINT8     Reserved2;
519*f334afcfSToomas Soome   UINT16    SpeOverflowInterrupt;
520*f334afcfSToomas Soome } EFI_ACPI_6_4_GIC_STRUCTURE;
521*f334afcfSToomas Soome 
522*f334afcfSToomas Soome ///
523*f334afcfSToomas Soome /// GIC Flags.  All other bits are reserved and must be 0.
524*f334afcfSToomas Soome ///
525*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_ENABLED                            BIT0
526*f334afcfSToomas Soome #define EFI_ACPI_6_4_PERFORMANCE_INTERRUPT_MODEL            BIT1
527*f334afcfSToomas Soome #define EFI_ACPI_6_4_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS  BIT2
528*f334afcfSToomas Soome 
529*f334afcfSToomas Soome ///
530*f334afcfSToomas Soome /// GIC Distributor Structure
531*f334afcfSToomas Soome ///
532*f334afcfSToomas Soome typedef struct {
533*f334afcfSToomas Soome   UINT8     Type;
534*f334afcfSToomas Soome   UINT8     Length;
535*f334afcfSToomas Soome   UINT16    Reserved1;
536*f334afcfSToomas Soome   UINT32    GicId;
537*f334afcfSToomas Soome   UINT64    PhysicalBaseAddress;
538*f334afcfSToomas Soome   UINT32    SystemVectorBase;
539*f334afcfSToomas Soome   UINT8     GicVersion;
540*f334afcfSToomas Soome   UINT8     Reserved2[3];
541*f334afcfSToomas Soome } EFI_ACPI_6_4_GIC_DISTRIBUTOR_STRUCTURE;
542*f334afcfSToomas Soome 
543*f334afcfSToomas Soome ///
544*f334afcfSToomas Soome /// GIC Version
545*f334afcfSToomas Soome ///
546*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_V1  0x01
547*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_V2  0x02
548*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_V3  0x03
549*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_V4  0x04
550*f334afcfSToomas Soome 
551*f334afcfSToomas Soome ///
552*f334afcfSToomas Soome /// GIC MSI Frame Structure
553*f334afcfSToomas Soome ///
554*f334afcfSToomas Soome typedef struct {
555*f334afcfSToomas Soome   UINT8     Type;
556*f334afcfSToomas Soome   UINT8     Length;
557*f334afcfSToomas Soome   UINT16    Reserved1;
558*f334afcfSToomas Soome   UINT32    GicMsiFrameId;
559*f334afcfSToomas Soome   UINT64    PhysicalBaseAddress;
560*f334afcfSToomas Soome   UINT32    Flags;
561*f334afcfSToomas Soome   UINT16    SPICount;
562*f334afcfSToomas Soome   UINT16    SPIBase;
563*f334afcfSToomas Soome } EFI_ACPI_6_4_GIC_MSI_FRAME_STRUCTURE;
564*f334afcfSToomas Soome 
565*f334afcfSToomas Soome ///
566*f334afcfSToomas Soome /// GIC MSI Frame Flags.  All other bits are reserved and must be 0.
567*f334afcfSToomas Soome ///
568*f334afcfSToomas Soome #define EFI_ACPI_6_4_SPI_COUNT_BASE_SELECT  BIT0
569*f334afcfSToomas Soome 
570*f334afcfSToomas Soome ///
571*f334afcfSToomas Soome /// GICR Structure
572*f334afcfSToomas Soome ///
573*f334afcfSToomas Soome typedef struct {
574*f334afcfSToomas Soome   UINT8     Type;
575*f334afcfSToomas Soome   UINT8     Length;
576*f334afcfSToomas Soome   UINT16    Reserved;
577*f334afcfSToomas Soome   UINT64    DiscoveryRangeBaseAddress;
578*f334afcfSToomas Soome   UINT32    DiscoveryRangeLength;
579*f334afcfSToomas Soome } EFI_ACPI_6_4_GICR_STRUCTURE;
580*f334afcfSToomas Soome 
581*f334afcfSToomas Soome ///
582*f334afcfSToomas Soome /// GIC Interrupt Translation Service Structure
583*f334afcfSToomas Soome ///
584*f334afcfSToomas Soome typedef struct {
585*f334afcfSToomas Soome   UINT8     Type;
586*f334afcfSToomas Soome   UINT8     Length;
587*f334afcfSToomas Soome   UINT16    Reserved;
588*f334afcfSToomas Soome   UINT32    GicItsId;
589*f334afcfSToomas Soome   UINT64    PhysicalBaseAddress;
590*f334afcfSToomas Soome   UINT32    Reserved2;
591*f334afcfSToomas Soome } EFI_ACPI_6_4_GIC_ITS_STRUCTURE;
592*f334afcfSToomas Soome 
593*f334afcfSToomas Soome ///
594*f334afcfSToomas Soome /// Multiprocessor Wakeup Structure
595*f334afcfSToomas Soome ///
596*f334afcfSToomas Soome typedef struct {
597*f334afcfSToomas Soome   UINT8     Type;
598*f334afcfSToomas Soome   UINT8     Length;
599*f334afcfSToomas Soome   UINT16    MailBoxVersion;
600*f334afcfSToomas Soome   UINT32    Reserved;
601*f334afcfSToomas Soome   UINT64    MailBoxAddress;
602*f334afcfSToomas Soome } EFI_ACPI_6_4_MULTIPROCESSOR_WAKEUP_STRUCTURE;
603*f334afcfSToomas Soome 
604*f334afcfSToomas Soome ///
605*f334afcfSToomas Soome /// Multiprocessor Wakeup Mailbox Structure
606*f334afcfSToomas Soome ///
607*f334afcfSToomas Soome typedef struct {
608*f334afcfSToomas Soome   UINT16    Command;
609*f334afcfSToomas Soome   UINT16    Reserved;
610*f334afcfSToomas Soome   UINT32    AcpiId;
611*f334afcfSToomas Soome   UINT64    WakeupVector;
612*f334afcfSToomas Soome   UINT8     ReservedForOs[2032];
613*f334afcfSToomas Soome   UINT8     ReservedForFirmware[2048];
614*f334afcfSToomas Soome } EFI_ACPI_6_4_MULTIPROCESSOR_WAKEUP_MAILBOX_STRUCTURE;
615*f334afcfSToomas Soome 
616*f334afcfSToomas Soome #define EFI_ACPI_6_4_MULTIPROCESSOR_WAKEUP_MAILBOX_COMMAND_NOOP    0x0000
617*f334afcfSToomas Soome #define EFI_ACPI_6_4_MULTIPROCESSOR_WAKEUP_MAILBOX_COMMAND_WAKEUP  0x0001
618*f334afcfSToomas Soome 
619*f334afcfSToomas Soome ///
620*f334afcfSToomas Soome /// Smart Battery Description Table (SBST)
621*f334afcfSToomas Soome ///
622*f334afcfSToomas Soome typedef struct {
623*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
624*f334afcfSToomas Soome   UINT32                         WarningEnergyLevel;
625*f334afcfSToomas Soome   UINT32                         LowEnergyLevel;
626*f334afcfSToomas Soome   UINT32                         CriticalEnergyLevel;
627*f334afcfSToomas Soome } EFI_ACPI_6_4_SMART_BATTERY_DESCRIPTION_TABLE;
628*f334afcfSToomas Soome 
629*f334afcfSToomas Soome ///
630*f334afcfSToomas Soome /// SBST Version (as defined in ACPI 6.4 spec.)
631*f334afcfSToomas Soome ///
632*f334afcfSToomas Soome #define EFI_ACPI_6_4_SMART_BATTERY_DESCRIPTION_TABLE_REVISION  0x01
633*f334afcfSToomas Soome 
634*f334afcfSToomas Soome ///
635*f334afcfSToomas Soome /// Embedded Controller Boot Resources Table (ECDT)
636*f334afcfSToomas Soome /// The table is followed by a null terminated ASCII string that contains
637*f334afcfSToomas Soome /// a fully qualified reference to the name space object.
638*f334afcfSToomas Soome ///
639*f334afcfSToomas Soome typedef struct {
640*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER               Header;
641*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    EcControl;
642*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    EcData;
643*f334afcfSToomas Soome   UINT32                                    Uid;
644*f334afcfSToomas Soome   UINT8                                     GpeBit;
645*f334afcfSToomas Soome } EFI_ACPI_6_4_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
646*f334afcfSToomas Soome 
647*f334afcfSToomas Soome ///
648*f334afcfSToomas Soome /// ECDT Version (as defined in ACPI 6.4 spec.)
649*f334afcfSToomas Soome ///
650*f334afcfSToomas Soome #define EFI_ACPI_6_4_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
651*f334afcfSToomas Soome 
652*f334afcfSToomas Soome ///
653*f334afcfSToomas Soome /// System Resource Affinity Table (SRAT).  The rest of the table
654*f334afcfSToomas Soome /// must be defined in a platform specific manner.
655*f334afcfSToomas Soome ///
656*f334afcfSToomas Soome typedef struct {
657*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
658*f334afcfSToomas Soome   UINT32                         Reserved1; ///< Must be set to 1
659*f334afcfSToomas Soome   UINT64                         Reserved2;
660*f334afcfSToomas Soome } EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
661*f334afcfSToomas Soome 
662*f334afcfSToomas Soome ///
663*f334afcfSToomas Soome /// SRAT Version (as defined in ACPI 6.4 spec.)
664*f334afcfSToomas Soome ///
665*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
666*f334afcfSToomas Soome 
667*f334afcfSToomas Soome //
668*f334afcfSToomas Soome // SRAT structure types.
669*f334afcfSToomas Soome // All other values between 0x06 an 0xFF are reserved and
670*f334afcfSToomas Soome // will be ignored by OSPM.
671*f334afcfSToomas Soome //
672*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
673*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_AFFINITY                      0x01
674*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
675*f334afcfSToomas Soome #define EFI_ACPI_6_4_GICC_AFFINITY                        0x03
676*f334afcfSToomas Soome #define EFI_ACPI_6_4_GIC_ITS_AFFINITY                     0x04
677*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_INITIATOR_AFFINITY           0x05
678*f334afcfSToomas Soome 
679*f334afcfSToomas Soome ///
680*f334afcfSToomas Soome /// Processor Local APIC/SAPIC Affinity Structure Definition
681*f334afcfSToomas Soome ///
682*f334afcfSToomas Soome typedef struct {
683*f334afcfSToomas Soome   UINT8     Type;
684*f334afcfSToomas Soome   UINT8     Length;
685*f334afcfSToomas Soome   UINT8     ProximityDomain7To0;
686*f334afcfSToomas Soome   UINT8     ApicId;
687*f334afcfSToomas Soome   UINT32    Flags;
688*f334afcfSToomas Soome   UINT8     LocalSapicEid;
689*f334afcfSToomas Soome   UINT8     ProximityDomain31To8[3];
690*f334afcfSToomas Soome   UINT32    ClockDomain;
691*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
692*f334afcfSToomas Soome 
693*f334afcfSToomas Soome ///
694*f334afcfSToomas Soome /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
695*f334afcfSToomas Soome ///
696*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED  (1 << 0)
697*f334afcfSToomas Soome 
698*f334afcfSToomas Soome ///
699*f334afcfSToomas Soome /// Memory Affinity Structure Definition
700*f334afcfSToomas Soome ///
701*f334afcfSToomas Soome typedef struct {
702*f334afcfSToomas Soome   UINT8     Type;
703*f334afcfSToomas Soome   UINT8     Length;
704*f334afcfSToomas Soome   UINT32    ProximityDomain;
705*f334afcfSToomas Soome   UINT16    Reserved1;
706*f334afcfSToomas Soome   UINT32    AddressBaseLow;
707*f334afcfSToomas Soome   UINT32    AddressBaseHigh;
708*f334afcfSToomas Soome   UINT32    LengthLow;
709*f334afcfSToomas Soome   UINT32    LengthHigh;
710*f334afcfSToomas Soome   UINT32    Reserved2;
711*f334afcfSToomas Soome   UINT32    Flags;
712*f334afcfSToomas Soome   UINT64    Reserved3;
713*f334afcfSToomas Soome } EFI_ACPI_6_4_MEMORY_AFFINITY_STRUCTURE;
714*f334afcfSToomas Soome 
715*f334afcfSToomas Soome //
716*f334afcfSToomas Soome // Memory Flags.  All other bits are reserved and must be 0.
717*f334afcfSToomas Soome //
718*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_ENABLED        (1 << 0)
719*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_HOT_PLUGGABLE  (1 << 1)
720*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_NONVOLATILE    (1 << 2)
721*f334afcfSToomas Soome 
722*f334afcfSToomas Soome ///
723*f334afcfSToomas Soome /// Processor Local x2APIC Affinity Structure Definition
724*f334afcfSToomas Soome ///
725*f334afcfSToomas Soome typedef struct {
726*f334afcfSToomas Soome   UINT8     Type;
727*f334afcfSToomas Soome   UINT8     Length;
728*f334afcfSToomas Soome   UINT8     Reserved1[2];
729*f334afcfSToomas Soome   UINT32    ProximityDomain;
730*f334afcfSToomas Soome   UINT32    X2ApicId;
731*f334afcfSToomas Soome   UINT32    Flags;
732*f334afcfSToomas Soome   UINT32    ClockDomain;
733*f334afcfSToomas Soome   UINT8     Reserved2[4];
734*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
735*f334afcfSToomas Soome 
736*f334afcfSToomas Soome ///
737*f334afcfSToomas Soome /// GICC Affinity Structure Definition
738*f334afcfSToomas Soome ///
739*f334afcfSToomas Soome typedef struct {
740*f334afcfSToomas Soome   UINT8     Type;
741*f334afcfSToomas Soome   UINT8     Length;
742*f334afcfSToomas Soome   UINT32    ProximityDomain;
743*f334afcfSToomas Soome   UINT32    AcpiProcessorUid;
744*f334afcfSToomas Soome   UINT32    Flags;
745*f334afcfSToomas Soome   UINT32    ClockDomain;
746*f334afcfSToomas Soome } EFI_ACPI_6_4_GICC_AFFINITY_STRUCTURE;
747*f334afcfSToomas Soome 
748*f334afcfSToomas Soome ///
749*f334afcfSToomas Soome /// GICC Flags.  All other bits are reserved and must be 0.
750*f334afcfSToomas Soome ///
751*f334afcfSToomas Soome #define EFI_ACPI_6_4_GICC_ENABLED  (1 << 0)
752*f334afcfSToomas Soome 
753*f334afcfSToomas Soome ///
754*f334afcfSToomas Soome /// GIC Interrupt Translation Service (ITS) Affinity Structure Definition
755*f334afcfSToomas Soome ///
756*f334afcfSToomas Soome typedef struct {
757*f334afcfSToomas Soome   UINT8     Type;
758*f334afcfSToomas Soome   UINT8     Length;
759*f334afcfSToomas Soome   UINT32    ProximityDomain;
760*f334afcfSToomas Soome   UINT8     Reserved[2];
761*f334afcfSToomas Soome   UINT32    ItsId;
762*f334afcfSToomas Soome } EFI_ACPI_6_4_GIC_ITS_AFFINITY_STRUCTURE;
763*f334afcfSToomas Soome 
764*f334afcfSToomas Soome //
765*f334afcfSToomas Soome // Generic Initiator Affinity Structure Device Handle Types
766*f334afcfSToomas Soome // All other values between 0x02 an 0xFF are reserved and
767*f334afcfSToomas Soome // will be ignored by OSPM.
768*f334afcfSToomas Soome //
769*f334afcfSToomas Soome #define EFI_ACPI_6_4_ACPI_DEVICE_HANDLE  0x00
770*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_DEVICE_HANDLE   0x01
771*f334afcfSToomas Soome 
772*f334afcfSToomas Soome ///
773*f334afcfSToomas Soome /// Device Handle - ACPI
774*f334afcfSToomas Soome ///
775*f334afcfSToomas Soome typedef struct {
776*f334afcfSToomas Soome   UINT64    AcpiHid;
777*f334afcfSToomas Soome   UINT32    AcpiUid;
778*f334afcfSToomas Soome   UINT8     Reserved[4];
779*f334afcfSToomas Soome } EFI_ACPI_6_4_DEVICE_HANDLE_ACPI;
780*f334afcfSToomas Soome 
781*f334afcfSToomas Soome ///
782*f334afcfSToomas Soome /// Device Handle - PCI
783*f334afcfSToomas Soome ///
784*f334afcfSToomas Soome typedef struct {
785*f334afcfSToomas Soome   UINT16    PciSegment;
786*f334afcfSToomas Soome   UINT16    PciBdfNumber;
787*f334afcfSToomas Soome   UINT8     Reserved[12];
788*f334afcfSToomas Soome } EFI_ACPI_6_4_DEVICE_HANDLE_PCI;
789*f334afcfSToomas Soome 
790*f334afcfSToomas Soome ///
791*f334afcfSToomas Soome /// Device Handle
792*f334afcfSToomas Soome ///
793*f334afcfSToomas Soome typedef union {
794*f334afcfSToomas Soome   EFI_ACPI_6_4_DEVICE_HANDLE_ACPI    Acpi;
795*f334afcfSToomas Soome   EFI_ACPI_6_4_DEVICE_HANDLE_PCI     Pci;
796*f334afcfSToomas Soome } EFI_ACPI_6_4_DEVICE_HANDLE;
797*f334afcfSToomas Soome 
798*f334afcfSToomas Soome ///
799*f334afcfSToomas Soome /// Generic Initiator Affinity Structure
800*f334afcfSToomas Soome ///
801*f334afcfSToomas Soome typedef struct {
802*f334afcfSToomas Soome   UINT8                         Type;
803*f334afcfSToomas Soome   UINT8                         Length;
804*f334afcfSToomas Soome   UINT8                         Reserved1;
805*f334afcfSToomas Soome   UINT8                         DeviceHandleType;
806*f334afcfSToomas Soome   UINT32                        ProximityDomain;
807*f334afcfSToomas Soome   EFI_ACPI_6_4_DEVICE_HANDLE    DeviceHandle;
808*f334afcfSToomas Soome   UINT32                        Flags;
809*f334afcfSToomas Soome   UINT8                         Reserved2[4];
810*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_INITIATOR_AFFINITY_STRUCTURE;
811*f334afcfSToomas Soome 
812*f334afcfSToomas Soome ///
813*f334afcfSToomas Soome /// Generic Initiator Affinity Structure Flags. All other bits are reserved
814*f334afcfSToomas Soome /// and must be 0.
815*f334afcfSToomas Soome ///
816*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_INITIATOR_AFFINITY_STRUCTURE_ENABLED                     BIT0
817*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_INITIATOR_AFFINITY_STRUCTURE_ARCHITECTURAL_TRANSACTIONS  BIT1
818*f334afcfSToomas Soome 
819*f334afcfSToomas Soome ///
820*f334afcfSToomas Soome /// System Locality Distance Information Table (SLIT).
821*f334afcfSToomas Soome /// The rest of the table is a matrix.
822*f334afcfSToomas Soome ///
823*f334afcfSToomas Soome typedef struct {
824*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
825*f334afcfSToomas Soome   UINT64                         NumberOfSystemLocalities;
826*f334afcfSToomas Soome } EFI_ACPI_6_4_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
827*f334afcfSToomas Soome 
828*f334afcfSToomas Soome ///
829*f334afcfSToomas Soome /// SLIT Version (as defined in ACPI 6.4 spec.)
830*f334afcfSToomas Soome ///
831*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
832*f334afcfSToomas Soome 
833*f334afcfSToomas Soome ///
834*f334afcfSToomas Soome /// Corrected Platform Error Polling Table (CPEP)
835*f334afcfSToomas Soome ///
836*f334afcfSToomas Soome typedef struct {
837*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
838*f334afcfSToomas Soome   UINT8                          Reserved[8];
839*f334afcfSToomas Soome } EFI_ACPI_6_4_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
840*f334afcfSToomas Soome 
841*f334afcfSToomas Soome ///
842*f334afcfSToomas Soome /// CPEP Version (as defined in ACPI 6.4 spec.)
843*f334afcfSToomas Soome ///
844*f334afcfSToomas Soome #define EFI_ACPI_6_4_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION  0x01
845*f334afcfSToomas Soome 
846*f334afcfSToomas Soome //
847*f334afcfSToomas Soome // CPEP processor structure types.
848*f334afcfSToomas Soome //
849*f334afcfSToomas Soome #define EFI_ACPI_6_4_CPEP_PROCESSOR_APIC_SAPIC  0x00
850*f334afcfSToomas Soome 
851*f334afcfSToomas Soome ///
852*f334afcfSToomas Soome /// Corrected Platform Error Polling Processor Structure Definition
853*f334afcfSToomas Soome ///
854*f334afcfSToomas Soome typedef struct {
855*f334afcfSToomas Soome   UINT8     Type;
856*f334afcfSToomas Soome   UINT8     Length;
857*f334afcfSToomas Soome   UINT8     ProcessorId;
858*f334afcfSToomas Soome   UINT8     ProcessorEid;
859*f334afcfSToomas Soome   UINT32    PollingInterval;
860*f334afcfSToomas Soome } EFI_ACPI_6_4_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
861*f334afcfSToomas Soome 
862*f334afcfSToomas Soome ///
863*f334afcfSToomas Soome /// Maximum System Characteristics Table (MSCT)
864*f334afcfSToomas Soome ///
865*f334afcfSToomas Soome typedef struct {
866*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
867*f334afcfSToomas Soome   UINT32                         OffsetProxDomInfo;
868*f334afcfSToomas Soome   UINT32                         MaximumNumberOfProximityDomains;
869*f334afcfSToomas Soome   UINT32                         MaximumNumberOfClockDomains;
870*f334afcfSToomas Soome   UINT64                         MaximumPhysicalAddress;
871*f334afcfSToomas Soome } EFI_ACPI_6_4_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
872*f334afcfSToomas Soome 
873*f334afcfSToomas Soome ///
874*f334afcfSToomas Soome /// MSCT Version (as defined in ACPI 6.4 spec.)
875*f334afcfSToomas Soome ///
876*f334afcfSToomas Soome #define EFI_ACPI_6_4_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION  0x01
877*f334afcfSToomas Soome 
878*f334afcfSToomas Soome ///
879*f334afcfSToomas Soome /// Maximum Proximity Domain Information Structure Definition
880*f334afcfSToomas Soome ///
881*f334afcfSToomas Soome typedef struct {
882*f334afcfSToomas Soome   UINT8     Revision;
883*f334afcfSToomas Soome   UINT8     Length;
884*f334afcfSToomas Soome   UINT32    ProximityDomainRangeLow;
885*f334afcfSToomas Soome   UINT32    ProximityDomainRangeHigh;
886*f334afcfSToomas Soome   UINT32    MaximumProcessorCapacity;
887*f334afcfSToomas Soome   UINT64    MaximumMemoryCapacity;
888*f334afcfSToomas Soome } EFI_ACPI_6_4_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
889*f334afcfSToomas Soome 
890*f334afcfSToomas Soome ///
891*f334afcfSToomas Soome /// ACPI RAS Feature Table definition.
892*f334afcfSToomas Soome ///
893*f334afcfSToomas Soome typedef struct {
894*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
895*f334afcfSToomas Soome   UINT8                          PlatformCommunicationChannelIdentifier[12];
896*f334afcfSToomas Soome } EFI_ACPI_6_4_RAS_FEATURE_TABLE;
897*f334afcfSToomas Soome 
898*f334afcfSToomas Soome ///
899*f334afcfSToomas Soome /// RASF Version (as defined in ACPI 6.4 spec.)
900*f334afcfSToomas Soome ///
901*f334afcfSToomas Soome #define EFI_ACPI_6_4_RAS_FEATURE_TABLE_REVISION  0x01
902*f334afcfSToomas Soome 
903*f334afcfSToomas Soome ///
904*f334afcfSToomas Soome /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
905*f334afcfSToomas Soome ///
906*f334afcfSToomas Soome typedef struct {
907*f334afcfSToomas Soome   UINT32    Signature;
908*f334afcfSToomas Soome   UINT16    Command;
909*f334afcfSToomas Soome   UINT16    Status;
910*f334afcfSToomas Soome   UINT16    Version;
911*f334afcfSToomas Soome   UINT8     RASCapabilities[16];
912*f334afcfSToomas Soome   UINT8     SetRASCapabilities[16];
913*f334afcfSToomas Soome   UINT16    NumberOfRASFParameterBlocks;
914*f334afcfSToomas Soome   UINT32    SetRASCapabilitiesStatus;
915*f334afcfSToomas Soome } EFI_ACPI_6_4_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
916*f334afcfSToomas Soome 
917*f334afcfSToomas Soome ///
918*f334afcfSToomas Soome /// ACPI RASF PCC command code
919*f334afcfSToomas Soome ///
920*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
921*f334afcfSToomas Soome 
922*f334afcfSToomas Soome ///
923*f334afcfSToomas Soome /// ACPI RASF Platform RAS Capabilities
924*f334afcfSToomas Soome ///
925*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPORTED                          BIT0
926*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPORTED_AND_EXPOSED_TO_SOFTWARE  BIT1
927*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PLATFORM_RAS_CAPABILITY_CPU_CACHE_FLUSH_TO_NVDIMM_DURABILITY_ON_POWER_LOSS             BIT2
928*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PLATFORM_RAS_CAPABILITY_MEMORY_CONTROLLER_FLUSH_TO_NVDIMM_DURABILITY_ON_POWER_LOSS     BIT3
929*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PLATFORM_RAS_CAPABILITY_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_HARDWARE_MIRRORING          BIT4
930*f334afcfSToomas Soome 
931*f334afcfSToomas Soome ///
932*f334afcfSToomas Soome /// ACPI RASF Parameter Block structure for PATROL_SCRUB
933*f334afcfSToomas Soome ///
934*f334afcfSToomas Soome typedef struct {
935*f334afcfSToomas Soome   UINT16    Type;
936*f334afcfSToomas Soome   UINT16    Version;
937*f334afcfSToomas Soome   UINT16    Length;
938*f334afcfSToomas Soome   UINT16    PatrolScrubCommand;
939*f334afcfSToomas Soome   UINT64    RequestedAddressRange[2];
940*f334afcfSToomas Soome   UINT64    ActualAddressRange[2];
941*f334afcfSToomas Soome   UINT16    Flags;
942*f334afcfSToomas Soome   UINT8     RequestedSpeed;
943*f334afcfSToomas Soome } EFI_ACPI_6_4_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
944*f334afcfSToomas Soome 
945*f334afcfSToomas Soome ///
946*f334afcfSToomas Soome /// ACPI RASF Patrol Scrub command
947*f334afcfSToomas Soome ///
948*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS  0x01
949*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER  0x02
950*f334afcfSToomas Soome #define EFI_ACPI_6_4_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER   0x03
951*f334afcfSToomas Soome 
952*f334afcfSToomas Soome ///
953*f334afcfSToomas Soome /// Memory Power State Table definition.
954*f334afcfSToomas Soome ///
955*f334afcfSToomas Soome typedef struct {
956*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
957*f334afcfSToomas Soome   UINT8                          PlatformCommunicationChannelIdentifier;
958*f334afcfSToomas Soome   UINT8                          Reserved[3];
959*f334afcfSToomas Soome   // Memory Power Node Structure
960*f334afcfSToomas Soome   // Memory Power State Characteristics
961*f334afcfSToomas Soome } EFI_ACPI_6_4_MEMORY_POWER_STATUS_TABLE;
962*f334afcfSToomas Soome 
963*f334afcfSToomas Soome ///
964*f334afcfSToomas Soome /// MPST Version (as defined in ACPI 6.4 spec.)
965*f334afcfSToomas Soome ///
966*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_POWER_STATE_TABLE_REVISION  0x01
967*f334afcfSToomas Soome 
968*f334afcfSToomas Soome ///
969*f334afcfSToomas Soome /// MPST Platform Communication Channel Shared Memory Region definition.
970*f334afcfSToomas Soome ///
971*f334afcfSToomas Soome typedef struct {
972*f334afcfSToomas Soome   UINT32    Signature;
973*f334afcfSToomas Soome   UINT16    Command;
974*f334afcfSToomas Soome   UINT16    Status;
975*f334afcfSToomas Soome   UINT32    MemoryPowerCommandRegister;
976*f334afcfSToomas Soome   UINT32    MemoryPowerStatusRegister;
977*f334afcfSToomas Soome   UINT32    PowerStateId;
978*f334afcfSToomas Soome   UINT32    MemoryPowerNodeId;
979*f334afcfSToomas Soome   UINT64    MemoryEnergyConsumed;
980*f334afcfSToomas Soome   UINT64    ExpectedAveragePowerComsuned;
981*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
982*f334afcfSToomas Soome 
983*f334afcfSToomas Soome ///
984*f334afcfSToomas Soome /// ACPI MPST PCC command code
985*f334afcfSToomas Soome ///
986*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
987*f334afcfSToomas Soome 
988*f334afcfSToomas Soome ///
989*f334afcfSToomas Soome /// ACPI MPST Memory Power command
990*f334afcfSToomas Soome ///
991*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE      0x01
992*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE      0x02
993*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED  0x03
994*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED  0x04
995*f334afcfSToomas Soome 
996*f334afcfSToomas Soome ///
997*f334afcfSToomas Soome /// MPST Memory Power Node Table
998*f334afcfSToomas Soome ///
999*f334afcfSToomas Soome typedef struct {
1000*f334afcfSToomas Soome   UINT8    PowerStateValue;
1001*f334afcfSToomas Soome   UINT8    PowerStateInformationIndex;
1002*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE;
1003*f334afcfSToomas Soome 
1004*f334afcfSToomas Soome typedef struct {
1005*f334afcfSToomas Soome   UINT8     Flag;
1006*f334afcfSToomas Soome   UINT8     Reserved;
1007*f334afcfSToomas Soome   UINT16    MemoryPowerNodeId;
1008*f334afcfSToomas Soome   UINT32    Length;
1009*f334afcfSToomas Soome   UINT64    AddressBase;
1010*f334afcfSToomas Soome   UINT64    AddressLength;
1011*f334afcfSToomas Soome   UINT32    NumberOfPowerStates;
1012*f334afcfSToomas Soome   UINT32    NumberOfPhysicalComponents;
1013*f334afcfSToomas Soome   // EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
1014*f334afcfSToomas Soome   // UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
1015*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_MEMORY_POWER_STRUCTURE;
1016*f334afcfSToomas Soome 
1017*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE         0x01
1018*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED  0x02
1019*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE  0x04
1020*f334afcfSToomas Soome 
1021*f334afcfSToomas Soome typedef struct {
1022*f334afcfSToomas Soome   UINT16    MemoryPowerNodeCount;
1023*f334afcfSToomas Soome   UINT8     Reserved[2];
1024*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_MEMORY_POWER_NODE_TABLE;
1025*f334afcfSToomas Soome 
1026*f334afcfSToomas Soome ///
1027*f334afcfSToomas Soome /// MPST Memory Power State Characteristics Table
1028*f334afcfSToomas Soome ///
1029*f334afcfSToomas Soome typedef struct {
1030*f334afcfSToomas Soome   UINT8     PowerStateStructureID;
1031*f334afcfSToomas Soome   UINT8     Flag;
1032*f334afcfSToomas Soome   UINT16    Reserved;
1033*f334afcfSToomas Soome   UINT32    AveragePowerConsumedInMPS0;
1034*f334afcfSToomas Soome   UINT32    RelativePowerSavingToMPS0;
1035*f334afcfSToomas Soome   UINT64    ExitLatencyToMPS0;
1036*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
1037*f334afcfSToomas Soome 
1038*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED             0x01
1039*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY  0x02
1040*f334afcfSToomas Soome #define EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT   0x04
1041*f334afcfSToomas Soome 
1042*f334afcfSToomas Soome typedef struct {
1043*f334afcfSToomas Soome   UINT16    MemoryPowerStateCharacteristicsCount;
1044*f334afcfSToomas Soome   UINT8     Reserved[2];
1045*f334afcfSToomas Soome } EFI_ACPI_6_4_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
1046*f334afcfSToomas Soome 
1047*f334afcfSToomas Soome ///
1048*f334afcfSToomas Soome /// Platform Memory Topology Table definition.
1049*f334afcfSToomas Soome ///
1050*f334afcfSToomas Soome typedef struct {
1051*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1052*f334afcfSToomas Soome   UINT32                         NumberOfMemoryDevices;
1053*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE  MemoryDeviceStructure[NumberOfMemoryDevices];
1054*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_MEMORY_TOPOLOGY_TABLE;
1055*f334afcfSToomas Soome 
1056*f334afcfSToomas Soome ///
1057*f334afcfSToomas Soome /// PMTT Version (as defined in ACPI 6.4 spec.)
1058*f334afcfSToomas Soome ///
1059*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_TOPOLOGY_TABLE_REVISION  0x02
1060*f334afcfSToomas Soome 
1061*f334afcfSToomas Soome ///
1062*f334afcfSToomas Soome /// Common Memory Device.
1063*f334afcfSToomas Soome ///
1064*f334afcfSToomas Soome typedef struct {
1065*f334afcfSToomas Soome   UINT8     Type;
1066*f334afcfSToomas Soome   UINT8     Reserved;
1067*f334afcfSToomas Soome   UINT16    Length;
1068*f334afcfSToomas Soome   UINT16    Flags;
1069*f334afcfSToomas Soome   UINT16    Reserved1;
1070*f334afcfSToomas Soome   UINT32    NumberOfMemoryDevices;
1071*f334afcfSToomas Soome   // UINT8                                   TypeSpecificData[];
1072*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE  MemoryDeviceStructure[NumberOfMemoryDevices];
1073*f334afcfSToomas Soome } EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE;
1074*f334afcfSToomas Soome 
1075*f334afcfSToomas Soome ///
1076*f334afcfSToomas Soome /// Memory Device Type.
1077*f334afcfSToomas Soome ///
1078*f334afcfSToomas Soome #define EFI_ACPI_6_4_PMTT_MEMORY_DEVICE_TYPE_SOCKET                0x0
1079*f334afcfSToomas Soome #define EFI_ACPI_6_4_PMTT_MEMORY_DEVICE_TYPE_MEMORY_CONTROLLER     0x1
1080*f334afcfSToomas Soome #define EFI_ACPI_6_4_PMTT_MEMORY_DEVICE_TYPE_DIMM                  0x2
1081*f334afcfSToomas Soome #define EFI_ACPI_6_4_PMTT_MEMORY_DEVICE_TYPE_VENDOR_SPECIFIC_TYPE  0xFF
1082*f334afcfSToomas Soome 
1083*f334afcfSToomas Soome ///
1084*f334afcfSToomas Soome /// Socket Type Data.
1085*f334afcfSToomas Soome ///
1086*f334afcfSToomas Soome typedef struct {
1087*f334afcfSToomas Soome   EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE    CommonMemoryDeviceHeader;
1088*f334afcfSToomas Soome   UINT16                                    SocketIdentifier;
1089*f334afcfSToomas Soome   UINT16                                    Reserved;
1090*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE  MemoryDeviceStructure[];
1091*f334afcfSToomas Soome } EFI_ACPI_6_4_PMTT_SOCKET_TYPE_DATA;
1092*f334afcfSToomas Soome 
1093*f334afcfSToomas Soome ///
1094*f334afcfSToomas Soome /// Memory Controller Type Data.
1095*f334afcfSToomas Soome ///
1096*f334afcfSToomas Soome typedef struct {
1097*f334afcfSToomas Soome   EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE    CommonMemoryDeviceHeader;
1098*f334afcfSToomas Soome   UINT16                                    MemoryControllerIdentifier;
1099*f334afcfSToomas Soome   UINT16                                    Reserved;
1100*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE  MemoryDeviceStructure[];
1101*f334afcfSToomas Soome } EFI_ACPI_6_4_PMTT_MEMORY_CONTROLLER_TYPE_DATA;
1102*f334afcfSToomas Soome 
1103*f334afcfSToomas Soome ///
1104*f334afcfSToomas Soome /// DIMM Type Specific Data.
1105*f334afcfSToomas Soome ///
1106*f334afcfSToomas Soome typedef struct {
1107*f334afcfSToomas Soome   EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE    CommonMemoryDeviceHeader;
1108*f334afcfSToomas Soome   UINT32                                    SmbiosHandle;
1109*f334afcfSToomas Soome } EFI_ACPI_6_4_PMTT_DIMM_TYPE_SPECIFIC_DATA;
1110*f334afcfSToomas Soome 
1111*f334afcfSToomas Soome ///
1112*f334afcfSToomas Soome /// Vendor Specific Type Data.
1113*f334afcfSToomas Soome ///
1114*f334afcfSToomas Soome typedef struct {
1115*f334afcfSToomas Soome   EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE    CommonMemoryDeviceHeader;
1116*f334afcfSToomas Soome   UINT8                                     TypeUuid[16];
1117*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_VENDOR_SPECIFIC_TYPE_DATA   VendorSpecificData[];
1118*f334afcfSToomas Soome   // EFI_ACPI_6_4_PMTT_COMMON_MEMORY_DEVICE        MemoryDeviceStructure[];
1119*f334afcfSToomas Soome } EFI_ACPI_6_4_PMTT_VENDOR_SPECIFIC_TYPE_DATA;
1120*f334afcfSToomas Soome 
1121*f334afcfSToomas Soome ///
1122*f334afcfSToomas Soome /// Boot Graphics Resource Table definition.
1123*f334afcfSToomas Soome ///
1124*f334afcfSToomas Soome typedef struct {
1125*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1126*f334afcfSToomas Soome   ///
1127*f334afcfSToomas Soome   /// 2-bytes (16 bit) version ID. This value must be 1.
1128*f334afcfSToomas Soome   ///
1129*f334afcfSToomas Soome   UINT16                         Version;
1130*f334afcfSToomas Soome   ///
1131*f334afcfSToomas Soome   /// 1-byte status field indicating current status about the table.
1132*f334afcfSToomas Soome   ///     Bits[7:3] = Reserved (must be zero)
1133*f334afcfSToomas Soome   ///     Bits[2:1] = Orientation Offset. These bits describe the clockwise
1134*f334afcfSToomas Soome   ///                 degree offset from the image's default orientation.
1135*f334afcfSToomas Soome   ///                 [00] = 0, no offset
1136*f334afcfSToomas Soome   ///                 [01] = 90
1137*f334afcfSToomas Soome   ///                 [10] = 180
1138*f334afcfSToomas Soome   ///                 [11] = 270
1139*f334afcfSToomas Soome   ///     Bit [0] = Displayed. A one indicates the boot image graphic is
1140*f334afcfSToomas Soome   ///               displayed.
1141*f334afcfSToomas Soome   ///
1142*f334afcfSToomas Soome   UINT8     Status;
1143*f334afcfSToomas Soome   ///
1144*f334afcfSToomas Soome   /// 1-byte enumerated type field indicating format of the image.
1145*f334afcfSToomas Soome   ///     0 = Bitmap
1146*f334afcfSToomas Soome   ///     1 - 255  Reserved (for future use)
1147*f334afcfSToomas Soome   ///
1148*f334afcfSToomas Soome   UINT8     ImageType;
1149*f334afcfSToomas Soome   ///
1150*f334afcfSToomas Soome   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
1151*f334afcfSToomas Soome   /// of the image bitmap.
1152*f334afcfSToomas Soome   ///
1153*f334afcfSToomas Soome   UINT64    ImageAddress;
1154*f334afcfSToomas Soome   ///
1155*f334afcfSToomas Soome   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
1156*f334afcfSToomas Soome   /// (X, Y) display offset of the top left corner of the boot image.
1157*f334afcfSToomas Soome   /// The top left corner of the display is at offset (0, 0).
1158*f334afcfSToomas Soome   ///
1159*f334afcfSToomas Soome   UINT32    ImageOffsetX;
1160*f334afcfSToomas Soome   ///
1161*f334afcfSToomas Soome   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
1162*f334afcfSToomas Soome   /// (X, Y) display offset of the top left corner of the boot image.
1163*f334afcfSToomas Soome   /// The top left corner of the display is at offset (0, 0).
1164*f334afcfSToomas Soome   ///
1165*f334afcfSToomas Soome   UINT32    ImageOffsetY;
1166*f334afcfSToomas Soome } EFI_ACPI_6_4_BOOT_GRAPHICS_RESOURCE_TABLE;
1167*f334afcfSToomas Soome 
1168*f334afcfSToomas Soome ///
1169*f334afcfSToomas Soome /// BGRT Revision
1170*f334afcfSToomas Soome ///
1171*f334afcfSToomas Soome #define EFI_ACPI_6_4_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION  1
1172*f334afcfSToomas Soome 
1173*f334afcfSToomas Soome ///
1174*f334afcfSToomas Soome /// BGRT Version
1175*f334afcfSToomas Soome ///
1176*f334afcfSToomas Soome #define EFI_ACPI_6_4_BGRT_VERSION  0x01
1177*f334afcfSToomas Soome 
1178*f334afcfSToomas Soome ///
1179*f334afcfSToomas Soome /// BGRT Status
1180*f334afcfSToomas Soome ///
1181*f334afcfSToomas Soome #define EFI_ACPI_6_4_BGRT_STATUS_NOT_DISPLAYED  0x00
1182*f334afcfSToomas Soome #define EFI_ACPI_6_4_BGRT_STATUS_DISPLAYED      0x01
1183*f334afcfSToomas Soome 
1184*f334afcfSToomas Soome ///
1185*f334afcfSToomas Soome /// BGRT Image Type
1186*f334afcfSToomas Soome ///
1187*f334afcfSToomas Soome #define EFI_ACPI_6_4_BGRT_IMAGE_TYPE_BMP  0x00
1188*f334afcfSToomas Soome 
1189*f334afcfSToomas Soome ///
1190*f334afcfSToomas Soome /// FPDT Version (as defined in ACPI 6.4 spec.)
1191*f334afcfSToomas Soome ///
1192*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION  0x01
1193*f334afcfSToomas Soome 
1194*f334afcfSToomas Soome ///
1195*f334afcfSToomas Soome /// FPDT Performance Record Types
1196*f334afcfSToomas Soome ///
1197*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER   0x0000
1198*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER  0x0001
1199*f334afcfSToomas Soome 
1200*f334afcfSToomas Soome ///
1201*f334afcfSToomas Soome /// FPDT Performance Record Revision
1202*f334afcfSToomas Soome ///
1203*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER   0x01
1204*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER  0x01
1205*f334afcfSToomas Soome 
1206*f334afcfSToomas Soome ///
1207*f334afcfSToomas Soome /// FPDT Runtime Performance Record Types
1208*f334afcfSToomas Soome ///
1209*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME            0x0000
1210*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND           0x0001
1211*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT  0x0002
1212*f334afcfSToomas Soome 
1213*f334afcfSToomas Soome ///
1214*f334afcfSToomas Soome /// FPDT Runtime Performance Record Revision
1215*f334afcfSToomas Soome ///
1216*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
1217*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
1218*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
1219*f334afcfSToomas Soome 
1220*f334afcfSToomas Soome ///
1221*f334afcfSToomas Soome /// FPDT Performance Record header
1222*f334afcfSToomas Soome ///
1223*f334afcfSToomas Soome typedef struct {
1224*f334afcfSToomas Soome   UINT16    Type;
1225*f334afcfSToomas Soome   UINT8     Length;
1226*f334afcfSToomas Soome   UINT8     Revision;
1227*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER;
1228*f334afcfSToomas Soome 
1229*f334afcfSToomas Soome ///
1230*f334afcfSToomas Soome /// FPDT Performance Table header
1231*f334afcfSToomas Soome ///
1232*f334afcfSToomas Soome typedef struct {
1233*f334afcfSToomas Soome   UINT32    Signature;
1234*f334afcfSToomas Soome   UINT32    Length;
1235*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_PERFORMANCE_TABLE_HEADER;
1236*f334afcfSToomas Soome 
1237*f334afcfSToomas Soome ///
1238*f334afcfSToomas Soome /// FPDT Firmware Basic Boot Performance Pointer Record Structure
1239*f334afcfSToomas Soome ///
1240*f334afcfSToomas Soome typedef struct {
1241*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1242*f334afcfSToomas Soome   UINT32                                         Reserved;
1243*f334afcfSToomas Soome   ///
1244*f334afcfSToomas Soome   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
1245*f334afcfSToomas Soome   ///
1246*f334afcfSToomas Soome   UINT64                                         BootPerformanceTablePointer;
1247*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
1248*f334afcfSToomas Soome 
1249*f334afcfSToomas Soome ///
1250*f334afcfSToomas Soome /// FPDT S3 Performance Table Pointer Record Structure
1251*f334afcfSToomas Soome ///
1252*f334afcfSToomas Soome typedef struct {
1253*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1254*f334afcfSToomas Soome   UINT32                                         Reserved;
1255*f334afcfSToomas Soome   ///
1256*f334afcfSToomas Soome   /// 64-bit processor-relative physical address of the S3 Performance Table.
1257*f334afcfSToomas Soome   ///
1258*f334afcfSToomas Soome   UINT64                                         S3PerformanceTablePointer;
1259*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
1260*f334afcfSToomas Soome 
1261*f334afcfSToomas Soome ///
1262*f334afcfSToomas Soome /// FPDT Firmware Basic Boot Performance Record Structure
1263*f334afcfSToomas Soome ///
1264*f334afcfSToomas Soome typedef struct {
1265*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1266*f334afcfSToomas Soome   UINT32                                         Reserved;
1267*f334afcfSToomas Soome   ///
1268*f334afcfSToomas Soome   /// Timer value logged at the beginning of firmware image execution.
1269*f334afcfSToomas Soome   /// This may not always be zero or near zero.
1270*f334afcfSToomas Soome   ///
1271*f334afcfSToomas Soome   UINT64                                         ResetEnd;
1272*f334afcfSToomas Soome   ///
1273*f334afcfSToomas Soome   /// Timer value logged just prior to loading the OS boot loader into memory.
1274*f334afcfSToomas Soome   /// For non-UEFI compatible boots, this field must be zero.
1275*f334afcfSToomas Soome   ///
1276*f334afcfSToomas Soome   UINT64                                         OsLoaderLoadImageStart;
1277*f334afcfSToomas Soome   ///
1278*f334afcfSToomas Soome   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
1279*f334afcfSToomas Soome   /// For non-UEFI compatible boots, the timer value logged will be just prior
1280*f334afcfSToomas Soome   /// to the INT 19h handler invocation.
1281*f334afcfSToomas Soome   ///
1282*f334afcfSToomas Soome   UINT64                                         OsLoaderStartImageStart;
1283*f334afcfSToomas Soome   ///
1284*f334afcfSToomas Soome   /// Timer value logged at the point when the OS loader calls the
1285*f334afcfSToomas Soome   /// ExitBootServices function for UEFI compatible firmware.
1286*f334afcfSToomas Soome   /// For non-UEFI compatible boots, this field must be zero.
1287*f334afcfSToomas Soome   ///
1288*f334afcfSToomas Soome   UINT64                                         ExitBootServicesEntry;
1289*f334afcfSToomas Soome   ///
1290*f334afcfSToomas Soome   /// Timer value logged at the point just prior towhen the OS loader gaining
1291*f334afcfSToomas Soome   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
1292*f334afcfSToomas Soome   /// For non-UEFI compatible boots, this field must be zero.
1293*f334afcfSToomas Soome   ///
1294*f334afcfSToomas Soome   UINT64                                         ExitBootServicesExit;
1295*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
1296*f334afcfSToomas Soome 
1297*f334afcfSToomas Soome ///
1298*f334afcfSToomas Soome /// FPDT Firmware Basic Boot Performance Table signature
1299*f334afcfSToomas Soome ///
1300*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
1301*f334afcfSToomas Soome 
1302*f334afcfSToomas Soome //
1303*f334afcfSToomas Soome // FPDT Firmware Basic Boot Performance Table
1304*f334afcfSToomas Soome //
1305*f334afcfSToomas Soome typedef struct {
1306*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_TABLE_HEADER    Header;
1307*f334afcfSToomas Soome   //
1308*f334afcfSToomas Soome   // one or more Performance Records.
1309*f334afcfSToomas Soome   //
1310*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
1311*f334afcfSToomas Soome 
1312*f334afcfSToomas Soome ///
1313*f334afcfSToomas Soome /// FPDT "S3PT" S3 Performance Table
1314*f334afcfSToomas Soome ///
1315*f334afcfSToomas Soome #define EFI_ACPI_6_4_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
1316*f334afcfSToomas Soome 
1317*f334afcfSToomas Soome //
1318*f334afcfSToomas Soome // FPDT Firmware S3 Boot Performance Table
1319*f334afcfSToomas Soome //
1320*f334afcfSToomas Soome typedef struct {
1321*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_TABLE_HEADER    Header;
1322*f334afcfSToomas Soome   //
1323*f334afcfSToomas Soome   // one or more Performance Records.
1324*f334afcfSToomas Soome   //
1325*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_FIRMWARE_S3_BOOT_TABLE;
1326*f334afcfSToomas Soome 
1327*f334afcfSToomas Soome ///
1328*f334afcfSToomas Soome /// FPDT Basic S3 Resume Performance Record
1329*f334afcfSToomas Soome ///
1330*f334afcfSToomas Soome typedef struct {
1331*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1332*f334afcfSToomas Soome   ///
1333*f334afcfSToomas Soome   /// A count of the number of S3 resume cycles since the last full boot sequence.
1334*f334afcfSToomas Soome   ///
1335*f334afcfSToomas Soome   UINT32                                         ResumeCount;
1336*f334afcfSToomas Soome   ///
1337*f334afcfSToomas Soome   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
1338*f334afcfSToomas Soome   /// OS waking vector. Only the most recent resume cycle's time is retained.
1339*f334afcfSToomas Soome   ///
1340*f334afcfSToomas Soome   UINT64                                         FullResume;
1341*f334afcfSToomas Soome   ///
1342*f334afcfSToomas Soome   /// Average timer value of all resume cycles logged since the last full boot
1343*f334afcfSToomas Soome   /// sequence, including the most recent resume.  Note that the entire log of
1344*f334afcfSToomas Soome   /// timer values does not need to be retained in order to calculate this average.
1345*f334afcfSToomas Soome   ///
1346*f334afcfSToomas Soome   UINT64                                         AverageResume;
1347*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_S3_RESUME_RECORD;
1348*f334afcfSToomas Soome 
1349*f334afcfSToomas Soome ///
1350*f334afcfSToomas Soome /// FPDT Basic S3 Suspend Performance Record
1351*f334afcfSToomas Soome ///
1352*f334afcfSToomas Soome typedef struct {
1353*f334afcfSToomas Soome   EFI_ACPI_6_4_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1354*f334afcfSToomas Soome   ///
1355*f334afcfSToomas Soome   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
1356*f334afcfSToomas Soome   /// Only the most recent suspend cycle's timer value is retained.
1357*f334afcfSToomas Soome   ///
1358*f334afcfSToomas Soome   UINT64                                         SuspendStart;
1359*f334afcfSToomas Soome   ///
1360*f334afcfSToomas Soome   /// Timer value recorded at the final firmware write to SLP_TYP (or other
1361*f334afcfSToomas Soome   /// mechanism) used to trigger hardware entry to S3.
1362*f334afcfSToomas Soome   /// Only the most recent suspend cycle's timer value is retained.
1363*f334afcfSToomas Soome   ///
1364*f334afcfSToomas Soome   UINT64                                         SuspendEnd;
1365*f334afcfSToomas Soome } EFI_ACPI_6_4_FPDT_S3_SUSPEND_RECORD;
1366*f334afcfSToomas Soome 
1367*f334afcfSToomas Soome ///
1368*f334afcfSToomas Soome /// Firmware Performance Record Table definition.
1369*f334afcfSToomas Soome ///
1370*f334afcfSToomas Soome typedef struct {
1371*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1372*f334afcfSToomas Soome } EFI_ACPI_6_4_FIRMWARE_PERFORMANCE_RECORD_TABLE;
1373*f334afcfSToomas Soome 
1374*f334afcfSToomas Soome ///
1375*f334afcfSToomas Soome /// Generic Timer Description Table definition.
1376*f334afcfSToomas Soome ///
1377*f334afcfSToomas Soome typedef struct {
1378*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1379*f334afcfSToomas Soome   UINT64                         CntControlBasePhysicalAddress;
1380*f334afcfSToomas Soome   UINT32                         Reserved;
1381*f334afcfSToomas Soome   UINT32                         SecurePL1TimerGSIV;
1382*f334afcfSToomas Soome   UINT32                         SecurePL1TimerFlags;
1383*f334afcfSToomas Soome   UINT32                         NonSecurePL1TimerGSIV;
1384*f334afcfSToomas Soome   UINT32                         NonSecurePL1TimerFlags;
1385*f334afcfSToomas Soome   UINT32                         VirtualTimerGSIV;
1386*f334afcfSToomas Soome   UINT32                         VirtualTimerFlags;
1387*f334afcfSToomas Soome   UINT32                         NonSecurePL2TimerGSIV;
1388*f334afcfSToomas Soome   UINT32                         NonSecurePL2TimerFlags;
1389*f334afcfSToomas Soome   UINT64                         CntReadBasePhysicalAddress;
1390*f334afcfSToomas Soome   UINT32                         PlatformTimerCount;
1391*f334afcfSToomas Soome   UINT32                         PlatformTimerOffset;
1392*f334afcfSToomas Soome   UINT32                         VirtualPL2TimerGSIV;
1393*f334afcfSToomas Soome   UINT32                         VirtualPL2TimerFlags;
1394*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE;
1395*f334afcfSToomas Soome 
1396*f334afcfSToomas Soome ///
1397*f334afcfSToomas Soome /// GTDT Version (as defined in ACPI 6.4 spec.)
1398*f334afcfSToomas Soome ///
1399*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION  0x03
1400*f334afcfSToomas Soome 
1401*f334afcfSToomas Soome ///
1402*f334afcfSToomas Soome /// Timer Flags.  All other bits are reserved and must be 0.
1403*f334afcfSToomas Soome ///
1404*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE      BIT0
1405*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1406*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY      BIT2
1407*f334afcfSToomas Soome 
1408*f334afcfSToomas Soome ///
1409*f334afcfSToomas Soome /// Platform Timer Type
1410*f334afcfSToomas Soome ///
1411*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_GT_BLOCK              0
1412*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_ARM_GENERIC_WATCHDOG  1
1413*f334afcfSToomas Soome 
1414*f334afcfSToomas Soome ///
1415*f334afcfSToomas Soome /// GT Block Structure
1416*f334afcfSToomas Soome ///
1417*f334afcfSToomas Soome typedef struct {
1418*f334afcfSToomas Soome   UINT8     Type;
1419*f334afcfSToomas Soome   UINT16    Length;
1420*f334afcfSToomas Soome   UINT8     Reserved;
1421*f334afcfSToomas Soome   UINT64    CntCtlBase;
1422*f334afcfSToomas Soome   UINT32    GTBlockTimerCount;
1423*f334afcfSToomas Soome   UINT32    GTBlockTimerOffset;
1424*f334afcfSToomas Soome } EFI_ACPI_6_4_GTDT_GT_BLOCK_STRUCTURE;
1425*f334afcfSToomas Soome 
1426*f334afcfSToomas Soome ///
1427*f334afcfSToomas Soome /// GT Block Timer Structure
1428*f334afcfSToomas Soome ///
1429*f334afcfSToomas Soome typedef struct {
1430*f334afcfSToomas Soome   UINT8     GTFrameNumber;
1431*f334afcfSToomas Soome   UINT8     Reserved[3];
1432*f334afcfSToomas Soome   UINT64    CntBaseX;
1433*f334afcfSToomas Soome   UINT64    CntEL0BaseX;
1434*f334afcfSToomas Soome   UINT32    GTxPhysicalTimerGSIV;
1435*f334afcfSToomas Soome   UINT32    GTxPhysicalTimerFlags;
1436*f334afcfSToomas Soome   UINT32    GTxVirtualTimerGSIV;
1437*f334afcfSToomas Soome   UINT32    GTxVirtualTimerFlags;
1438*f334afcfSToomas Soome   UINT32    GTxCommonFlags;
1439*f334afcfSToomas Soome } EFI_ACPI_6_4_GTDT_GT_BLOCK_TIMER_STRUCTURE;
1440*f334afcfSToomas Soome 
1441*f334afcfSToomas Soome ///
1442*f334afcfSToomas Soome /// GT Block Physical Timers and Virtual Timers Flags.  All other bits are reserved and must be 0.
1443*f334afcfSToomas Soome ///
1444*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE      BIT0
1445*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1446*f334afcfSToomas Soome 
1447*f334afcfSToomas Soome ///
1448*f334afcfSToomas Soome /// Common Flags Flags.  All other bits are reserved and must be 0.
1449*f334afcfSToomas Soome ///
1450*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER          BIT0
1451*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY  BIT1
1452*f334afcfSToomas Soome 
1453*f334afcfSToomas Soome ///
1454*f334afcfSToomas Soome /// Arm Generic Watchdog Structure
1455*f334afcfSToomas Soome ///
1456*f334afcfSToomas Soome typedef struct {
1457*f334afcfSToomas Soome   UINT8     Type;
1458*f334afcfSToomas Soome   UINT16    Length;
1459*f334afcfSToomas Soome   UINT8     Reserved;
1460*f334afcfSToomas Soome   UINT64    RefreshFramePhysicalAddress;
1461*f334afcfSToomas Soome   UINT64    WatchdogControlFramePhysicalAddress;
1462*f334afcfSToomas Soome   UINT32    WatchdogTimerGSIV;
1463*f334afcfSToomas Soome   UINT32    WatchdogTimerFlags;
1464*f334afcfSToomas Soome } EFI_ACPI_6_4_GTDT_ARM_GENERIC_WATCHDOG_STRUCTURE;
1465*f334afcfSToomas Soome 
1466*f334afcfSToomas Soome ///
1467*f334afcfSToomas Soome /// Arm Generic Watchdog Timer Flags.  All other bits are reserved and must be 0.
1468*f334afcfSToomas Soome ///
1469*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_ARM_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE      BIT0
1470*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_ARM_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1471*f334afcfSToomas Soome #define EFI_ACPI_6_4_GTDT_ARM_GENERIC_WATCHDOG_FLAG_SECURE_TIMER              BIT2
1472*f334afcfSToomas Soome 
1473*f334afcfSToomas Soome //
1474*f334afcfSToomas Soome // NVDIMM Firmware Interface Table definition.
1475*f334afcfSToomas Soome //
1476*f334afcfSToomas Soome typedef struct {
1477*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1478*f334afcfSToomas Soome   UINT32                         Reserved;
1479*f334afcfSToomas Soome } EFI_ACPI_6_4_NVDIMM_FIRMWARE_INTERFACE_TABLE;
1480*f334afcfSToomas Soome 
1481*f334afcfSToomas Soome //
1482*f334afcfSToomas Soome // NFIT Version (as defined in ACPI 6.4 spec.)
1483*f334afcfSToomas Soome //
1484*f334afcfSToomas Soome #define EFI_ACPI_6_4_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION  0x1
1485*f334afcfSToomas Soome 
1486*f334afcfSToomas Soome //
1487*f334afcfSToomas Soome // Definition for NFIT Table Structure Types
1488*f334afcfSToomas Soome //
1489*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE_TYPE    0
1490*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_NVDIMM_REGION_MAPPING_STRUCTURE_TYPE            1
1491*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_INTERLEAVE_STRUCTURE_TYPE                       2
1492*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE_TYPE    3
1493*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE_TYPE            4
1494*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE_TYPE  5
1495*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE_TYPE               6
1496*f334afcfSToomas Soome 
1497*f334afcfSToomas Soome //
1498*f334afcfSToomas Soome // Definition for NFIT Structure Header
1499*f334afcfSToomas Soome //
1500*f334afcfSToomas Soome typedef struct {
1501*f334afcfSToomas Soome   UINT16    Type;
1502*f334afcfSToomas Soome   UINT16    Length;
1503*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_STRUCTURE_HEADER;
1504*f334afcfSToomas Soome 
1505*f334afcfSToomas Soome //
1506*f334afcfSToomas Soome // Definition for System Physical Address Range Structure
1507*f334afcfSToomas Soome //
1508*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_CONTROL_REGION_FOR_MANAGEMENT  BIT0
1509*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_PROXIMITY_DOMAIN_VALID         BIT1
1510*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_SPA_LOCATION_COOKIE_VALID      BIT2
1511*f334afcfSToomas Soome 
1512*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_VOLATILE_MEMORY_REGION                              { 0x7305944F, 0xFDDA, 0x44E3, { 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0 }}
1513*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_REGION           { 0x66F0D379, 0xB4F3, 0x4074, { 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB }}
1514*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_NVDIMM_CONTROL_REGION                               { 0x92F701F6, 0x13B4, 0x405D, { 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C }}
1515*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_NVDIMM_BLOCK_DATA_WINDOW_REGION                     { 0x91AF0530, 0x5D86, 0x470E, { 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49 }}
1516*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE    { 0x77AB535A, 0x45FC, 0x624B, { 0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E }}
1517*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE      { 0x3D5ABD30, 0x4175, 0x87CE, { 0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB }}
1518*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT  { 0x5CEA02C9, 0x4D07, 0x69D3, { 0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 }}
1519*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT    { 0x08018188, 0x42CD, 0xBB48, { 0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D }}
1520*f334afcfSToomas Soome 
1521*f334afcfSToomas Soome typedef struct {
1522*f334afcfSToomas Soome   UINT16    Type;
1523*f334afcfSToomas Soome   UINT16    Length;
1524*f334afcfSToomas Soome   UINT16    SPARangeStructureIndex;
1525*f334afcfSToomas Soome   UINT16    Flags;
1526*f334afcfSToomas Soome   UINT32    Reserved_8;
1527*f334afcfSToomas Soome   UINT32    ProximityDomain;
1528*f334afcfSToomas Soome   GUID      AddressRangeTypeGUID;
1529*f334afcfSToomas Soome   UINT64    SystemPhysicalAddressRangeBase;
1530*f334afcfSToomas Soome   UINT64    SystemPhysicalAddressRangeLength;
1531*f334afcfSToomas Soome   UINT64    AddressRangeMemoryMappingAttribute;
1532*f334afcfSToomas Soome   UINT64    SPALocationCookie;
1533*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE;
1534*f334afcfSToomas Soome 
1535*f334afcfSToomas Soome //
1536*f334afcfSToomas Soome // Definition for Memory Device to System Physical Address Range Mapping Structure
1537*f334afcfSToomas Soome //
1538*f334afcfSToomas Soome typedef struct {
1539*f334afcfSToomas Soome   UINT32    DIMMNumber          : 4;
1540*f334afcfSToomas Soome   UINT32    MemoryChannelNumber : 4;
1541*f334afcfSToomas Soome   UINT32    MemoryControllerID  : 4;
1542*f334afcfSToomas Soome   UINT32    SocketID            : 4;
1543*f334afcfSToomas Soome   UINT32    NodeControllerID    : 12;
1544*f334afcfSToomas Soome   UINT32    Reserved_28         : 4;
1545*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_DEVICE_HANDLE;
1546*f334afcfSToomas Soome 
1547*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_PREVIOUS_SAVE_FAIL                                      BIT0
1548*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_LAST_RESTORE_FAIL                                       BIT1
1549*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_PLATFORM_FLUSH_FAIL                                     BIT2
1550*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_NOT_ARMED_PRIOR_TO_OSPM_HAND_OFF                        BIT3
1551*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_SMART_HEALTH_EVENTS_PRIOR_OSPM_HAND_OFF                 BIT4
1552*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_ENABLED_TO_NOTIFY_OSPM_ON_SMART_HEALTH_EVENTS  BIT5
1553*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_NOT_MAP_NVDIMM_TO_SPA                          BIT6
1554*f334afcfSToomas Soome 
1555*f334afcfSToomas Soome typedef struct {
1556*f334afcfSToomas Soome   UINT16                             Type;
1557*f334afcfSToomas Soome   UINT16                             Length;
1558*f334afcfSToomas Soome   EFI_ACPI_6_4_NFIT_DEVICE_HANDLE    NFITDeviceHandle;
1559*f334afcfSToomas Soome   UINT16                             NVDIMMPhysicalID;
1560*f334afcfSToomas Soome   UINT16                             NVDIMMRegionID;
1561*f334afcfSToomas Soome   UINT16                             SPARangeStructureIndex;
1562*f334afcfSToomas Soome   UINT16                             NVDIMMControlRegionStructureIndex;
1563*f334afcfSToomas Soome   UINT64                             NVDIMMRegionSize;
1564*f334afcfSToomas Soome   UINT64                             RegionOffset;
1565*f334afcfSToomas Soome   UINT64                             NVDIMMPhysicalAddressRegionBase;
1566*f334afcfSToomas Soome   UINT16                             InterleaveStructureIndex;
1567*f334afcfSToomas Soome   UINT16                             InterleaveWays;
1568*f334afcfSToomas Soome   UINT16                             NVDIMMStateFlags;
1569*f334afcfSToomas Soome   UINT16                             Reserved_46;
1570*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_NVDIMM_REGION_MAPPING_STRUCTURE;
1571*f334afcfSToomas Soome 
1572*f334afcfSToomas Soome //
1573*f334afcfSToomas Soome // Definition for Interleave Structure
1574*f334afcfSToomas Soome //
1575*f334afcfSToomas Soome typedef struct {
1576*f334afcfSToomas Soome   UINT16    Type;
1577*f334afcfSToomas Soome   UINT16    Length;
1578*f334afcfSToomas Soome   UINT16    InterleaveStructureIndex;
1579*f334afcfSToomas Soome   UINT16    Reserved_6;
1580*f334afcfSToomas Soome   UINT32    NumberOfLines;
1581*f334afcfSToomas Soome   UINT32    LineSize;
1582*f334afcfSToomas Soome   // UINT32                                      LineOffset[NumberOfLines];
1583*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_INTERLEAVE_STRUCTURE;
1584*f334afcfSToomas Soome 
1585*f334afcfSToomas Soome //
1586*f334afcfSToomas Soome // Definition for SMBIOS Management Information Structure
1587*f334afcfSToomas Soome //
1588*f334afcfSToomas Soome typedef struct {
1589*f334afcfSToomas Soome   UINT16    Type;
1590*f334afcfSToomas Soome   UINT16    Length;
1591*f334afcfSToomas Soome   UINT32    Reserved_4;
1592*f334afcfSToomas Soome   // UINT8                                       Data[];
1593*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE;
1594*f334afcfSToomas Soome 
1595*f334afcfSToomas Soome //
1596*f334afcfSToomas Soome // Definition for NVDIMM Control Region Structure
1597*f334afcfSToomas Soome //
1598*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_NVDIMM_CONTROL_REGION_VALID_FIELDS_MANUFACTURING  BIT0
1599*f334afcfSToomas Soome 
1600*f334afcfSToomas Soome #define EFI_ACPI_6_4_NFIT_NVDIMM_CONTROL_REGION_FLAGS_BLOCK_DATA_WINDOWS_BUFFERED  BIT0
1601*f334afcfSToomas Soome 
1602*f334afcfSToomas Soome typedef struct {
1603*f334afcfSToomas Soome   UINT16    Type;
1604*f334afcfSToomas Soome   UINT16    Length;
1605*f334afcfSToomas Soome   UINT16    NVDIMMControlRegionStructureIndex;
1606*f334afcfSToomas Soome   UINT16    VendorID;
1607*f334afcfSToomas Soome   UINT16    DeviceID;
1608*f334afcfSToomas Soome   UINT16    RevisionID;
1609*f334afcfSToomas Soome   UINT16    SubsystemVendorID;
1610*f334afcfSToomas Soome   UINT16    SubsystemDeviceID;
1611*f334afcfSToomas Soome   UINT16    SubsystemRevisionID;
1612*f334afcfSToomas Soome   UINT8     ValidFields;
1613*f334afcfSToomas Soome   UINT8     ManufacturingLocation;
1614*f334afcfSToomas Soome   UINT16    ManufacturingDate;
1615*f334afcfSToomas Soome   UINT8     Reserved_22[2];
1616*f334afcfSToomas Soome   UINT32    SerialNumber;
1617*f334afcfSToomas Soome   UINT16    RegionFormatInterfaceCode;
1618*f334afcfSToomas Soome   UINT16    NumberOfBlockControlWindows;
1619*f334afcfSToomas Soome   UINT64    SizeOfBlockControlWindow;
1620*f334afcfSToomas Soome   UINT64    CommandRegisterOffsetInBlockControlWindow;
1621*f334afcfSToomas Soome   UINT64    SizeOfCommandRegisterInBlockControlWindows;
1622*f334afcfSToomas Soome   UINT64    StatusRegisterOffsetInBlockControlWindow;
1623*f334afcfSToomas Soome   UINT64    SizeOfStatusRegisterInBlockControlWindows;
1624*f334afcfSToomas Soome   UINT16    NVDIMMControlRegionFlag;
1625*f334afcfSToomas Soome   UINT8     Reserved_74[6];
1626*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE;
1627*f334afcfSToomas Soome 
1628*f334afcfSToomas Soome //
1629*f334afcfSToomas Soome // Definition for NVDIMM Block Data Window Region Structure
1630*f334afcfSToomas Soome //
1631*f334afcfSToomas Soome typedef struct {
1632*f334afcfSToomas Soome   UINT16    Type;
1633*f334afcfSToomas Soome   UINT16    Length;
1634*f334afcfSToomas Soome   UINT16    NVDIMMControlRegionStructureIndex;
1635*f334afcfSToomas Soome   UINT16    NumberOfBlockDataWindows;
1636*f334afcfSToomas Soome   UINT64    BlockDataWindowStartOffset;
1637*f334afcfSToomas Soome   UINT64    SizeOfBlockDataWindow;
1638*f334afcfSToomas Soome   UINT64    BlockAccessibleMemoryCapacity;
1639*f334afcfSToomas Soome   UINT64    BeginningAddressOfFirstBlockInBlockAccessibleMemory;
1640*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE;
1641*f334afcfSToomas Soome 
1642*f334afcfSToomas Soome //
1643*f334afcfSToomas Soome // Definition for Flush Hint Address Structure
1644*f334afcfSToomas Soome //
1645*f334afcfSToomas Soome typedef struct {
1646*f334afcfSToomas Soome   UINT16                             Type;
1647*f334afcfSToomas Soome   UINT16                             Length;
1648*f334afcfSToomas Soome   EFI_ACPI_6_4_NFIT_DEVICE_HANDLE    NFITDeviceHandle;
1649*f334afcfSToomas Soome   UINT16                             NumberOfFlushHintAddresses;
1650*f334afcfSToomas Soome   UINT8                              Reserved_10[6];
1651*f334afcfSToomas Soome   // UINT64                                      FlushHintAddress[NumberOfFlushHintAddresses];
1652*f334afcfSToomas Soome } EFI_ACPI_6_4_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE;
1653*f334afcfSToomas Soome 
1654*f334afcfSToomas Soome ///
1655*f334afcfSToomas Soome /// Secure DEVices Table (SDEV)
1656*f334afcfSToomas Soome ///
1657*f334afcfSToomas Soome typedef struct {
1658*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1659*f334afcfSToomas Soome } EFI_ACPI_6_4_SECURE_DEVICES_TABLE_HEADER;
1660*f334afcfSToomas Soome 
1661*f334afcfSToomas Soome ///
1662*f334afcfSToomas Soome /// SDEV Revision (as defined in ACPI 6.4 spec.)
1663*f334afcfSToomas Soome ///
1664*f334afcfSToomas Soome #define EFI_ACPI_6_4_SECURE_DEVICES_TABLE_REVISION  0x01
1665*f334afcfSToomas Soome 
1666*f334afcfSToomas Soome ///
1667*f334afcfSToomas Soome /// Secure Device types
1668*f334afcfSToomas Soome ///
1669*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_TYPE_ACPI_NAMESPACE_DEVICE  0x00
1670*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_TYPE_PCIE_ENDPOINT_DEVICE   0x01
1671*f334afcfSToomas Soome 
1672*f334afcfSToomas Soome ///
1673*f334afcfSToomas Soome /// Secure Device flags
1674*f334afcfSToomas Soome ///
1675*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_FLAG_ALLOW_HANDOFF                     BIT0
1676*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_FLAG_SECURE_ACCESS_COMPONENTS_PRESENT  BIT1
1677*f334afcfSToomas Soome 
1678*f334afcfSToomas Soome ///
1679*f334afcfSToomas Soome /// SDEV Structure Header
1680*f334afcfSToomas Soome ///
1681*f334afcfSToomas Soome typedef struct {
1682*f334afcfSToomas Soome   UINT8     Type;
1683*f334afcfSToomas Soome   UINT8     Flags;
1684*f334afcfSToomas Soome   UINT16    Length;
1685*f334afcfSToomas Soome } EFI_ACPI_6_4_SDEV_STRUCTURE_HEADER;
1686*f334afcfSToomas Soome 
1687*f334afcfSToomas Soome ///
1688*f334afcfSToomas Soome /// ACPI_NAMESPACE_DEVICE based Secure Device Structure
1689*f334afcfSToomas Soome ///
1690*f334afcfSToomas Soome typedef struct {
1691*f334afcfSToomas Soome   EFI_ACPI_6_4_SDEV_STRUCTURE_HEADER    Header;
1692*f334afcfSToomas Soome   UINT16                                DeviceIdentifierOffset;
1693*f334afcfSToomas Soome   UINT16                                DeviceIdentifierLength;
1694*f334afcfSToomas Soome   UINT16                                VendorSpecificDataOffset;
1695*f334afcfSToomas Soome   UINT16                                VendorSpecificDataLength;
1696*f334afcfSToomas Soome   UINT16                                SecureAccessComponentsOffset;
1697*f334afcfSToomas Soome   UINT16                                SecureAccessComponentsLength;
1698*f334afcfSToomas Soome } EFI_ACPI_6_4_SDEV_STRUCTURE_ACPI_NAMESPACE_DEVICE;
1699*f334afcfSToomas Soome 
1700*f334afcfSToomas Soome ///
1701*f334afcfSToomas Soome /// Secure Access Component Types
1702*f334afcfSToomas Soome ///
1703*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_SECURE_ACCESS_COMPONENT_TYPE_IDENTIFICATION  0x00
1704*f334afcfSToomas Soome #define EFI_ACPI_6_4_SDEV_SECURE_ACCESS_COMPONENT_TYPE_MEMORY          0x01
1705*f334afcfSToomas Soome 
1706*f334afcfSToomas Soome ///
1707*f334afcfSToomas Soome /// Identification Based Secure Access Component
1708*f334afcfSToomas Soome ///
1709*f334afcfSToomas Soome typedef struct {
1710*f334afcfSToomas Soome   EFI_ACPI_6_4_SDEV_STRUCTURE_HEADER    Header;
1711*f334afcfSToomas Soome   UINT16                                HardwareIdentifierOffset;
1712*f334afcfSToomas Soome   UINT16                                HardwareIdentifierLength;
1713*f334afcfSToomas Soome   UINT16                                SubsystemIdentifierOffset;
1714*f334afcfSToomas Soome   UINT16                                SubsystemIdentifierLength;
1715*f334afcfSToomas Soome   UINT16                                HardwareRevision;
1716*f334afcfSToomas Soome   UINT8                                 HardwareRevisionPresent;
1717*f334afcfSToomas Soome   UINT8                                 ClassCodePresent;
1718*f334afcfSToomas Soome   UINT8                                 PciCompatibleBaseClass;
1719*f334afcfSToomas Soome   UINT8                                 PciCompatibleSubClass;
1720*f334afcfSToomas Soome   UINT8                                 PciCompatibleProgrammingInterface;
1721*f334afcfSToomas Soome } EFI_ACPI_6_4_SDEV_SECURE_ACCESS_COMPONENT_IDENTIFICATION_STRUCTURE;
1722*f334afcfSToomas Soome 
1723*f334afcfSToomas Soome ///
1724*f334afcfSToomas Soome /// Memory-based Secure Access Component
1725*f334afcfSToomas Soome ///
1726*f334afcfSToomas Soome typedef struct {
1727*f334afcfSToomas Soome   EFI_ACPI_6_4_SDEV_STRUCTURE_HEADER    Header;
1728*f334afcfSToomas Soome   UINT32                                Reserved;
1729*f334afcfSToomas Soome   UINT64                                MemoryAddressBase;
1730*f334afcfSToomas Soome   UINT64                                MemoryLength;
1731*f334afcfSToomas Soome } EFI_ACPI_6_4_SDEV_SECURE_ACCESS_COMPONENT_MEMORY_STRUCTURE;
1732*f334afcfSToomas Soome 
1733*f334afcfSToomas Soome ///
1734*f334afcfSToomas Soome /// PCIe Endpoint Device based Secure Device Structure
1735*f334afcfSToomas Soome ///
1736*f334afcfSToomas Soome typedef struct {
1737*f334afcfSToomas Soome   EFI_ACPI_6_4_SDEV_STRUCTURE_HEADER    Header;
1738*f334afcfSToomas Soome   UINT16                                PciSegmentNumber;
1739*f334afcfSToomas Soome   UINT16                                StartBusNumber;
1740*f334afcfSToomas Soome   UINT16                                PciPathOffset;
1741*f334afcfSToomas Soome   UINT16                                PciPathLength;
1742*f334afcfSToomas Soome   UINT16                                VendorSpecificDataOffset;
1743*f334afcfSToomas Soome   UINT16                                VendorSpecificDataLength;
1744*f334afcfSToomas Soome } EFI_ACPI_6_4_SDEV_STRUCTURE_PCIE_ENDPOINT_DEVICE;
1745*f334afcfSToomas Soome 
1746*f334afcfSToomas Soome ///
1747*f334afcfSToomas Soome /// Boot Error Record Table (BERT)
1748*f334afcfSToomas Soome ///
1749*f334afcfSToomas Soome typedef struct {
1750*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1751*f334afcfSToomas Soome   UINT32                         BootErrorRegionLength;
1752*f334afcfSToomas Soome   UINT64                         BootErrorRegion;
1753*f334afcfSToomas Soome } EFI_ACPI_6_4_BOOT_ERROR_RECORD_TABLE_HEADER;
1754*f334afcfSToomas Soome 
1755*f334afcfSToomas Soome ///
1756*f334afcfSToomas Soome /// BERT Version (as defined in ACPI 6.4 spec.)
1757*f334afcfSToomas Soome ///
1758*f334afcfSToomas Soome #define EFI_ACPI_6_4_BOOT_ERROR_RECORD_TABLE_REVISION  0x01
1759*f334afcfSToomas Soome 
1760*f334afcfSToomas Soome ///
1761*f334afcfSToomas Soome /// Boot Error Region Block Status Definition
1762*f334afcfSToomas Soome ///
1763*f334afcfSToomas Soome typedef struct {
1764*f334afcfSToomas Soome   UINT32    UncorrectableErrorValid     : 1;
1765*f334afcfSToomas Soome   UINT32    CorrectableErrorValid       : 1;
1766*f334afcfSToomas Soome   UINT32    MultipleUncorrectableErrors : 1;
1767*f334afcfSToomas Soome   UINT32    MultipleCorrectableErrors   : 1;
1768*f334afcfSToomas Soome   UINT32    ErrorDataEntryCount         : 10;
1769*f334afcfSToomas Soome   UINT32    Reserved                    : 18;
1770*f334afcfSToomas Soome } EFI_ACPI_6_4_ERROR_BLOCK_STATUS;
1771*f334afcfSToomas Soome 
1772*f334afcfSToomas Soome ///
1773*f334afcfSToomas Soome /// Boot Error Region Definition
1774*f334afcfSToomas Soome ///
1775*f334afcfSToomas Soome typedef struct {
1776*f334afcfSToomas Soome   EFI_ACPI_6_4_ERROR_BLOCK_STATUS    BlockStatus;
1777*f334afcfSToomas Soome   UINT32                             RawDataOffset;
1778*f334afcfSToomas Soome   UINT32                             RawDataLength;
1779*f334afcfSToomas Soome   UINT32                             DataLength;
1780*f334afcfSToomas Soome   UINT32                             ErrorSeverity;
1781*f334afcfSToomas Soome } EFI_ACPI_6_4_BOOT_ERROR_REGION_STRUCTURE;
1782*f334afcfSToomas Soome 
1783*f334afcfSToomas Soome //
1784*f334afcfSToomas Soome // Boot Error Severity types
1785*f334afcfSToomas Soome //
1786*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SEVERITY_RECOVERABLE  0x00
1787*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SEVERITY_FATAL        0x01
1788*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SEVERITY_CORRECTED    0x02
1789*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SEVERITY_NONE         0x03
1790*f334afcfSToomas Soome //
1791*f334afcfSToomas Soome // The term 'Correctable' is no longer being used as an error severity of the
1792*f334afcfSToomas Soome // reported error since ACPI Specification Version 5.1 Errata B.
1793*f334afcfSToomas Soome // The below macro is considered as deprecated and should no longer be used.
1794*f334afcfSToomas Soome //
1795*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SEVERITY_CORRECTABLE  0x00
1796*f334afcfSToomas Soome 
1797*f334afcfSToomas Soome ///
1798*f334afcfSToomas Soome /// Generic Error Data Entry Definition
1799*f334afcfSToomas Soome ///
1800*f334afcfSToomas Soome typedef struct {
1801*f334afcfSToomas Soome   UINT8     SectionType[16];
1802*f334afcfSToomas Soome   UINT32    ErrorSeverity;
1803*f334afcfSToomas Soome   UINT16    Revision;
1804*f334afcfSToomas Soome   UINT8     ValidationBits;
1805*f334afcfSToomas Soome   UINT8     Flags;
1806*f334afcfSToomas Soome   UINT32    ErrorDataLength;
1807*f334afcfSToomas Soome   UINT8     FruId[16];
1808*f334afcfSToomas Soome   UINT8     FruText[20];
1809*f334afcfSToomas Soome   UINT8     Timestamp[8];
1810*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
1811*f334afcfSToomas Soome 
1812*f334afcfSToomas Soome ///
1813*f334afcfSToomas Soome /// Generic Error Data Entry Version (as defined in ACPI 6.4 spec.)
1814*f334afcfSToomas Soome ///
1815*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0300
1816*f334afcfSToomas Soome 
1817*f334afcfSToomas Soome ///
1818*f334afcfSToomas Soome /// HEST - Hardware Error Source Table
1819*f334afcfSToomas Soome ///
1820*f334afcfSToomas Soome typedef struct {
1821*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
1822*f334afcfSToomas Soome   UINT32                         ErrorSourceCount;
1823*f334afcfSToomas Soome } EFI_ACPI_6_4_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
1824*f334afcfSToomas Soome 
1825*f334afcfSToomas Soome ///
1826*f334afcfSToomas Soome /// HEST Version (as defined in ACPI 6.4 spec.)
1827*f334afcfSToomas Soome ///
1828*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_SOURCE_TABLE_REVISION  0x01
1829*f334afcfSToomas Soome 
1830*f334afcfSToomas Soome //
1831*f334afcfSToomas Soome // Error Source structure types.
1832*f334afcfSToomas Soome //
1833*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
1834*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
1835*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_NMI_ERROR                0x02
1836*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_EXPRESS_ROOT_PORT_AER                  0x06
1837*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_EXPRESS_DEVICE_AER                     0x07
1838*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_EXPRESS_BRIDGE_AER                     0x08
1839*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_HARDWARE_ERROR                     0x09
1840*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_HARDWARE_ERROR_VERSION_2           0x0A
1841*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_DEFERRED_MACHINE_CHECK   0x0B
1842*f334afcfSToomas Soome 
1843*f334afcfSToomas Soome //
1844*f334afcfSToomas Soome // Error Source structure flags.
1845*f334afcfSToomas Soome //
1846*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SOURCE_FLAG_FIRMWARE_FIRST  (1 << 0)
1847*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SOURCE_FLAG_GLOBAL          (1 << 1)
1848*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_SOURCE_FLAG_GHES_ASSIST     (1 << 2)
1849*f334afcfSToomas Soome 
1850*f334afcfSToomas Soome ///
1851*f334afcfSToomas Soome /// IA-32 Architecture Machine Check Exception Structure Definition
1852*f334afcfSToomas Soome ///
1853*f334afcfSToomas Soome typedef struct {
1854*f334afcfSToomas Soome   UINT16    Type;
1855*f334afcfSToomas Soome   UINT16    SourceId;
1856*f334afcfSToomas Soome   UINT8     Reserved0[2];
1857*f334afcfSToomas Soome   UINT8     Flags;
1858*f334afcfSToomas Soome   UINT8     Enabled;
1859*f334afcfSToomas Soome   UINT32    NumberOfRecordsToPreAllocate;
1860*f334afcfSToomas Soome   UINT32    MaxSectionsPerRecord;
1861*f334afcfSToomas Soome   UINT64    GlobalCapabilityInitData;
1862*f334afcfSToomas Soome   UINT64    GlobalControlInitData;
1863*f334afcfSToomas Soome   UINT8     NumberOfHardwareBanks;
1864*f334afcfSToomas Soome   UINT8     Reserved1[7];
1865*f334afcfSToomas Soome } EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
1866*f334afcfSToomas Soome 
1867*f334afcfSToomas Soome ///
1868*f334afcfSToomas Soome /// IA-32 Architecture Machine Check Bank Structure Definition
1869*f334afcfSToomas Soome ///
1870*f334afcfSToomas Soome typedef struct {
1871*f334afcfSToomas Soome   UINT8     BankNumber;
1872*f334afcfSToomas Soome   UINT8     ClearStatusOnInitialization;
1873*f334afcfSToomas Soome   UINT8     StatusDataFormat;
1874*f334afcfSToomas Soome   UINT8     Reserved0;
1875*f334afcfSToomas Soome   UINT32    ControlRegisterMsrAddress;
1876*f334afcfSToomas Soome   UINT64    ControlInitData;
1877*f334afcfSToomas Soome   UINT32    StatusRegisterMsrAddress;
1878*f334afcfSToomas Soome   UINT32    AddressRegisterMsrAddress;
1879*f334afcfSToomas Soome   UINT32    MiscRegisterMsrAddress;
1880*f334afcfSToomas Soome } EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
1881*f334afcfSToomas Soome 
1882*f334afcfSToomas Soome ///
1883*f334afcfSToomas Soome /// IA-32 Architecture Machine Check Bank Structure MCA data format
1884*f334afcfSToomas Soome ///
1885*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32     0x00
1886*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64  0x01
1887*f334afcfSToomas Soome #define EFI_ACPI_6_4_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64    0x02
1888*f334afcfSToomas Soome 
1889*f334afcfSToomas Soome //
1890*f334afcfSToomas Soome // Hardware Error Notification types. All other values are reserved
1891*f334afcfSToomas Soome //
1892*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_POLLED                        0x00
1893*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT            0x01
1894*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT               0x02
1895*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_SCI                           0x03
1896*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_NMI                           0x04
1897*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_CMCI                          0x05
1898*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_MCE                           0x06
1899*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_GPIO_SIGNAL                   0x07
1900*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_ARMV8_SEA                     0x08
1901*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_ARMV8_SEI                     0x09
1902*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_GSIV                          0x0A
1903*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_SOFTWARE_DELEGATED_EXCEPTION  0x0B
1904*f334afcfSToomas Soome 
1905*f334afcfSToomas Soome ///
1906*f334afcfSToomas Soome /// Hardware Error Notification Configuration Write Enable Structure Definition
1907*f334afcfSToomas Soome ///
1908*f334afcfSToomas Soome typedef struct {
1909*f334afcfSToomas Soome   UINT16    Type                           : 1;
1910*f334afcfSToomas Soome   UINT16    PollInterval                   : 1;
1911*f334afcfSToomas Soome   UINT16    SwitchToPollingThresholdValue  : 1;
1912*f334afcfSToomas Soome   UINT16    SwitchToPollingThresholdWindow : 1;
1913*f334afcfSToomas Soome   UINT16    ErrorThresholdValue            : 1;
1914*f334afcfSToomas Soome   UINT16    ErrorThresholdWindow           : 1;
1915*f334afcfSToomas Soome   UINT16    Reserved                       : 10;
1916*f334afcfSToomas Soome } EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
1917*f334afcfSToomas Soome 
1918*f334afcfSToomas Soome ///
1919*f334afcfSToomas Soome /// Hardware Error Notification Structure Definition
1920*f334afcfSToomas Soome ///
1921*f334afcfSToomas Soome typedef struct {
1922*f334afcfSToomas Soome   UINT8                                                                            Type;
1923*f334afcfSToomas Soome   UINT8                                                                            Length;
1924*f334afcfSToomas Soome   EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE    ConfigurationWriteEnable;
1925*f334afcfSToomas Soome   UINT32                                                                           PollInterval;
1926*f334afcfSToomas Soome   UINT32                                                                           Vector;
1927*f334afcfSToomas Soome   UINT32                                                                           SwitchToPollingThresholdValue;
1928*f334afcfSToomas Soome   UINT32                                                                           SwitchToPollingThresholdWindow;
1929*f334afcfSToomas Soome   UINT32                                                                           ErrorThresholdValue;
1930*f334afcfSToomas Soome   UINT32                                                                           ErrorThresholdWindow;
1931*f334afcfSToomas Soome } EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
1932*f334afcfSToomas Soome 
1933*f334afcfSToomas Soome ///
1934*f334afcfSToomas Soome /// IA-32 Architecture Corrected Machine Check Structure Definition
1935*f334afcfSToomas Soome ///
1936*f334afcfSToomas Soome typedef struct {
1937*f334afcfSToomas Soome   UINT16                                                Type;
1938*f334afcfSToomas Soome   UINT16                                                SourceId;
1939*f334afcfSToomas Soome   UINT8                                                 Reserved0[2];
1940*f334afcfSToomas Soome   UINT8                                                 Flags;
1941*f334afcfSToomas Soome   UINT8                                                 Enabled;
1942*f334afcfSToomas Soome   UINT32                                                NumberOfRecordsToPreAllocate;
1943*f334afcfSToomas Soome   UINT32                                                MaxSectionsPerRecord;
1944*f334afcfSToomas Soome   EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
1945*f334afcfSToomas Soome   UINT8                                                 NumberOfHardwareBanks;
1946*f334afcfSToomas Soome   UINT8                                                 Reserved1[3];
1947*f334afcfSToomas Soome } EFI_ACPI_6_4_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
1948*f334afcfSToomas Soome 
1949*f334afcfSToomas Soome ///
1950*f334afcfSToomas Soome /// IA-32 Architecture NMI Error Structure Definition
1951*f334afcfSToomas Soome ///
1952*f334afcfSToomas Soome typedef struct {
1953*f334afcfSToomas Soome   UINT16    Type;
1954*f334afcfSToomas Soome   UINT16    SourceId;
1955*f334afcfSToomas Soome   UINT8     Reserved0[2];
1956*f334afcfSToomas Soome   UINT32    NumberOfRecordsToPreAllocate;
1957*f334afcfSToomas Soome   UINT32    MaxSectionsPerRecord;
1958*f334afcfSToomas Soome   UINT32    MaxRawDataLength;
1959*f334afcfSToomas Soome } EFI_ACPI_6_4_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
1960*f334afcfSToomas Soome 
1961*f334afcfSToomas Soome ///
1962*f334afcfSToomas Soome /// PCI Express Root Port AER Structure Definition
1963*f334afcfSToomas Soome ///
1964*f334afcfSToomas Soome typedef struct {
1965*f334afcfSToomas Soome   UINT16    Type;
1966*f334afcfSToomas Soome   UINT16    SourceId;
1967*f334afcfSToomas Soome   UINT8     Reserved0[2];
1968*f334afcfSToomas Soome   UINT8     Flags;
1969*f334afcfSToomas Soome   UINT8     Enabled;
1970*f334afcfSToomas Soome   UINT32    NumberOfRecordsToPreAllocate;
1971*f334afcfSToomas Soome   UINT32    MaxSectionsPerRecord;
1972*f334afcfSToomas Soome   UINT32    Bus;
1973*f334afcfSToomas Soome   UINT16    Device;
1974*f334afcfSToomas Soome   UINT16    Function;
1975*f334afcfSToomas Soome   UINT16    DeviceControl;
1976*f334afcfSToomas Soome   UINT8     Reserved1[2];
1977*f334afcfSToomas Soome   UINT32    UncorrectableErrorMask;
1978*f334afcfSToomas Soome   UINT32    UncorrectableErrorSeverity;
1979*f334afcfSToomas Soome   UINT32    CorrectableErrorMask;
1980*f334afcfSToomas Soome   UINT32    AdvancedErrorCapabilitiesAndControl;
1981*f334afcfSToomas Soome   UINT32    RootErrorCommand;
1982*f334afcfSToomas Soome } EFI_ACPI_6_4_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
1983*f334afcfSToomas Soome 
1984*f334afcfSToomas Soome ///
1985*f334afcfSToomas Soome /// PCI Express Device AER Structure Definition
1986*f334afcfSToomas Soome ///
1987*f334afcfSToomas Soome typedef struct {
1988*f334afcfSToomas Soome   UINT16    Type;
1989*f334afcfSToomas Soome   UINT16    SourceId;
1990*f334afcfSToomas Soome   UINT8     Reserved0[2];
1991*f334afcfSToomas Soome   UINT8     Flags;
1992*f334afcfSToomas Soome   UINT8     Enabled;
1993*f334afcfSToomas Soome   UINT32    NumberOfRecordsToPreAllocate;
1994*f334afcfSToomas Soome   UINT32    MaxSectionsPerRecord;
1995*f334afcfSToomas Soome   UINT32    Bus;
1996*f334afcfSToomas Soome   UINT16    Device;
1997*f334afcfSToomas Soome   UINT16    Function;
1998*f334afcfSToomas Soome   UINT16    DeviceControl;
1999*f334afcfSToomas Soome   UINT8     Reserved1[2];
2000*f334afcfSToomas Soome   UINT32    UncorrectableErrorMask;
2001*f334afcfSToomas Soome   UINT32    UncorrectableErrorSeverity;
2002*f334afcfSToomas Soome   UINT32    CorrectableErrorMask;
2003*f334afcfSToomas Soome   UINT32    AdvancedErrorCapabilitiesAndControl;
2004*f334afcfSToomas Soome } EFI_ACPI_6_4_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
2005*f334afcfSToomas Soome 
2006*f334afcfSToomas Soome ///
2007*f334afcfSToomas Soome /// PCI Express Bridge AER Structure Definition
2008*f334afcfSToomas Soome ///
2009*f334afcfSToomas Soome typedef struct {
2010*f334afcfSToomas Soome   UINT16    Type;
2011*f334afcfSToomas Soome   UINT16    SourceId;
2012*f334afcfSToomas Soome   UINT8     Reserved0[2];
2013*f334afcfSToomas Soome   UINT8     Flags;
2014*f334afcfSToomas Soome   UINT8     Enabled;
2015*f334afcfSToomas Soome   UINT32    NumberOfRecordsToPreAllocate;
2016*f334afcfSToomas Soome   UINT32    MaxSectionsPerRecord;
2017*f334afcfSToomas Soome   UINT32    Bus;
2018*f334afcfSToomas Soome   UINT16    Device;
2019*f334afcfSToomas Soome   UINT16    Function;
2020*f334afcfSToomas Soome   UINT16    DeviceControl;
2021*f334afcfSToomas Soome   UINT8     Reserved1[2];
2022*f334afcfSToomas Soome   UINT32    UncorrectableErrorMask;
2023*f334afcfSToomas Soome   UINT32    UncorrectableErrorSeverity;
2024*f334afcfSToomas Soome   UINT32    CorrectableErrorMask;
2025*f334afcfSToomas Soome   UINT32    AdvancedErrorCapabilitiesAndControl;
2026*f334afcfSToomas Soome   UINT32    SecondaryUncorrectableErrorMask;
2027*f334afcfSToomas Soome   UINT32    SecondaryUncorrectableErrorSeverity;
2028*f334afcfSToomas Soome   UINT32    SecondaryAdvancedErrorCapabilitiesAndControl;
2029*f334afcfSToomas Soome } EFI_ACPI_6_4_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
2030*f334afcfSToomas Soome 
2031*f334afcfSToomas Soome ///
2032*f334afcfSToomas Soome /// Generic Hardware Error Source Structure Definition
2033*f334afcfSToomas Soome ///
2034*f334afcfSToomas Soome typedef struct {
2035*f334afcfSToomas Soome   UINT16                                                Type;
2036*f334afcfSToomas Soome   UINT16                                                SourceId;
2037*f334afcfSToomas Soome   UINT16                                                RelatedSourceId;
2038*f334afcfSToomas Soome   UINT8                                                 Flags;
2039*f334afcfSToomas Soome   UINT8                                                 Enabled;
2040*f334afcfSToomas Soome   UINT32                                                NumberOfRecordsToPreAllocate;
2041*f334afcfSToomas Soome   UINT32                                                MaxSectionsPerRecord;
2042*f334afcfSToomas Soome   UINT32                                                MaxRawDataLength;
2043*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE                ErrorStatusAddress;
2044*f334afcfSToomas Soome   EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2045*f334afcfSToomas Soome   UINT32                                                ErrorStatusBlockLength;
2046*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
2047*f334afcfSToomas Soome 
2048*f334afcfSToomas Soome ///
2049*f334afcfSToomas Soome /// Generic Hardware Error Source Version 2 Structure Definition
2050*f334afcfSToomas Soome ///
2051*f334afcfSToomas Soome typedef struct {
2052*f334afcfSToomas Soome   UINT16                                                Type;
2053*f334afcfSToomas Soome   UINT16                                                SourceId;
2054*f334afcfSToomas Soome   UINT16                                                RelatedSourceId;
2055*f334afcfSToomas Soome   UINT8                                                 Flags;
2056*f334afcfSToomas Soome   UINT8                                                 Enabled;
2057*f334afcfSToomas Soome   UINT32                                                NumberOfRecordsToPreAllocate;
2058*f334afcfSToomas Soome   UINT32                                                MaxSectionsPerRecord;
2059*f334afcfSToomas Soome   UINT32                                                MaxRawDataLength;
2060*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE                ErrorStatusAddress;
2061*f334afcfSToomas Soome   EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2062*f334afcfSToomas Soome   UINT32                                                ErrorStatusBlockLength;
2063*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE                ReadAckRegister;
2064*f334afcfSToomas Soome   UINT64                                                ReadAckPreserve;
2065*f334afcfSToomas Soome   UINT64                                                ReadAckWrite;
2066*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_HARDWARE_ERROR_SOURCE_VERSION_2_STRUCTURE;
2067*f334afcfSToomas Soome 
2068*f334afcfSToomas Soome ///
2069*f334afcfSToomas Soome /// Generic Error Status Definition
2070*f334afcfSToomas Soome ///
2071*f334afcfSToomas Soome typedef struct {
2072*f334afcfSToomas Soome   EFI_ACPI_6_4_ERROR_BLOCK_STATUS    BlockStatus;
2073*f334afcfSToomas Soome   UINT32                             RawDataOffset;
2074*f334afcfSToomas Soome   UINT32                             RawDataLength;
2075*f334afcfSToomas Soome   UINT32                             DataLength;
2076*f334afcfSToomas Soome   UINT32                             ErrorSeverity;
2077*f334afcfSToomas Soome } EFI_ACPI_6_4_GENERIC_ERROR_STATUS_STRUCTURE;
2078*f334afcfSToomas Soome 
2079*f334afcfSToomas Soome ///
2080*f334afcfSToomas Soome /// IA-32 Architecture Deferred Machine Check Structure Definition
2081*f334afcfSToomas Soome ///
2082*f334afcfSToomas Soome typedef struct {
2083*f334afcfSToomas Soome   UINT16                                                Type;
2084*f334afcfSToomas Soome   UINT16                                                SourceId;
2085*f334afcfSToomas Soome   UINT8                                                 Reserved0[2];
2086*f334afcfSToomas Soome   UINT8                                                 Flags;
2087*f334afcfSToomas Soome   UINT8                                                 Enabled;
2088*f334afcfSToomas Soome   UINT32                                                NumberOfRecordsToPreAllocate;
2089*f334afcfSToomas Soome   UINT32                                                MaxSectionsPerRecord;
2090*f334afcfSToomas Soome   EFI_ACPI_6_4_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2091*f334afcfSToomas Soome   UINT8                                                 NumberOfHardwareBanks;
2092*f334afcfSToomas Soome   UINT8                                                 Reserved1[3];
2093*f334afcfSToomas Soome } EFI_ACPI_6_4_IA32_ARCHITECTURE_DEFERRED_MACHINE_CHECK_STRUCTURE;
2094*f334afcfSToomas Soome 
2095*f334afcfSToomas Soome ///
2096*f334afcfSToomas Soome /// HMAT - Heterogeneous Memory Attribute Table
2097*f334afcfSToomas Soome ///
2098*f334afcfSToomas Soome typedef struct {
2099*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2100*f334afcfSToomas Soome   UINT8                          Reserved[4];
2101*f334afcfSToomas Soome } EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER;
2102*f334afcfSToomas Soome 
2103*f334afcfSToomas Soome ///
2104*f334afcfSToomas Soome /// HMAT Revision (as defined in ACPI 6.4 spec.)
2105*f334afcfSToomas Soome ///
2106*f334afcfSToomas Soome #define EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION  0x02
2107*f334afcfSToomas Soome 
2108*f334afcfSToomas Soome ///
2109*f334afcfSToomas Soome /// HMAT types
2110*f334afcfSToomas Soome ///
2111*f334afcfSToomas Soome #define EFI_ACPI_6_4_HMAT_TYPE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES          0x00
2112*f334afcfSToomas Soome #define EFI_ACPI_6_4_HMAT_TYPE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO  0x01
2113*f334afcfSToomas Soome #define EFI_ACPI_6_4_HMAT_TYPE_MEMORY_SIDE_CACHE_INFO                      0x02
2114*f334afcfSToomas Soome 
2115*f334afcfSToomas Soome ///
2116*f334afcfSToomas Soome /// HMAT Structure Header
2117*f334afcfSToomas Soome ///
2118*f334afcfSToomas Soome typedef struct {
2119*f334afcfSToomas Soome   UINT16    Type;
2120*f334afcfSToomas Soome   UINT8     Reserved[2];
2121*f334afcfSToomas Soome   UINT32    Length;
2122*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_HEADER;
2123*f334afcfSToomas Soome 
2124*f334afcfSToomas Soome ///
2125*f334afcfSToomas Soome /// Memory Proximity Domain Attributes Structure flags
2126*f334afcfSToomas Soome ///
2127*f334afcfSToomas Soome typedef struct {
2128*f334afcfSToomas Soome   UINT16    InitiatorProximityDomainValid : 1;
2129*f334afcfSToomas Soome   UINT16    Reserved                      : 15;
2130*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES_FLAGS;
2131*f334afcfSToomas Soome 
2132*f334afcfSToomas Soome ///
2133*f334afcfSToomas Soome /// Memory Proximity Domain Attributes Structure
2134*f334afcfSToomas Soome ///
2135*f334afcfSToomas Soome typedef struct {
2136*f334afcfSToomas Soome   UINT16                                                                  Type;
2137*f334afcfSToomas Soome   UINT8                                                                   Reserved[2];
2138*f334afcfSToomas Soome   UINT32                                                                  Length;
2139*f334afcfSToomas Soome   EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES_FLAGS    Flags;
2140*f334afcfSToomas Soome   UINT8                                                                   Reserved1[2];
2141*f334afcfSToomas Soome   UINT32                                                                  InitiatorProximityDomain;
2142*f334afcfSToomas Soome   UINT32                                                                  MemoryProximityDomain;
2143*f334afcfSToomas Soome   UINT8                                                                   Reserved2[20];
2144*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_PROXIMITY_DOMAIN_ATTRIBUTES;
2145*f334afcfSToomas Soome 
2146*f334afcfSToomas Soome ///
2147*f334afcfSToomas Soome /// System Locality Latency and Bandwidth Information Structure flags
2148*f334afcfSToomas Soome ///
2149*f334afcfSToomas Soome typedef struct {
2150*f334afcfSToomas Soome   UINT8    MemoryHierarchy  : 4;
2151*f334afcfSToomas Soome   UINT8    AccessAttributes : 2;
2152*f334afcfSToomas Soome   UINT8    Reserved         : 2;
2153*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS;
2154*f334afcfSToomas Soome 
2155*f334afcfSToomas Soome ///
2156*f334afcfSToomas Soome /// System Locality Latency and Bandwidth Information Structure
2157*f334afcfSToomas Soome ///
2158*f334afcfSToomas Soome typedef struct {
2159*f334afcfSToomas Soome   UINT16                                                                          Type;
2160*f334afcfSToomas Soome   UINT8                                                                           Reserved[2];
2161*f334afcfSToomas Soome   UINT32                                                                          Length;
2162*f334afcfSToomas Soome   EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS    Flags;
2163*f334afcfSToomas Soome   UINT8                                                                           DataType;
2164*f334afcfSToomas Soome   UINT8                                                                           MinTransferSize;
2165*f334afcfSToomas Soome   UINT8                                                                           Reserved1;
2166*f334afcfSToomas Soome   UINT32                                                                          NumberOfInitiatorProximityDomains;
2167*f334afcfSToomas Soome   UINT32                                                                          NumberOfTargetProximityDomains;
2168*f334afcfSToomas Soome   UINT8                                                                           Reserved2[4];
2169*f334afcfSToomas Soome   UINT64                                                                          EntryBaseUnit;
2170*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO;
2171*f334afcfSToomas Soome 
2172*f334afcfSToomas Soome ///
2173*f334afcfSToomas Soome /// Memory Side Cache Information Structure cache attributes
2174*f334afcfSToomas Soome ///
2175*f334afcfSToomas Soome typedef struct {
2176*f334afcfSToomas Soome   UINT32    TotalCacheLevels   : 4;
2177*f334afcfSToomas Soome   UINT32    CacheLevel         : 4;
2178*f334afcfSToomas Soome   UINT32    CacheAssociativity : 4;
2179*f334afcfSToomas Soome   UINT32    WritePolicy        : 4;
2180*f334afcfSToomas Soome   UINT32    CacheLineSize      : 16;
2181*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES;
2182*f334afcfSToomas Soome 
2183*f334afcfSToomas Soome ///
2184*f334afcfSToomas Soome /// Memory Side Cache Information Structure
2185*f334afcfSToomas Soome ///
2186*f334afcfSToomas Soome typedef struct {
2187*f334afcfSToomas Soome   UINT16                                                                 Type;
2188*f334afcfSToomas Soome   UINT8                                                                  Reserved[2];
2189*f334afcfSToomas Soome   UINT32                                                                 Length;
2190*f334afcfSToomas Soome   UINT32                                                                 MemoryProximityDomain;
2191*f334afcfSToomas Soome   UINT8                                                                  Reserved1[4];
2192*f334afcfSToomas Soome   UINT64                                                                 MemorySideCacheSize;
2193*f334afcfSToomas Soome   EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES    CacheAttributes;
2194*f334afcfSToomas Soome   UINT8                                                                  Reserved2[2];
2195*f334afcfSToomas Soome   UINT16                                                                 NumberOfSmbiosHandles;
2196*f334afcfSToomas Soome } EFI_ACPI_6_4_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO;
2197*f334afcfSToomas Soome 
2198*f334afcfSToomas Soome ///
2199*f334afcfSToomas Soome /// ERST - Error Record Serialization Table
2200*f334afcfSToomas Soome ///
2201*f334afcfSToomas Soome typedef struct {
2202*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2203*f334afcfSToomas Soome   UINT32                         SerializationHeaderSize;
2204*f334afcfSToomas Soome   UINT8                          Reserved0[4];
2205*f334afcfSToomas Soome   UINT32                         InstructionEntryCount;
2206*f334afcfSToomas Soome } EFI_ACPI_6_4_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
2207*f334afcfSToomas Soome 
2208*f334afcfSToomas Soome ///
2209*f334afcfSToomas Soome /// ERST Version (as defined in ACPI 6.4 spec.)
2210*f334afcfSToomas Soome ///
2211*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_RECORD_SERIALIZATION_TABLE_REVISION  0x01
2212*f334afcfSToomas Soome 
2213*f334afcfSToomas Soome ///
2214*f334afcfSToomas Soome /// ERST Serialization Actions
2215*f334afcfSToomas Soome ///
2216*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_BEGIN_WRITE_OPERATION                   0x00
2217*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_BEGIN_READ_OPERATION                    0x01
2218*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_BEGIN_CLEAR_OPERATION                   0x02
2219*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_END_OPERATION                           0x03
2220*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SET_RECORD_OFFSET                       0x04
2221*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_EXECUTE_OPERATION                       0x05
2222*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_CHECK_BUSY_STATUS                       0x06
2223*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_COMMAND_STATUS                      0x07
2224*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_RECORD_IDENTIFIER                   0x08
2225*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SET_RECORD_IDENTIFIER                   0x09
2226*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_RECORD_COUNT                        0x0A
2227*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_BEGIN_DUMMY_WRITE_OPERATION             0x0B
2228*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_ERROR_LOG_ADDRESS_RANGE             0x0D
2229*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH      0x0E
2230*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES  0x0F
2231*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GET_EXECUTE_OPERATION_TIMINGS           0x10
2232*f334afcfSToomas Soome 
2233*f334afcfSToomas Soome ///
2234*f334afcfSToomas Soome /// ERST Action Command Status
2235*f334afcfSToomas Soome ///
2236*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_SUCCESS                 0x00
2237*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_NOT_ENOUGH_SPACE        0x01
2238*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_HARDWARE_NOT_AVAILABLE  0x02
2239*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_FAILED                  0x03
2240*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_RECORD_STORE_EMPTY      0x04
2241*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STATUS_RECORD_NOT_FOUND        0x05
2242*f334afcfSToomas Soome 
2243*f334afcfSToomas Soome ///
2244*f334afcfSToomas Soome /// ERST Serialization Instructions
2245*f334afcfSToomas Soome ///
2246*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_READ_REGISTER                  0x00
2247*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_READ_REGISTER_VALUE            0x01
2248*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_WRITE_REGISTER                 0x02
2249*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_WRITE_REGISTER_VALUE           0x03
2250*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_NOOP                           0x04
2251*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_LOAD_VAR1                      0x05
2252*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_LOAD_VAR2                      0x06
2253*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STORE_VAR1                     0x07
2254*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_ADD                            0x08
2255*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SUBTRACT                       0x09
2256*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_ADD_VALUE                      0x0A
2257*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SUBTRACT_VALUE                 0x0B
2258*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STALL                          0x0C
2259*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_STALL_WHILE_TRUE               0x0D
2260*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE  0x0E
2261*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_GOTO                           0x0F
2262*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SET_SRC_ADDRESS_BASE           0x10
2263*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_SET_DST_ADDRESS_BASE           0x11
2264*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_MOVE_DATA                      0x12
2265*f334afcfSToomas Soome 
2266*f334afcfSToomas Soome ///
2267*f334afcfSToomas Soome /// ERST Instruction Flags
2268*f334afcfSToomas Soome ///
2269*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERST_PRESERVE_REGISTER  0x01
2270*f334afcfSToomas Soome 
2271*f334afcfSToomas Soome ///
2272*f334afcfSToomas Soome /// ERST Serialization Instruction Entry
2273*f334afcfSToomas Soome ///
2274*f334afcfSToomas Soome typedef struct {
2275*f334afcfSToomas Soome   UINT8                                     SerializationAction;
2276*f334afcfSToomas Soome   UINT8                                     Instruction;
2277*f334afcfSToomas Soome   UINT8                                     Flags;
2278*f334afcfSToomas Soome   UINT8                                     Reserved0;
2279*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
2280*f334afcfSToomas Soome   UINT64                                    Value;
2281*f334afcfSToomas Soome   UINT64                                    Mask;
2282*f334afcfSToomas Soome } EFI_ACPI_6_4_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
2283*f334afcfSToomas Soome 
2284*f334afcfSToomas Soome ///
2285*f334afcfSToomas Soome /// EINJ - Error Injection Table
2286*f334afcfSToomas Soome ///
2287*f334afcfSToomas Soome typedef struct {
2288*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2289*f334afcfSToomas Soome   UINT32                         InjectionHeaderSize;
2290*f334afcfSToomas Soome   UINT8                          InjectionFlags;
2291*f334afcfSToomas Soome   UINT8                          Reserved0[3];
2292*f334afcfSToomas Soome   UINT32                         InjectionEntryCount;
2293*f334afcfSToomas Soome } EFI_ACPI_6_4_ERROR_INJECTION_TABLE_HEADER;
2294*f334afcfSToomas Soome 
2295*f334afcfSToomas Soome ///
2296*f334afcfSToomas Soome /// EINJ Version (as defined in ACPI 6.4 spec.)
2297*f334afcfSToomas Soome ///
2298*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_INJECTION_TABLE_REVISION  0x01
2299*f334afcfSToomas Soome 
2300*f334afcfSToomas Soome ///
2301*f334afcfSToomas Soome /// EINJ Error Injection Actions
2302*f334afcfSToomas Soome ///
2303*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_BEGIN_INJECTION_OPERATION       0x00
2304*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE  0x01
2305*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_SET_ERROR_TYPE                  0x02
2306*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_GET_ERROR_TYPE                  0x03
2307*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_END_OPERATION                   0x04
2308*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_EXECUTE_OPERATION               0x05
2309*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_CHECK_BUSY_STATUS               0x06
2310*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_GET_COMMAND_STATUS              0x07
2311*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_TRIGGER_ERROR                   0xFF
2312*f334afcfSToomas Soome 
2313*f334afcfSToomas Soome ///
2314*f334afcfSToomas Soome /// EINJ Action Command Status
2315*f334afcfSToomas Soome ///
2316*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_STATUS_SUCCESS          0x00
2317*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_STATUS_UNKNOWN_FAILURE  0x01
2318*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_STATUS_INVALID_ACCESS   0x02
2319*f334afcfSToomas Soome 
2320*f334afcfSToomas Soome ///
2321*f334afcfSToomas Soome /// EINJ Error Type Definition
2322*f334afcfSToomas Soome ///
2323*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PROCESSOR_CORRECTABLE               (1 << 0)
2324*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL    (1 << 1)
2325*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL       (1 << 2)
2326*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_MEMORY_CORRECTABLE                  (1 << 3)
2327*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL       (1 << 4)
2328*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL          (1 << 5)
2329*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE             (1 << 6)
2330*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL  (1 << 7)
2331*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL     (1 << 8)
2332*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PLATFORM_CORRECTABLE                (1 << 9)
2333*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL     (1 << 10)
2334*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL        (1 << 11)
2335*f334afcfSToomas Soome 
2336*f334afcfSToomas Soome ///
2337*f334afcfSToomas Soome /// EINJ Injection Instructions
2338*f334afcfSToomas Soome ///
2339*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_READ_REGISTER         0x00
2340*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_READ_REGISTER_VALUE   0x01
2341*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_WRITE_REGISTER        0x02
2342*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_WRITE_REGISTER_VALUE  0x03
2343*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_NOOP                  0x04
2344*f334afcfSToomas Soome 
2345*f334afcfSToomas Soome ///
2346*f334afcfSToomas Soome /// EINJ Instruction Flags
2347*f334afcfSToomas Soome ///
2348*f334afcfSToomas Soome #define EFI_ACPI_6_4_EINJ_PRESERVE_REGISTER  0x01
2349*f334afcfSToomas Soome 
2350*f334afcfSToomas Soome ///
2351*f334afcfSToomas Soome /// EINJ Injection Instruction Entry
2352*f334afcfSToomas Soome ///
2353*f334afcfSToomas Soome typedef struct {
2354*f334afcfSToomas Soome   UINT8                                     InjectionAction;
2355*f334afcfSToomas Soome   UINT8                                     Instruction;
2356*f334afcfSToomas Soome   UINT8                                     Flags;
2357*f334afcfSToomas Soome   UINT8                                     Reserved0;
2358*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
2359*f334afcfSToomas Soome   UINT64                                    Value;
2360*f334afcfSToomas Soome   UINT64                                    Mask;
2361*f334afcfSToomas Soome } EFI_ACPI_6_4_EINJ_INJECTION_INSTRUCTION_ENTRY;
2362*f334afcfSToomas Soome 
2363*f334afcfSToomas Soome ///
2364*f334afcfSToomas Soome /// EINJ Trigger Action Table
2365*f334afcfSToomas Soome ///
2366*f334afcfSToomas Soome typedef struct {
2367*f334afcfSToomas Soome   UINT32    HeaderSize;
2368*f334afcfSToomas Soome   UINT32    Revision;
2369*f334afcfSToomas Soome   UINT32    TableSize;
2370*f334afcfSToomas Soome   UINT32    EntryCount;
2371*f334afcfSToomas Soome } EFI_ACPI_6_4_EINJ_TRIGGER_ACTION_TABLE;
2372*f334afcfSToomas Soome 
2373*f334afcfSToomas Soome ///
2374*f334afcfSToomas Soome /// Platform Communications Channel Table (PCCT)
2375*f334afcfSToomas Soome ///
2376*f334afcfSToomas Soome typedef struct {
2377*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2378*f334afcfSToomas Soome   UINT32                         Flags;
2379*f334afcfSToomas Soome   UINT64                         Reserved;
2380*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
2381*f334afcfSToomas Soome 
2382*f334afcfSToomas Soome ///
2383*f334afcfSToomas Soome /// PCCT Version (as defined in ACPI 6.4 spec.)
2384*f334afcfSToomas Soome ///
2385*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION  0x02
2386*f334afcfSToomas Soome 
2387*f334afcfSToomas Soome ///
2388*f334afcfSToomas Soome /// PCCT Global Flags
2389*f334afcfSToomas Soome ///
2390*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_FLAGS_PLATFORM_INTERRUPT  BIT0
2391*f334afcfSToomas Soome 
2392*f334afcfSToomas Soome //
2393*f334afcfSToomas Soome // PCCT Subspace type
2394*f334afcfSToomas Soome //
2395*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_GENERIC                        0x00
2396*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS    0x01
2397*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS    0x02
2398*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC                 0x03
2399*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC                 0x04
2400*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_TYPE_5_HW_REGISTERS_COMMUNICATIONS  0x05
2401*f334afcfSToomas Soome 
2402*f334afcfSToomas Soome ///
2403*f334afcfSToomas Soome /// PCC Subspace Structure Header
2404*f334afcfSToomas Soome ///
2405*f334afcfSToomas Soome typedef struct {
2406*f334afcfSToomas Soome   UINT8    Type;
2407*f334afcfSToomas Soome   UINT8    Length;
2408*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_HEADER;
2409*f334afcfSToomas Soome 
2410*f334afcfSToomas Soome ///
2411*f334afcfSToomas Soome /// Generic Communications Subspace Structure
2412*f334afcfSToomas Soome ///
2413*f334afcfSToomas Soome typedef struct {
2414*f334afcfSToomas Soome   UINT8                                     Type;
2415*f334afcfSToomas Soome   UINT8                                     Length;
2416*f334afcfSToomas Soome   UINT8                                     Reserved[6];
2417*f334afcfSToomas Soome   UINT64                                    BaseAddress;
2418*f334afcfSToomas Soome   UINT64                                    AddressLength;
2419*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2420*f334afcfSToomas Soome   UINT64                                    DoorbellPreserve;
2421*f334afcfSToomas Soome   UINT64                                    DoorbellWrite;
2422*f334afcfSToomas Soome   UINT32                                    NominalLatency;
2423*f334afcfSToomas Soome   UINT32                                    MaximumPeriodicAccessRate;
2424*f334afcfSToomas Soome   UINT16                                    MinimumRequestTurnaroundTime;
2425*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_GENERIC;
2426*f334afcfSToomas Soome 
2427*f334afcfSToomas Soome ///
2428*f334afcfSToomas Soome /// Generic Communications Channel Shared Memory Region
2429*f334afcfSToomas Soome ///
2430*f334afcfSToomas Soome 
2431*f334afcfSToomas Soome typedef struct {
2432*f334afcfSToomas Soome   UINT8    Command;
2433*f334afcfSToomas Soome   UINT8    Reserved           : 7;
2434*f334afcfSToomas Soome   UINT8    NotifyOnCompletion : 1;
2435*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
2436*f334afcfSToomas Soome 
2437*f334afcfSToomas Soome typedef struct {
2438*f334afcfSToomas Soome   UINT8    CommandComplete      : 1;
2439*f334afcfSToomas Soome   UINT8    PlatformInterrupt    : 1;
2440*f334afcfSToomas Soome   UINT8    Error                : 1;
2441*f334afcfSToomas Soome   UINT8    PlatformNotification : 1;
2442*f334afcfSToomas Soome   UINT8    Reserved             : 4;
2443*f334afcfSToomas Soome   UINT8    Reserved1;
2444*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
2445*f334afcfSToomas Soome 
2446*f334afcfSToomas Soome typedef struct {
2447*f334afcfSToomas Soome   UINT32                                                    Signature;
2448*f334afcfSToomas Soome   EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
2449*f334afcfSToomas Soome   EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
2450*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
2451*f334afcfSToomas Soome 
2452*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_POLARITY  BIT0
2453*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE      BIT1
2454*f334afcfSToomas Soome 
2455*f334afcfSToomas Soome ///
2456*f334afcfSToomas Soome /// Type 1 HW-Reduced Communications Subspace Structure
2457*f334afcfSToomas Soome ///
2458*f334afcfSToomas Soome typedef struct {
2459*f334afcfSToomas Soome   UINT8                                     Type;
2460*f334afcfSToomas Soome   UINT8                                     Length;
2461*f334afcfSToomas Soome   UINT32                                    PlatformInterrupt;
2462*f334afcfSToomas Soome   UINT8                                     PlatformInterruptFlags;
2463*f334afcfSToomas Soome   UINT8                                     Reserved;
2464*f334afcfSToomas Soome   UINT64                                    BaseAddress;
2465*f334afcfSToomas Soome   UINT64                                    AddressLength;
2466*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2467*f334afcfSToomas Soome   UINT64                                    DoorbellPreserve;
2468*f334afcfSToomas Soome   UINT64                                    DoorbellWrite;
2469*f334afcfSToomas Soome   UINT32                                    NominalLatency;
2470*f334afcfSToomas Soome   UINT32                                    MaximumPeriodicAccessRate;
2471*f334afcfSToomas Soome   UINT16                                    MinimumRequestTurnaroundTime;
2472*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS;
2473*f334afcfSToomas Soome 
2474*f334afcfSToomas Soome ///
2475*f334afcfSToomas Soome /// Type 2 HW-Reduced Communications Subspace Structure
2476*f334afcfSToomas Soome ///
2477*f334afcfSToomas Soome typedef struct {
2478*f334afcfSToomas Soome   UINT8                                     Type;
2479*f334afcfSToomas Soome   UINT8                                     Length;
2480*f334afcfSToomas Soome   UINT32                                    PlatformInterrupt;
2481*f334afcfSToomas Soome   UINT8                                     PlatformInterruptFlags;
2482*f334afcfSToomas Soome   UINT8                                     Reserved;
2483*f334afcfSToomas Soome   UINT64                                    BaseAddress;
2484*f334afcfSToomas Soome   UINT64                                    AddressLength;
2485*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2486*f334afcfSToomas Soome   UINT64                                    DoorbellPreserve;
2487*f334afcfSToomas Soome   UINT64                                    DoorbellWrite;
2488*f334afcfSToomas Soome   UINT32                                    NominalLatency;
2489*f334afcfSToomas Soome   UINT32                                    MaximumPeriodicAccessRate;
2490*f334afcfSToomas Soome   UINT16                                    MinimumRequestTurnaroundTime;
2491*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    PlatformInterruptAckRegister;
2492*f334afcfSToomas Soome   UINT64                                    PlatformInterruptAckPreserve;
2493*f334afcfSToomas Soome   UINT64                                    PlatformInterruptAckWrite;
2494*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS;
2495*f334afcfSToomas Soome 
2496*f334afcfSToomas Soome ///
2497*f334afcfSToomas Soome /// Type 3 Extended PCC Subspace Structure
2498*f334afcfSToomas Soome ///
2499*f334afcfSToomas Soome typedef struct {
2500*f334afcfSToomas Soome   UINT8                                     Type;
2501*f334afcfSToomas Soome   UINT8                                     Length;
2502*f334afcfSToomas Soome   UINT32                                    PlatformInterrupt;
2503*f334afcfSToomas Soome   UINT8                                     PlatformInterruptFlags;
2504*f334afcfSToomas Soome   UINT8                                     Reserved;
2505*f334afcfSToomas Soome   UINT64                                    BaseAddress;
2506*f334afcfSToomas Soome   UINT32                                    AddressLength;
2507*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2508*f334afcfSToomas Soome   UINT64                                    DoorbellPreserve;
2509*f334afcfSToomas Soome   UINT64                                    DoorbellWrite;
2510*f334afcfSToomas Soome   UINT32                                    NominalLatency;
2511*f334afcfSToomas Soome   UINT32                                    MaximumPeriodicAccessRate;
2512*f334afcfSToomas Soome   UINT32                                    MinimumRequestTurnaroundTime;
2513*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    PlatformInterruptAckRegister;
2514*f334afcfSToomas Soome   UINT64                                    PlatformInterruptAckPreserve;
2515*f334afcfSToomas Soome   UINT64                                    PlatformInterruptAckSet;
2516*f334afcfSToomas Soome   UINT8                                     Reserved1[8];
2517*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    CommandCompleteCheckRegister;
2518*f334afcfSToomas Soome   UINT64                                    CommandCompleteCheckMask;
2519*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    CommandCompleteUpdateRegister;
2520*f334afcfSToomas Soome   UINT64                                    CommandCompleteUpdatePreserve;
2521*f334afcfSToomas Soome   UINT64                                    CommandCompleteUpdateSet;
2522*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    ErrorStatusRegister;
2523*f334afcfSToomas Soome   UINT64                                    ErrorStatusMask;
2524*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC;
2525*f334afcfSToomas Soome 
2526*f334afcfSToomas Soome ///
2527*f334afcfSToomas Soome /// Type 4 Extended PCC Subspace Structure
2528*f334afcfSToomas Soome ///
2529*f334afcfSToomas Soome typedef EFI_ACPI_6_4_PCCT_SUBSPACE_3_EXTENDED_PCC EFI_ACPI_6_4_PCCT_SUBSPACE_4_EXTENDED_PCC;
2530*f334afcfSToomas Soome 
2531*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCCT_MASTER_SLAVE_COMMUNICATIONS_CHANNEL_FLAGS_NOTIFY_ON_COMPLETION  BIT0
2532*f334afcfSToomas Soome 
2533*f334afcfSToomas Soome typedef struct {
2534*f334afcfSToomas Soome   UINT32    Signature;
2535*f334afcfSToomas Soome   UINT32    Flags;
2536*f334afcfSToomas Soome   UINT32    Length;
2537*f334afcfSToomas Soome   UINT32    Command;
2538*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_EXTENDED_PCC_SHARED_MEMORY_REGION_HEADER;
2539*f334afcfSToomas Soome 
2540*f334afcfSToomas Soome ///
2541*f334afcfSToomas Soome /// Type 5 HW Registers based Communications Subspace Structure
2542*f334afcfSToomas Soome ///
2543*f334afcfSToomas Soome typedef struct {
2544*f334afcfSToomas Soome   UINT8                                     Type;
2545*f334afcfSToomas Soome   UINT8                                     Length;
2546*f334afcfSToomas Soome   UINT16                                    Version;
2547*f334afcfSToomas Soome   UINT64                                    BaseAddress;
2548*f334afcfSToomas Soome   UINT64                                    SharedMemoryRangeLength;
2549*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2550*f334afcfSToomas Soome   UINT64                                    DoorbellPreserve;
2551*f334afcfSToomas Soome   UINT64                                    DoorbellWrite;
2552*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    CommandCompleteCheckRegister;
2553*f334afcfSToomas Soome   UINT64                                    CommandCompleteCheckMask;
2554*f334afcfSToomas Soome   EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE    ErrorStatusRegister;
2555*f334afcfSToomas Soome   UINT64                                    ErrorStatusMask;
2556*f334afcfSToomas Soome   UINT32                                    NominalLatency;
2557*f334afcfSToomas Soome   UINT32                                    MinimumRequestTurnaroundTime;
2558*f334afcfSToomas Soome } EFI_ACPI_6_4_PCCT_SUBSPACE_5_HW_REGISTERS_COMMUNICATIONS;
2559*f334afcfSToomas Soome 
2560*f334afcfSToomas Soome ///
2561*f334afcfSToomas Soome /// Reduced PCC Subspace Shared Memory Region
2562*f334afcfSToomas Soome ///
2563*f334afcfSToomas Soome typedef struct {
2564*f334afcfSToomas Soome   UINT32    Signature;
2565*f334afcfSToomas Soome   // UINT8       CommunicationSubspace[];
2566*f334afcfSToomas Soome } EFI_6_4_PCCT_REDUCED_PCC_SUBSPACE_SHARED_MEMORY_REGION;
2567*f334afcfSToomas Soome 
2568*f334afcfSToomas Soome ///
2569*f334afcfSToomas Soome /// Platform Debug Trigger Table (PDTT)
2570*f334afcfSToomas Soome ///
2571*f334afcfSToomas Soome typedef struct {
2572*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2573*f334afcfSToomas Soome   UINT8                          TriggerCount;
2574*f334afcfSToomas Soome   UINT8                          Reserved[3];
2575*f334afcfSToomas Soome   UINT32                         TriggerIdentifierArrayOffset;
2576*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_DEBUG_TRIGGER_TABLE_HEADER;
2577*f334afcfSToomas Soome 
2578*f334afcfSToomas Soome ///
2579*f334afcfSToomas Soome /// PDTT Revision (as defined in ACPI 6.4 spec.)
2580*f334afcfSToomas Soome ///
2581*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_DEBUG_TRIGGER_TABLE_REVISION  0x00
2582*f334afcfSToomas Soome 
2583*f334afcfSToomas Soome ///
2584*f334afcfSToomas Soome /// PDTT Platform Communication Channel Identifier Structure
2585*f334afcfSToomas Soome ///
2586*f334afcfSToomas Soome typedef struct {
2587*f334afcfSToomas Soome   UINT16    SubChannelIdentifer : 8;
2588*f334afcfSToomas Soome   UINT16    Runtime             : 1;
2589*f334afcfSToomas Soome   UINT16    WaitForCompletion   : 1;
2590*f334afcfSToomas Soome   UINT16    TriggerOrder        : 1;
2591*f334afcfSToomas Soome   UINT16    Reserved            : 5;
2592*f334afcfSToomas Soome } EFI_ACPI_6_4_PDTT_PCC_IDENTIFIER;
2593*f334afcfSToomas Soome 
2594*f334afcfSToomas Soome ///
2595*f334afcfSToomas Soome /// PCC Commands Codes used by Platform Debug Trigger Table
2596*f334afcfSToomas Soome ///
2597*f334afcfSToomas Soome #define EFI_ACPI_6_4_PDTT_PCC_COMMAND_DOORBELL_ONLY    0x00
2598*f334afcfSToomas Soome #define EFI_ACPI_6_4_PDTT_PCC_COMMAND_VENDOR_SPECIFIC  0x01
2599*f334afcfSToomas Soome 
2600*f334afcfSToomas Soome ///
2601*f334afcfSToomas Soome /// PDTT Platform Communication Channel
2602*f334afcfSToomas Soome ///
2603*f334afcfSToomas Soome typedef EFI_ACPI_6_4_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER EFI_ACPI_6_4_PDTT_PCC;
2604*f334afcfSToomas Soome 
2605*f334afcfSToomas Soome ///
2606*f334afcfSToomas Soome /// Processor Properties Topology Table (PPTT)
2607*f334afcfSToomas Soome ///
2608*f334afcfSToomas Soome typedef struct {
2609*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2610*f334afcfSToomas Soome } EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER;
2611*f334afcfSToomas Soome 
2612*f334afcfSToomas Soome ///
2613*f334afcfSToomas Soome /// PPTT Revision (as defined in ACPI 6.4 spec.)
2614*f334afcfSToomas Soome ///
2615*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION  0x03
2616*f334afcfSToomas Soome 
2617*f334afcfSToomas Soome ///
2618*f334afcfSToomas Soome /// PPTT types
2619*f334afcfSToomas Soome ///
2620*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_TYPE_PROCESSOR  0x00
2621*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_TYPE_CACHE      0x01
2622*f334afcfSToomas Soome 
2623*f334afcfSToomas Soome ///
2624*f334afcfSToomas Soome /// PPTT Structure Header
2625*f334afcfSToomas Soome ///
2626*f334afcfSToomas Soome typedef struct {
2627*f334afcfSToomas Soome   UINT8    Type;
2628*f334afcfSToomas Soome   UINT8    Length;
2629*f334afcfSToomas Soome   UINT8    Reserved[2];
2630*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_HEADER;
2631*f334afcfSToomas Soome 
2632*f334afcfSToomas Soome ///
2633*f334afcfSToomas Soome /// For PPTT struct processor flags
2634*f334afcfSToomas Soome ///
2635*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PACKAGE_NOT_PHYSICAL          0x0
2636*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PACKAGE_PHYSICAL              0x1
2637*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PROCESSOR_ID_INVALID          0x0
2638*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PROCESSOR_ID_VALID            0x1
2639*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PROCESSOR_IS_NOT_THREAD       0x0
2640*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_PROCESSOR_IS_THREAD           0x1
2641*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_NODE_IS_NOT_LEAF              0x0
2642*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_NODE_IS_LEAF                  0x1
2643*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_IMPLEMENTATION_NOT_IDENTICAL  0x0
2644*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_IMPLEMENTATION_IDENTICAL      0x1
2645*f334afcfSToomas Soome 
2646*f334afcfSToomas Soome ///
2647*f334afcfSToomas Soome /// Processor hierarchy node structure flags
2648*f334afcfSToomas Soome ///
2649*f334afcfSToomas Soome typedef struct {
2650*f334afcfSToomas Soome   UINT32    PhysicalPackage         : 1;
2651*f334afcfSToomas Soome   UINT32    AcpiProcessorIdValid    : 1;
2652*f334afcfSToomas Soome   UINT32    ProcessorIsAThread      : 1;
2653*f334afcfSToomas Soome   UINT32    NodeIsALeaf             : 1;
2654*f334afcfSToomas Soome   UINT32    IdenticalImplementation : 1;
2655*f334afcfSToomas Soome   UINT32    Reserved                : 27;
2656*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_PROCESSOR_FLAGS;
2657*f334afcfSToomas Soome 
2658*f334afcfSToomas Soome ///
2659*f334afcfSToomas Soome /// Processor hierarchy node structure
2660*f334afcfSToomas Soome ///
2661*f334afcfSToomas Soome typedef struct {
2662*f334afcfSToomas Soome   UINT8                                          Type;
2663*f334afcfSToomas Soome   UINT8                                          Length;
2664*f334afcfSToomas Soome   UINT8                                          Reserved[2];
2665*f334afcfSToomas Soome   EFI_ACPI_6_4_PPTT_STRUCTURE_PROCESSOR_FLAGS    Flags;
2666*f334afcfSToomas Soome   UINT32                                         Parent;
2667*f334afcfSToomas Soome   UINT32                                         AcpiProcessorId;
2668*f334afcfSToomas Soome   UINT32                                         NumberOfPrivateResources;
2669*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_PROCESSOR;
2670*f334afcfSToomas Soome 
2671*f334afcfSToomas Soome ///
2672*f334afcfSToomas Soome /// For PPTT struct cache flags
2673*f334afcfSToomas Soome ///
2674*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_SIZE_INVALID       0x0
2675*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_SIZE_VALID         0x1
2676*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_NUMBER_OF_SETS_INVALID   0x0
2677*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_NUMBER_OF_SETS_VALID     0x1
2678*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_ASSOCIATIVITY_INVALID    0x0
2679*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_ASSOCIATIVITY_VALID      0x1
2680*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_ALLOCATION_TYPE_INVALID  0x0
2681*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_ALLOCATION_TYPE_VALID    0x1
2682*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_TYPE_INVALID       0x0
2683*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_TYPE_VALID         0x1
2684*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_WRITE_POLICY_INVALID     0x0
2685*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_WRITE_POLICY_VALID       0x1
2686*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_LINE_SIZE_INVALID        0x0
2687*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_LINE_SIZE_VALID          0x1
2688*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_ID_INVALID         0x0
2689*f334afcfSToomas Soome #define EFI_ACPI_6_4_PPTT_CACHE_ID_VALID           0x1
2690*f334afcfSToomas Soome 
2691*f334afcfSToomas Soome ///
2692*f334afcfSToomas Soome /// Cache Type Structure flags
2693*f334afcfSToomas Soome ///
2694*f334afcfSToomas Soome typedef struct {
2695*f334afcfSToomas Soome   UINT32    SizePropertyValid   : 1;
2696*f334afcfSToomas Soome   UINT32    NumberOfSetsValid   : 1;
2697*f334afcfSToomas Soome   UINT32    AssociativityValid  : 1;
2698*f334afcfSToomas Soome   UINT32    AllocationTypeValid : 1;
2699*f334afcfSToomas Soome   UINT32    CacheTypeValid      : 1;
2700*f334afcfSToomas Soome   UINT32    WritePolicyValid    : 1;
2701*f334afcfSToomas Soome   UINT32    LineSizeValid       : 1;
2702*f334afcfSToomas Soome   UINT32    CacheIdValid        : 1;
2703*f334afcfSToomas Soome   UINT32    Reserved            : 24;
2704*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE_FLAGS;
2705*f334afcfSToomas Soome 
2706*f334afcfSToomas Soome ///
2707*f334afcfSToomas Soome /// For cache attributes
2708*f334afcfSToomas Soome ///
2709*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_ALLOCATION_READ             0x0
2710*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_ALLOCATION_WRITE            0x1
2711*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE       0x2
2712*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_CACHE_TYPE_DATA             0x0
2713*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION      0x1
2714*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED          0x2
2715*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK     0x0
2716*f334afcfSToomas Soome #define EFI_ACPI_6_4_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_THROUGH  0x1
2717*f334afcfSToomas Soome 
2718*f334afcfSToomas Soome ///
2719*f334afcfSToomas Soome /// Cache Type Structure cache attributes
2720*f334afcfSToomas Soome ///
2721*f334afcfSToomas Soome typedef struct {
2722*f334afcfSToomas Soome   UINT8    AllocationType : 2;
2723*f334afcfSToomas Soome   UINT8    CacheType      : 2;
2724*f334afcfSToomas Soome   UINT8    WritePolicy    : 1;
2725*f334afcfSToomas Soome   UINT8    Reserved       : 3;
2726*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE_ATTRIBUTES;
2727*f334afcfSToomas Soome 
2728*f334afcfSToomas Soome ///
2729*f334afcfSToomas Soome /// Cache Type Structure
2730*f334afcfSToomas Soome ///
2731*f334afcfSToomas Soome typedef struct {
2732*f334afcfSToomas Soome   UINT8                                           Type;
2733*f334afcfSToomas Soome   UINT8                                           Length;
2734*f334afcfSToomas Soome   UINT8                                           Reserved[2];
2735*f334afcfSToomas Soome   EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE_FLAGS         Flags;
2736*f334afcfSToomas Soome   UINT32                                          NextLevelOfCache;
2737*f334afcfSToomas Soome   UINT32                                          Size;
2738*f334afcfSToomas Soome   UINT32                                          NumberOfSets;
2739*f334afcfSToomas Soome   UINT8                                           Associativity;
2740*f334afcfSToomas Soome   EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE_ATTRIBUTES    Attributes;
2741*f334afcfSToomas Soome   UINT16                                          LineSize;
2742*f334afcfSToomas Soome   UINT32                                          CacheId;
2743*f334afcfSToomas Soome } EFI_ACPI_6_4_PPTT_STRUCTURE_CACHE;
2744*f334afcfSToomas Soome 
2745*f334afcfSToomas Soome ///
2746*f334afcfSToomas Soome /// Platform Health Assessment Table (PHAT) Format
2747*f334afcfSToomas Soome ///
2748*f334afcfSToomas Soome typedef struct {
2749*f334afcfSToomas Soome   EFI_ACPI_DESCRIPTION_HEADER    Header;
2750*f334afcfSToomas Soome   // UINT8                         PlatformTelemetryRecords[];
2751*f334afcfSToomas Soome } EFI_ACPI_6_4_PLATFORM_HEALTH_ASSESSMENT_TABLE;
2752*f334afcfSToomas Soome 
2753*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_HEALTH_ASSESSMENT_TABLE_REVISION  0x01
2754*f334afcfSToomas Soome 
2755*f334afcfSToomas Soome ///
2756*f334afcfSToomas Soome /// PHAT Record Format
2757*f334afcfSToomas Soome ///
2758*f334afcfSToomas Soome typedef struct {
2759*f334afcfSToomas Soome   UINT16    PlatformHealthAssessmentRecordType;
2760*f334afcfSToomas Soome   UINT16    RecordLength;
2761*f334afcfSToomas Soome   UINT8     Revision;
2762*f334afcfSToomas Soome   // UINT8   Data[];
2763*f334afcfSToomas Soome } EFI_ACPI_6_4_PHAT_RECORD;
2764*f334afcfSToomas Soome 
2765*f334afcfSToomas Soome ///
2766*f334afcfSToomas Soome /// PHAT Record Type Format
2767*f334afcfSToomas Soome ///
2768*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_RECORD_TYPE_FIRMWARE_VERSION_DATA_RECORD  0x0000
2769*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_RECORD_TYPE_FIRMWARE_HEALTH_DATA_RECORD   0x0001
2770*f334afcfSToomas Soome 
2771*f334afcfSToomas Soome ///
2772*f334afcfSToomas Soome /// PHAT Version Element
2773*f334afcfSToomas Soome ///
2774*f334afcfSToomas Soome typedef struct {
2775*f334afcfSToomas Soome   GUID      ComponentId;
2776*f334afcfSToomas Soome   UINT64    VersionValue;
2777*f334afcfSToomas Soome   UINT32    ProducerId;
2778*f334afcfSToomas Soome } EFI_ACPI_6_4_PHAT_VERSION_ELEMENT;
2779*f334afcfSToomas Soome 
2780*f334afcfSToomas Soome ///
2781*f334afcfSToomas Soome /// PHAT Firmware Version Data Record
2782*f334afcfSToomas Soome ///
2783*f334afcfSToomas Soome typedef struct {
2784*f334afcfSToomas Soome   UINT16    PlatformRecordType;
2785*f334afcfSToomas Soome   UINT16    RecordLength;
2786*f334afcfSToomas Soome   UINT8     Revision;
2787*f334afcfSToomas Soome   UINT8     Reserved[3];
2788*f334afcfSToomas Soome   UINT32    RecordCount;
2789*f334afcfSToomas Soome   // UINT8   PhatVersionElement[];
2790*f334afcfSToomas Soome } EFI_ACPI_6_4_PHAT_FIRMWARE_VERISON_DATA_RECORD;
2791*f334afcfSToomas Soome 
2792*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_VERSION_DATA_RECORD_REVISION  0x01
2793*f334afcfSToomas Soome 
2794*f334afcfSToomas Soome ///
2795*f334afcfSToomas Soome /// Firmware Health Data Record Structure
2796*f334afcfSToomas Soome ///
2797*f334afcfSToomas Soome typedef struct {
2798*f334afcfSToomas Soome   UINT16    PlatformRecordType;
2799*f334afcfSToomas Soome   UINT16    RecordLength;
2800*f334afcfSToomas Soome   UINT8     Revision;
2801*f334afcfSToomas Soome   UINT16    Reserved;
2802*f334afcfSToomas Soome   UINT8     AmHealthy;
2803*f334afcfSToomas Soome   GUID      DeviceSignature;
2804*f334afcfSToomas Soome   UINT32    DeviceSpecificDataOffset;
2805*f334afcfSToomas Soome   // UINT8   DevicePath[];
2806*f334afcfSToomas Soome   // UINT8   DeviceSpecificData[];
2807*f334afcfSToomas Soome } EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_STRUCTURE;
2808*f334afcfSToomas Soome 
2809*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_REVISION  0x01
2810*f334afcfSToomas Soome 
2811*f334afcfSToomas Soome ///
2812*f334afcfSToomas Soome /// Firmware Health Data Record device health state
2813*f334afcfSToomas Soome ///
2814*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_ERRORS_FOUND     0x00
2815*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_NO_ERRORS_FOUND  0x01
2816*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_UNKNOWN          0x02
2817*f334afcfSToomas Soome #define EFI_ACPI_6_4_PHAT_FIRMWARE_HEALTH_DATA_RECORD_ADVISORY         0x03
2818*f334afcfSToomas Soome 
2819*f334afcfSToomas Soome //
2820*f334afcfSToomas Soome // Known table signatures
2821*f334afcfSToomas Soome //
2822*f334afcfSToomas Soome 
2823*f334afcfSToomas Soome ///
2824*f334afcfSToomas Soome /// "RSD PTR " Root System Description Pointer
2825*f334afcfSToomas Soome ///
2826*f334afcfSToomas Soome #define EFI_ACPI_6_4_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
2827*f334afcfSToomas Soome 
2828*f334afcfSToomas Soome ///
2829*f334afcfSToomas Soome /// "APIC" Multiple APIC Description Table
2830*f334afcfSToomas Soome ///
2831*f334afcfSToomas Soome #define EFI_ACPI_6_4_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
2832*f334afcfSToomas Soome 
2833*f334afcfSToomas Soome ///
2834*f334afcfSToomas Soome /// "BERT" Boot Error Record Table
2835*f334afcfSToomas Soome ///
2836*f334afcfSToomas Soome #define EFI_ACPI_6_4_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
2837*f334afcfSToomas Soome 
2838*f334afcfSToomas Soome ///
2839*f334afcfSToomas Soome /// "BGRT" Boot Graphics Resource Table
2840*f334afcfSToomas Soome ///
2841*f334afcfSToomas Soome #define EFI_ACPI_6_4_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
2842*f334afcfSToomas Soome 
2843*f334afcfSToomas Soome ///
2844*f334afcfSToomas Soome /// "CDIT" Component Distance Information Table
2845*f334afcfSToomas Soome ///
2846*f334afcfSToomas Soome #define EFI_ACPI_6_4_COMPONENT_DISTANCE_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('C', 'D', 'I', 'T')
2847*f334afcfSToomas Soome 
2848*f334afcfSToomas Soome ///
2849*f334afcfSToomas Soome /// "CPEP" Corrected Platform Error Polling Table
2850*f334afcfSToomas Soome ///
2851*f334afcfSToomas Soome #define EFI_ACPI_6_4_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
2852*f334afcfSToomas Soome 
2853*f334afcfSToomas Soome ///
2854*f334afcfSToomas Soome /// "CRAT" Component Resource Attribute Table
2855*f334afcfSToomas Soome ///
2856*f334afcfSToomas Soome #define EFI_ACPI_6_4_COMPONENT_RESOURCE_ATTRIBUTE_TABLE_SIGNATURE  SIGNATURE_32('C', 'R', 'A', 'T')
2857*f334afcfSToomas Soome 
2858*f334afcfSToomas Soome ///
2859*f334afcfSToomas Soome /// "DSDT" Differentiated System Description Table
2860*f334afcfSToomas Soome ///
2861*f334afcfSToomas Soome #define EFI_ACPI_6_4_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
2862*f334afcfSToomas Soome 
2863*f334afcfSToomas Soome ///
2864*f334afcfSToomas Soome /// "ECDT" Embedded Controller Boot Resources Table
2865*f334afcfSToomas Soome ///
2866*f334afcfSToomas Soome #define EFI_ACPI_6_4_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
2867*f334afcfSToomas Soome 
2868*f334afcfSToomas Soome ///
2869*f334afcfSToomas Soome /// "EINJ" Error Injection Table
2870*f334afcfSToomas Soome ///
2871*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
2872*f334afcfSToomas Soome 
2873*f334afcfSToomas Soome ///
2874*f334afcfSToomas Soome /// "ERST" Error Record Serialization Table
2875*f334afcfSToomas Soome ///
2876*f334afcfSToomas Soome #define EFI_ACPI_6_4_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
2877*f334afcfSToomas Soome 
2878*f334afcfSToomas Soome ///
2879*f334afcfSToomas Soome /// "FACP" Fixed ACPI Description Table
2880*f334afcfSToomas Soome ///
2881*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
2882*f334afcfSToomas Soome 
2883*f334afcfSToomas Soome ///
2884*f334afcfSToomas Soome /// "FACS" Firmware ACPI Control Structure
2885*f334afcfSToomas Soome ///
2886*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
2887*f334afcfSToomas Soome 
2888*f334afcfSToomas Soome ///
2889*f334afcfSToomas Soome /// "FPDT" Firmware Performance Data Table
2890*f334afcfSToomas Soome ///
2891*f334afcfSToomas Soome #define EFI_ACPI_6_4_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
2892*f334afcfSToomas Soome 
2893*f334afcfSToomas Soome ///
2894*f334afcfSToomas Soome /// "GTDT" Generic Timer Description Table
2895*f334afcfSToomas Soome ///
2896*f334afcfSToomas Soome #define EFI_ACPI_6_4_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
2897*f334afcfSToomas Soome 
2898*f334afcfSToomas Soome ///
2899*f334afcfSToomas Soome /// "HEST" Hardware Error Source Table
2900*f334afcfSToomas Soome ///
2901*f334afcfSToomas Soome #define EFI_ACPI_6_4_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
2902*f334afcfSToomas Soome 
2903*f334afcfSToomas Soome ///
2904*f334afcfSToomas Soome /// "HMAT" Heterogeneous Memory Attribute Table
2905*f334afcfSToomas Soome ///
2906*f334afcfSToomas Soome #define EFI_ACPI_6_4_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE  SIGNATURE_32('H', 'M', 'A', 'T')
2907*f334afcfSToomas Soome 
2908*f334afcfSToomas Soome ///
2909*f334afcfSToomas Soome /// "MPST" Memory Power State Table
2910*f334afcfSToomas Soome ///
2911*f334afcfSToomas Soome #define EFI_ACPI_6_4_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
2912*f334afcfSToomas Soome 
2913*f334afcfSToomas Soome ///
2914*f334afcfSToomas Soome /// "MSCT" Maximum System Characteristics Table
2915*f334afcfSToomas Soome ///
2916*f334afcfSToomas Soome #define EFI_ACPI_6_4_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
2917*f334afcfSToomas Soome 
2918*f334afcfSToomas Soome ///
2919*f334afcfSToomas Soome /// "NFIT" NVDIMM Firmware Interface Table
2920*f334afcfSToomas Soome ///
2921*f334afcfSToomas Soome #define EFI_ACPI_6_4_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('N', 'F', 'I', 'T')
2922*f334afcfSToomas Soome 
2923*f334afcfSToomas Soome ///
2924*f334afcfSToomas Soome /// "PDTT" Platform Debug Trigger Table
2925*f334afcfSToomas Soome ///
2926*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_DEBUG_TRIGGER_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('P', 'D', 'T', 'T')
2927*f334afcfSToomas Soome 
2928*f334afcfSToomas Soome ///
2929*f334afcfSToomas Soome /// "PMTT" Platform Memory Topology Table
2930*f334afcfSToomas Soome ///
2931*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
2932*f334afcfSToomas Soome 
2933*f334afcfSToomas Soome ///
2934*f334afcfSToomas Soome /// "PPTT" Processor Properties Topology Table
2935*f334afcfSToomas Soome ///
2936*f334afcfSToomas Soome #define EFI_ACPI_6_4_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('P', 'P', 'T', 'T')
2937*f334afcfSToomas Soome 
2938*f334afcfSToomas Soome ///
2939*f334afcfSToomas Soome /// "PSDT" Persistent System Description Table
2940*f334afcfSToomas Soome ///
2941*f334afcfSToomas Soome #define EFI_ACPI_6_4_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
2942*f334afcfSToomas Soome 
2943*f334afcfSToomas Soome ///
2944*f334afcfSToomas Soome /// "RASF" ACPI RAS Feature Table
2945*f334afcfSToomas Soome ///
2946*f334afcfSToomas Soome #define EFI_ACPI_6_4_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
2947*f334afcfSToomas Soome 
2948*f334afcfSToomas Soome ///
2949*f334afcfSToomas Soome /// "RSDT" Root System Description Table
2950*f334afcfSToomas Soome ///
2951*f334afcfSToomas Soome #define EFI_ACPI_6_4_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
2952*f334afcfSToomas Soome 
2953*f334afcfSToomas Soome ///
2954*f334afcfSToomas Soome /// "SBST" Smart Battery Specification Table
2955*f334afcfSToomas Soome ///
2956*f334afcfSToomas Soome #define EFI_ACPI_6_4_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
2957*f334afcfSToomas Soome 
2958*f334afcfSToomas Soome ///
2959*f334afcfSToomas Soome /// "SDEV" Secure DEVices Table
2960*f334afcfSToomas Soome ///
2961*f334afcfSToomas Soome #define EFI_ACPI_6_4_SECURE_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('S', 'D', 'E', 'V')
2962*f334afcfSToomas Soome 
2963*f334afcfSToomas Soome ///
2964*f334afcfSToomas Soome /// "SLIT" System Locality Information Table
2965*f334afcfSToomas Soome ///
2966*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
2967*f334afcfSToomas Soome 
2968*f334afcfSToomas Soome ///
2969*f334afcfSToomas Soome /// "SRAT" System Resource Affinity Table
2970*f334afcfSToomas Soome ///
2971*f334afcfSToomas Soome #define EFI_ACPI_6_4_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
2972*f334afcfSToomas Soome 
2973*f334afcfSToomas Soome ///
2974*f334afcfSToomas Soome /// "SSDT" Secondary System Description Table
2975*f334afcfSToomas Soome ///
2976*f334afcfSToomas Soome #define EFI_ACPI_6_4_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
2977*f334afcfSToomas Soome 
2978*f334afcfSToomas Soome ///
2979*f334afcfSToomas Soome /// "XSDT" Extended System Description Table
2980*f334afcfSToomas Soome ///
2981*f334afcfSToomas Soome #define EFI_ACPI_6_4_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
2982*f334afcfSToomas Soome 
2983*f334afcfSToomas Soome ///
2984*f334afcfSToomas Soome /// "BOOT" MS Simple Boot Spec
2985*f334afcfSToomas Soome ///
2986*f334afcfSToomas Soome #define EFI_ACPI_6_4_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
2987*f334afcfSToomas Soome 
2988*f334afcfSToomas Soome ///
2989*f334afcfSToomas Soome /// "CSRT" MS Core System Resource Table
2990*f334afcfSToomas Soome ///
2991*f334afcfSToomas Soome #define EFI_ACPI_6_4_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
2992*f334afcfSToomas Soome 
2993*f334afcfSToomas Soome ///
2994*f334afcfSToomas Soome /// "DBG2" MS Debug Port 2 Spec
2995*f334afcfSToomas Soome ///
2996*f334afcfSToomas Soome #define EFI_ACPI_6_4_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
2997*f334afcfSToomas Soome 
2998*f334afcfSToomas Soome ///
2999*f334afcfSToomas Soome /// "DBGP" MS Debug Port Spec
3000*f334afcfSToomas Soome ///
3001*f334afcfSToomas Soome #define EFI_ACPI_6_4_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
3002*f334afcfSToomas Soome 
3003*f334afcfSToomas Soome ///
3004*f334afcfSToomas Soome /// "DMAR" DMA Remapping Table
3005*f334afcfSToomas Soome ///
3006*f334afcfSToomas Soome #define EFI_ACPI_6_4_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
3007*f334afcfSToomas Soome 
3008*f334afcfSToomas Soome ///
3009*f334afcfSToomas Soome /// "DRTM" Dynamic Root of Trust for Measurement Table
3010*f334afcfSToomas Soome ///
3011*f334afcfSToomas Soome #define EFI_ACPI_6_4_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
3012*f334afcfSToomas Soome 
3013*f334afcfSToomas Soome ///
3014*f334afcfSToomas Soome /// "ETDT" Event Timer Description Table
3015*f334afcfSToomas Soome ///
3016*f334afcfSToomas Soome #define EFI_ACPI_6_4_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
3017*f334afcfSToomas Soome 
3018*f334afcfSToomas Soome ///
3019*f334afcfSToomas Soome /// "HPET" IA-PC High Precision Event Timer Table
3020*f334afcfSToomas Soome ///
3021*f334afcfSToomas Soome #define EFI_ACPI_6_4_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
3022*f334afcfSToomas Soome 
3023*f334afcfSToomas Soome ///
3024*f334afcfSToomas Soome /// "iBFT" iSCSI Boot Firmware Table
3025*f334afcfSToomas Soome ///
3026*f334afcfSToomas Soome #define EFI_ACPI_6_4_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
3027*f334afcfSToomas Soome 
3028*f334afcfSToomas Soome ///
3029*f334afcfSToomas Soome /// "IORT" I/O Remapping Table
3030*f334afcfSToomas Soome ///
3031*f334afcfSToomas Soome #define EFI_ACPI_6_4_IO_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('I', 'O', 'R', 'T')
3032*f334afcfSToomas Soome 
3033*f334afcfSToomas Soome ///
3034*f334afcfSToomas Soome /// "IVRS" I/O Virtualization Reporting Structure
3035*f334afcfSToomas Soome ///
3036*f334afcfSToomas Soome #define EFI_ACPI_6_4_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
3037*f334afcfSToomas Soome 
3038*f334afcfSToomas Soome ///
3039*f334afcfSToomas Soome /// "LPIT" Low Power Idle Table
3040*f334afcfSToomas Soome ///
3041*f334afcfSToomas Soome #define EFI_ACPI_6_4_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('L', 'P', 'I', 'T')
3042*f334afcfSToomas Soome 
3043*f334afcfSToomas Soome ///
3044*f334afcfSToomas Soome /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
3045*f334afcfSToomas Soome ///
3046*f334afcfSToomas Soome #define EFI_ACPI_6_4_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
3047*f334afcfSToomas Soome 
3048*f334afcfSToomas Soome ///
3049*f334afcfSToomas Soome /// "MCHI" Management Controller Host Interface Table
3050*f334afcfSToomas Soome ///
3051*f334afcfSToomas Soome #define EFI_ACPI_6_4_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
3052*f334afcfSToomas Soome 
3053*f334afcfSToomas Soome ///
3054*f334afcfSToomas Soome /// "MSDM" MS Data Management Table
3055*f334afcfSToomas Soome ///
3056*f334afcfSToomas Soome #define EFI_ACPI_6_4_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
3057*f334afcfSToomas Soome 
3058*f334afcfSToomas Soome ///
3059*f334afcfSToomas Soome /// "PCCT" Platform Communications Channel Table
3060*f334afcfSToomas Soome ///
3061*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE  SIGNATURE_32('P', 'C', 'C', 'T')
3062*f334afcfSToomas Soome 
3063*f334afcfSToomas Soome ///
3064*f334afcfSToomas Soome /// "PHAT" Platform Health Assessment Table
3065*f334afcfSToomas Soome ///
3066*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_HEALTH_ASSESSMENT_TABLE_SIGNATURE  SIGNATURE_32('P', 'H', 'A', 'T')
3067*f334afcfSToomas Soome 
3068*f334afcfSToomas Soome ///
3069*f334afcfSToomas Soome /// "SDEI" Software Delegated Exceptions Interface Table
3070*f334afcfSToomas Soome ///
3071*f334afcfSToomas Soome #define EFI_ACPI_6_4_SOFTWARE_DELEGATED_EXCEPTIONS_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'D', 'E', 'I')
3072*f334afcfSToomas Soome 
3073*f334afcfSToomas Soome ///
3074*f334afcfSToomas Soome /// "SLIC" MS Software Licensing Table Specification
3075*f334afcfSToomas Soome ///
3076*f334afcfSToomas Soome #define EFI_ACPI_6_4_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
3077*f334afcfSToomas Soome 
3078*f334afcfSToomas Soome ///
3079*f334afcfSToomas Soome /// "SPCR" Serial Port Concole Redirection Table
3080*f334afcfSToomas Soome ///
3081*f334afcfSToomas Soome #define EFI_ACPI_6_4_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
3082*f334afcfSToomas Soome 
3083*f334afcfSToomas Soome ///
3084*f334afcfSToomas Soome /// "SPMI" Server Platform Management Interface Table
3085*f334afcfSToomas Soome ///
3086*f334afcfSToomas Soome #define EFI_ACPI_6_4_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
3087*f334afcfSToomas Soome 
3088*f334afcfSToomas Soome ///
3089*f334afcfSToomas Soome /// "STAO" _STA Override Table
3090*f334afcfSToomas Soome ///
3091*f334afcfSToomas Soome #define EFI_ACPI_6_4_STA_OVERRIDE_TABLE_SIGNATURE  SIGNATURE_32('S', 'T', 'A', 'O')
3092*f334afcfSToomas Soome 
3093*f334afcfSToomas Soome ///
3094*f334afcfSToomas Soome /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
3095*f334afcfSToomas Soome ///
3096*f334afcfSToomas Soome #define EFI_ACPI_6_4_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
3097*f334afcfSToomas Soome 
3098*f334afcfSToomas Soome ///
3099*f334afcfSToomas Soome /// "TPM2" Trusted Computing Platform 1 Table
3100*f334afcfSToomas Soome ///
3101*f334afcfSToomas Soome #define EFI_ACPI_6_4_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
3102*f334afcfSToomas Soome 
3103*f334afcfSToomas Soome ///
3104*f334afcfSToomas Soome /// "UEFI" UEFI ACPI Data Table
3105*f334afcfSToomas Soome ///
3106*f334afcfSToomas Soome #define EFI_ACPI_6_4_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
3107*f334afcfSToomas Soome 
3108*f334afcfSToomas Soome ///
3109*f334afcfSToomas Soome /// "WAET" Windows ACPI Emulated Devices Table
3110*f334afcfSToomas Soome ///
3111*f334afcfSToomas Soome #define EFI_ACPI_6_4_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
3112*f334afcfSToomas Soome 
3113*f334afcfSToomas Soome ///
3114*f334afcfSToomas Soome /// "WDAT" Watchdog Action Table
3115*f334afcfSToomas Soome ///
3116*f334afcfSToomas Soome #define EFI_ACPI_6_4_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
3117*f334afcfSToomas Soome 
3118*f334afcfSToomas Soome ///
3119*f334afcfSToomas Soome /// "WDRT" Watchdog Resource Table
3120*f334afcfSToomas Soome ///
3121*f334afcfSToomas Soome #define EFI_ACPI_6_4_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
3122*f334afcfSToomas Soome 
3123*f334afcfSToomas Soome ///
3124*f334afcfSToomas Soome /// "WPBT" MS Platform Binary Table
3125*f334afcfSToomas Soome ///
3126*f334afcfSToomas Soome #define EFI_ACPI_6_4_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
3127*f334afcfSToomas Soome 
3128*f334afcfSToomas Soome ///
3129*f334afcfSToomas Soome /// "WSMT" Windows SMM Security Mitigation Table
3130*f334afcfSToomas Soome ///
3131*f334afcfSToomas Soome #define EFI_ACPI_6_4_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE  SIGNATURE_32('W', 'S', 'M', 'T')
3132*f334afcfSToomas Soome 
3133*f334afcfSToomas Soome ///
3134*f334afcfSToomas Soome /// "XENV" Xen Project Table
3135*f334afcfSToomas Soome ///
3136*f334afcfSToomas Soome #define EFI_ACPI_6_4_XEN_PROJECT_TABLE_SIGNATURE  SIGNATURE_32('X', 'E', 'N', 'V')
3137*f334afcfSToomas Soome 
3138*f334afcfSToomas Soome #pragma pack()
3139*f334afcfSToomas Soome 
3140*f334afcfSToomas Soome #endif
3141