1 /**
2 	Based on IndustryStandard/Acpi60.h, original notice:
3 
4 	ACPI 6.0 definitions from the ACPI Specification Revision 6.0 April, 2015.
5 	
6 	Copyright (c) 2015, Intel Corporation. All rights reserved.
7 	This program and the accompanying materials
8 	are licensed and made available under the terms and conditions of the BSD License
9 	which accompanies this distribution.  The full text of the license may be found at
10 	http://opensource.org/licenses/bsd-license.php
11 	
12 	THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 	WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 **/
15 module uefi.acpi60;
16 import uefi.base;
17 import uefi.base_type;
18 import uefi.acpiaml;
19 import uefi.acpi10;
20 import uefi.acpi20;
21 import uefi.acpi30;
22 import uefi.acpi40;
23 import uefi.acpi50;
24 import uefi.acpi51;
25 
26 public:
27 extern (C):
28 
29 /// ACPI 6.0 Generic Address Space definition
30 struct EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE
31 {
32 align(1):
33     UINT8 AddressSpaceId;
34     UINT8 RegisterBitWidth;
35     UINT8 RegisterBitOffset;
36     UINT8 AccessSize;
37     UINT64 Address;
38 }
39 
40 enum EFI_ACPI_6_0_SYSTEM_MEMORY = 0;
41 enum EFI_ACPI_6_0_SYSTEM_IO = 1;
42 enum EFI_ACPI_6_0_PCI_CONFIGURATION_SPACE = 2;
43 enum EFI_ACPI_6_0_EMBEDDED_CONTROLLER = 3;
44 enum EFI_ACPI_6_0_SMBUS = 4;
45 enum EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL = 0x0A;
46 enum EFI_ACPI_6_0_FUNCTIONAL_FIXED_HARDWARE = 0x7F;
47 enum EFI_ACPI_6_0_UNDEFINED = 0;
48 enum EFI_ACPI_6_0_BYTE = 1;
49 enum EFI_ACPI_6_0_WORD = 2;
50 enum EFI_ACPI_6_0_DWORD = 3;
51 enum EFI_ACPI_6_0_QWORD = 4;
52 /// Root System Description Pointer Structure
53 struct EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER
54 {
55 align(1):
56     UINT64 Signature;
57     UINT8 Checksum;
58     UINT8[6] OemId;
59     UINT8 Revision;
60     UINT32 RsdtAddress;
61     UINT32 Length;
62     UINT64 XsdtAddress;
63     UINT8 ExtendedChecksum;
64     UINT8[3] Reserved;
65 }
66 /// RSD_PTR Revision (as defined in ACPI 6.0 spec.)
67 enum EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION = 0x02; ///< ACPISpec (Revision 6.0) says current value is 2 
68 /// Common table header, this prefaces all ACPI tables, including FACS, but
69 /// excluding the RSD PTR structure
70 struct EFI_ACPI_6_0_COMMON_HEADER
71 {
72 align(1):
73     UINT32 Signature;
74     UINT32 Length;
75 }
76 /// RSDT Revision (as defined in ACPI 6.0 spec.)
77 enum EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION = 0x01;
78 /// XSDT Revision (as defined in ACPI 6.0 spec.)
79 enum EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION = 0x01;
80 /// Fixed ACPI Description Table Structure (FADT)
81 struct EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE
82 {
83 align(1):
84     EFI_ACPI_DESCRIPTION_HEADER Header;
85     UINT32 FirmwareCtrl;
86     UINT32 Dsdt;
87     UINT8 Reserved0;
88     UINT8 PreferredPmProfile;
89     UINT16 SciInt;
90     UINT32 SmiCmd;
91     UINT8 AcpiEnable;
92     UINT8 AcpiDisable;
93     UINT8 S4BiosReq;
94     UINT8 PstateCnt;
95     UINT32 Pm1aEvtBlk;
96     UINT32 Pm1bEvtBlk;
97     UINT32 Pm1aCntBlk;
98     UINT32 Pm1bCntBlk;
99     UINT32 Pm2CntBlk;
100     UINT32 PmTmrBlk;
101     UINT32 Gpe0Blk;
102     UINT32 Gpe1Blk;
103     UINT8 Pm1EvtLen;
104     UINT8 Pm1CntLen;
105     UINT8 Pm2CntLen;
106     UINT8 PmTmrLen;
107     UINT8 Gpe0BlkLen;
108     UINT8 Gpe1BlkLen;
109     UINT8 Gpe1Base;
110     UINT8 CstCnt;
111     UINT16 PLvl2Lat;
112     UINT16 PLvl3Lat;
113     UINT16 FlushSize;
114     UINT16 FlushStride;
115     UINT8 DutyOffset;
116     UINT8 DutyWidth;
117     UINT8 DayAlrm;
118     UINT8 MonAlrm;
119     UINT8 Century;
120     UINT16 IaPcBootArch;
121     UINT8 Reserved1;
122     UINT32 Flags;
123     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE ResetReg;
124     UINT8 ResetValue;
125     UINT16 ArmBootArch;
126     UINT8 MinorVersion;
127     UINT64 XFirmwareCtrl;
128     UINT64 XDsdt;
129     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk;
130     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk;
131     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk;
132     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk;
133     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk;
134     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk;
135     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XGpe0Blk;
136     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE XGpe1Blk;
137     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE SleepControlReg;
138     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE SleepStatusReg;
139     UINT64 HypervisorVendorIdentity;
140 }
141 /// FADT Version (as defined in ACPI 6.0 spec.)
142 enum EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION = 0x06;
143 enum EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION = 0x00;
144 enum EFI_ACPI_6_0_PM_PROFILE_UNSPECIFIED = 0;
145 enum EFI_ACPI_6_0_PM_PROFILE_DESKTOP = 1;
146 enum EFI_ACPI_6_0_PM_PROFILE_MOBILE = 2;
147 enum EFI_ACPI_6_0_PM_PROFILE_WORKSTATION = 3;
148 enum EFI_ACPI_6_0_PM_PROFILE_ENTERPRISE_SERVER = 4;
149 enum EFI_ACPI_6_0_PM_PROFILE_SOHO_SERVER = 5;
150 enum EFI_ACPI_6_0_PM_PROFILE_APPLIANCE_PC = 6;
151 enum EFI_ACPI_6_0_PM_PROFILE_PERFORMANCE_SERVER = 7;
152 enum EFI_ACPI_6_0_PM_PROFILE_TABLET = 8;
153 enum EFI_ACPI_6_0_LEGACY_DEVICES = BIT0;
154 enum EFI_ACPI_6_0_8042 = BIT1;
155 enum EFI_ACPI_6_0_VGA_NOT_PRESENT = BIT2;
156 enum EFI_ACPI_6_0_MSI_NOT_SUPPORTED = BIT3;
157 enum EFI_ACPI_6_0_PCIE_ASPM_CONTROLS = BIT4;
158 enum EFI_ACPI_6_0_CMOS_RTC_NOT_PRESENT = BIT5;
159 enum EFI_ACPI_6_0_ARM_PSCI_COMPLIANT = BIT0;
160 enum EFI_ACPI_6_0_ARM_PSCI_USE_HVC = BIT1;
161 enum EFI_ACPI_6_0_WBINVD = BIT0;
162 enum EFI_ACPI_6_0_WBINVD_FLUSH = BIT1;
163 enum EFI_ACPI_6_0_PROC_C1 = BIT2;
164 enum EFI_ACPI_6_0_P_LVL2_UP = BIT3;
165 enum EFI_ACPI_6_0_PWR_BUTTON = BIT4;
166 enum EFI_ACPI_6_0_SLP_BUTTON = BIT5;
167 enum EFI_ACPI_6_0_FIX_RTC = BIT6;
168 enum EFI_ACPI_6_0_RTC_S4 = BIT7;
169 enum EFI_ACPI_6_0_TMR_VAL_EXT = BIT8;
170 enum EFI_ACPI_6_0_DCK_CAP = BIT9;
171 enum EFI_ACPI_6_0_RESET_REG_SUP = BIT10;
172 enum EFI_ACPI_6_0_SEALED_CASE = BIT11;
173 enum EFI_ACPI_6_0_HEADLESS = BIT12;
174 enum EFI_ACPI_6_0_CPU_SW_SLP = BIT13;
175 enum EFI_ACPI_6_0_PCI_EXP_WAK = BIT14;
176 enum EFI_ACPI_6_0_USE_PLATFORM_CLOCK = BIT15;
177 enum EFI_ACPI_6_0_S4_RTC_STS_VALID = BIT16;
178 enum EFI_ACPI_6_0_REMOTE_POWER_ON_CAPABLE = BIT17;
179 enum EFI_ACPI_6_0_FORCE_APIC_CLUSTER_MODEL = BIT18;
180 enum EFI_ACPI_6_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE = BIT19;
181 enum EFI_ACPI_6_0_HW_REDUCED_ACPI = BIT20;
182 enum EFI_ACPI_6_0_LOW_POWER_S0_IDLE_CAPABLE = BIT21;
183 /// Firmware ACPI Control Structure
184 struct EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE
185 {
186 align(1):
187     UINT32 Signature;
188     UINT32 Length;
189     UINT32 HardwareSignature;
190     UINT32 FirmwareWakingVector;
191     UINT32 GlobalLock;
192     UINT32 Flags;
193     UINT64 XFirmwareWakingVector;
194     UINT8 Version;
195     UINT8[3] Reserved0;
196     UINT32 OspmFlags;
197     UINT8[24] Reserved1;
198 }
199 /// FACS Version (as defined in ACPI 6.0 spec.)
200 enum EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION = 0x02;
201 /// Firmware Control Structure Feature Flags
202 /// All other bits are reserved and must be set to 0.
203 enum EFI_ACPI_6_0_S4BIOS_F = BIT0;
204 enum EFI_ACPI_6_0_64BIT_WAKE_SUPPORTED_F = BIT1;
205 /// OSPM Enabled Firmware Control Structure Flags
206 /// All other bits are reserved and must be set to 0.
207 enum EFI_ACPI_6_0_OSPM_64BIT_WAKE_F = BIT0;
208 enum EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION = 0x02;
209 enum EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION = 0x02;
210 /// Multiple APIC Description Table header definition.  The rest of the table
211 /// must be defined in a platform specific manner.
212 struct EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER
213 {
214 align(1):
215     EFI_ACPI_DESCRIPTION_HEADER Header;
216     UINT32 LocalApicAddress;
217     UINT32 Flags;
218 }
219 /// MADT Revision (as defined in ACPI 6.0 spec.)
220 enum EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION = 0x03;
221 /// Multiple APIC Flags
222 /// All other bits are reserved and must be set to 0.
223 enum EFI_ACPI_6_0_PCAT_COMPAT = BIT0;
224 enum EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC = 0x00;
225 enum EFI_ACPI_6_0_IO_APIC = 0x01;
226 enum EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE = 0x02;
227 enum EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE = 0x03;
228 enum EFI_ACPI_6_0_LOCAL_APIC_NMI = 0x04;
229 enum EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE = 0x05;
230 enum EFI_ACPI_6_0_IO_SAPIC = 0x06;
231 enum EFI_ACPI_6_0_LOCAL_SAPIC = 0x07;
232 enum EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES = 0x08;
233 enum EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC = 0x09;
234 enum EFI_ACPI_6_0_LOCAL_X2APIC_NMI = 0x0A;
235 enum EFI_ACPI_6_0_GIC = 0x0B;
236 enum EFI_ACPI_6_0_GICD = 0x0C;
237 enum EFI_ACPI_6_0_GIC_MSI_FRAME = 0x0D;
238 enum EFI_ACPI_6_0_GICR = 0x0E;
239 enum EFI_ACPI_6_0_GIC_ITS = 0x0F;
240 /// Processor Local APIC Structure Definition
241 struct EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_STRUCTURE
242 {
243 align(1):
244     UINT8 Type;
245     UINT8 Length;
246     UINT8 AcpiProcessorUid;
247     UINT8 ApicId;
248     UINT32 Flags;
249 }
250 /// Local APIC Flags.  All other bits are reserved and must be 0.
251 enum EFI_ACPI_6_0_LOCAL_APIC_ENABLED = BIT0;
252 /// IO APIC Structure
253 struct EFI_ACPI_6_0_IO_APIC_STRUCTURE
254 {
255 align(1):
256     UINT8 Type;
257     UINT8 Length;
258     UINT8 IoApicId;
259     UINT8 Reserved;
260     UINT32 IoApicAddress;
261     UINT32 GlobalSystemInterruptBase;
262 }
263 /// Interrupt Source Override Structure
264 struct EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE
265 {
266 align(1):
267     UINT8 Type;
268     UINT8 Length;
269     UINT8 Bus;
270     UINT8 Source;
271     UINT32 GlobalSystemInterrupt;
272     UINT16 Flags;
273 }
274 /// Platform Interrupt Sources Structure Definition
275 struct EFI_ACPI_6_0_PLATFORM_INTERRUPT_APIC_STRUCTURE
276 {
277 align(1):
278     UINT8 Type;
279     UINT8 Length;
280     UINT16 Flags;
281     UINT8 InterruptType;
282     UINT8 ProcessorId;
283     UINT8 ProcessorEid;
284     UINT8 IoSapicVector;
285     UINT32 GlobalSystemInterrupt;
286     UINT32 PlatformInterruptSourceFlags;
287     UINT8 CpeiProcessorOverride;
288     UINT8[31] Reserved;
289 }
290 
291 enum EFI_ACPI_6_0_POLARITY = (3 << 0);
292 enum EFI_ACPI_6_0_TRIGGER_MODE = (3 << 2);
293 /// Non-Maskable Interrupt Source Structure
294 struct EFI_ACPI_6_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE
295 {
296 align(1):
297     UINT8 Type;
298     UINT8 Length;
299     UINT16 Flags;
300     UINT32 GlobalSystemInterrupt;
301 }
302 /// Local APIC NMI Structure
303 struct EFI_ACPI_6_0_LOCAL_APIC_NMI_STRUCTURE
304 {
305 align(1):
306     UINT8 Type;
307     UINT8 Length;
308     UINT8 AcpiProcessorUid;
309     UINT16 Flags;
310     UINT8 LocalApicLint;
311 }
312 /// Local APIC Address Override Structure
313 struct EFI_ACPI_6_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE
314 {
315 align(1):
316     UINT8 Type;
317     UINT8 Length;
318     UINT16 Reserved;
319     UINT64 LocalApicAddress;
320 }
321 /// IO SAPIC Structure
322 struct EFI_ACPI_6_0_IO_SAPIC_STRUCTURE
323 {
324 align(1):
325     UINT8 Type;
326     UINT8 Length;
327     UINT8 IoApicId;
328     UINT8 Reserved;
329     UINT32 GlobalSystemInterruptBase;
330     UINT64 IoSapicAddress;
331 }
332 /// Local SAPIC Structure
333 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
334 struct EFI_ACPI_6_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE
335 {
336 align(1):
337     UINT8 Type;
338     UINT8 Length;
339     UINT8 AcpiProcessorId;
340     UINT8 LocalSapicId;
341     UINT8 LocalSapicEid;
342     UINT8[3] Reserved;
343     UINT32 Flags;
344     UINT32 ACPIProcessorUIDValue;
345 }
346 /// Platform Interrupt Sources Structure
347 struct EFI_ACPI_6_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE
348 {
349 align(1):
350     UINT8 Type;
351     UINT8 Length;
352     UINT16 Flags;
353     UINT8 InterruptType;
354     UINT8 ProcessorId;
355     UINT8 ProcessorEid;
356     UINT8 IoSapicVector;
357     UINT32 GlobalSystemInterrupt;
358     UINT32 PlatformInterruptSourceFlags;
359 }
360 /// Platform Interrupt Source Flags.
361 /// All other bits are reserved and must be set to 0.
362 enum EFI_ACPI_6_0_CPEI_PROCESSOR_OVERRIDE = BIT0;
363 /// Processor Local x2APIC Structure Definition
364 struct EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE
365 {
366 align(1):
367     UINT8 Type;
368     UINT8 Length;
369     UINT8[2] Reserved;
370     UINT32 X2ApicId;
371     UINT32 Flags;
372     UINT32 AcpiProcessorUid;
373 }
374 /// Local x2APIC NMI Structure
375 struct EFI_ACPI_6_0_LOCAL_X2APIC_NMI_STRUCTURE
376 {
377 align(1):
378     UINT8 Type;
379     UINT8 Length;
380     UINT16 Flags;
381     UINT32 AcpiProcessorUid;
382     UINT8 LocalX2ApicLint;
383     UINT8[3] Reserved;
384 }
385 /// GIC Structure
386 struct EFI_ACPI_6_0_GIC_STRUCTURE
387 {
388 align(1):
389     UINT8 Type;
390     UINT8 Length;
391     UINT16 Reserved;
392     UINT32 CPUInterfaceNumber;
393     UINT32 AcpiProcessorUid;
394     UINT32 Flags;
395     UINT32 ParkingProtocolVersion;
396     UINT32 PerformanceInterruptGsiv;
397     UINT64 ParkedAddress;
398     UINT64 PhysicalBaseAddress;
399     UINT64 GICV;
400     UINT64 GICH;
401     UINT32 VGICMaintenanceInterrupt;
402     UINT64 GICRBaseAddress;
403     UINT64 MPIDR;
404     UINT8 ProcessorPowerEfficiencyClass;
405     UINT8[3] Reserved2;
406 }
407 /// GIC Flags.  All other bits are reserved and must be 0.
408 enum EFI_ACPI_6_0_GIC_ENABLED = BIT0;
409 enum EFI_ACPI_6_0_PERFORMANCE_INTERRUPT_MODEL = BIT1;
410 enum EFI_ACPI_6_0_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS = BIT2;
411 /// GIC Distributor Structure
412 struct EFI_ACPI_6_0_GIC_DISTRIBUTOR_STRUCTURE
413 {
414 align(1):
415     UINT8 Type;
416     UINT8 Length;
417     UINT16 Reserved1;
418     UINT32 GicId;
419     UINT64 PhysicalBaseAddress;
420     UINT32 SystemVectorBase;
421     UINT32 Reserved2;
422 }
423 /// GIC MSI Frame Structure
424 struct EFI_ACPI_6_0_GIC_MSI_FRAME_STRUCTURE
425 {
426 align(1):
427     UINT8 Type;
428     UINT8 Length;
429     UINT16 Reserved1;
430     UINT32 GicMsiFrameId;
431     UINT64 PhysicalBaseAddress;
432     UINT32 Flags;
433     UINT16 SPICount;
434     UINT16 SPIBase;
435 }
436 /// GIC MSI Frame Flags.  All other bits are reserved and must be 0.
437 enum EFI_ACPI_6_0_SPI_COUNT_BASE_SELECT = BIT0;
438 /// GICR Structure
439 struct EFI_ACPI_6_0_GICR_STRUCTURE
440 {
441 align(1):
442     UINT8 Type;
443     UINT8 Length;
444     UINT16 Reserved;
445     UINT64 DiscoveryRangeBaseAddress;
446     UINT32 DiscoveryRangeLength;
447 }
448 /// GIC Interrupt Translation Service Structure
449 struct EFI_ACPI_6_0_GIC_ITS_STRUCTURE
450 {
451 align(1):
452     UINT8 Type;
453     UINT8 Length;
454     UINT16 Reserved;
455     UINT32 GicItsId;
456     UINT64 PhysicalBaseAddress;
457     UINT32 Reserved2;
458 }
459 /// Smart Battery Description Table (SBST)
460 struct EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE
461 {
462 align(1):
463     EFI_ACPI_DESCRIPTION_HEADER Header;
464     UINT32 WarningEnergyLevel;
465     UINT32 LowEnergyLevel;
466     UINT32 CriticalEnergyLevel;
467 }
468 /// SBST Version (as defined in ACPI 6.0 spec.)
469 enum EFI_ACPI_6_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION = 0x01;
470 /// Embedded Controller Boot Resources Table (ECDT)
471 /// The table is followed by a null terminated ASCII string that contains
472 /// a fully qualified reference to the name space object.
473 struct EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE
474 {
475 align(1):
476     EFI_ACPI_DESCRIPTION_HEADER Header;
477     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE EcControl;
478     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE EcData;
479     UINT32 Uid;
480     UINT8 GpeBit;
481 }
482 /// ECDT Version (as defined in ACPI 6.0 spec.)
483 enum EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION = 0x01;
484 /// System Resource Affinity Table (SRAT).  The rest of the table
485 /// must be defined in a platform specific manner.
486 struct EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER
487 {
488 align(1):
489     EFI_ACPI_DESCRIPTION_HEADER Header;
490     UINT32 Reserved1; ///< Must be set to 1
491     UINT64 Reserved2;
492 }
493 /// SRAT Version (as defined in ACPI 6.0 spec.)
494 enum EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION = 0x03;
495 enum EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY = 0x00;
496 enum EFI_ACPI_6_0_MEMORY_AFFINITY = 0x01;
497 enum EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY = 0x02;
498 enum EFI_ACPI_6_0_GICC_AFFINITY = 0x03;
499 /// Processor Local APIC/SAPIC Affinity Structure Definition
500 struct EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE
501 {
502 align(1):
503     UINT8 Type;
504     UINT8 Length;
505     UINT8 ProximityDomain7To0;
506     UINT8 ApicId;
507     UINT32 Flags;
508     UINT8 LocalSapicEid;
509     UINT8[3] ProximityDomain31To8;
510     UINT32 ClockDomain;
511 }
512 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
513 enum EFI_ACPI_6_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED = (1 << 0);
514 /// Memory Affinity Structure Definition
515 struct EFI_ACPI_6_0_MEMORY_AFFINITY_STRUCTURE
516 {
517 align(1):
518     UINT8 Type;
519     UINT8 Length;
520     UINT32 ProximityDomain;
521     UINT16 Reserved1;
522     UINT32 AddressBaseLow;
523     UINT32 AddressBaseHigh;
524     UINT32 LengthLow;
525     UINT32 LengthHigh;
526     UINT32 Reserved2;
527     UINT32 Flags;
528     UINT64 Reserved3;
529 }
530 
531 enum EFI_ACPI_6_0_MEMORY_ENABLED = (1 << 0);
532 enum EFI_ACPI_6_0_MEMORY_HOT_PLUGGABLE = (1 << 1);
533 enum EFI_ACPI_6_0_MEMORY_NONVOLATILE = (1 << 2);
534 /// Processor Local x2APIC Affinity Structure Definition
535 struct EFI_ACPI_6_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE
536 {
537 align(1):
538     UINT8 Type;
539     UINT8 Length;
540     UINT8[2] Reserved1;
541     UINT32 ProximityDomain;
542     UINT32 X2ApicId;
543     UINT32 Flags;
544     UINT32 ClockDomain;
545     UINT8[4] Reserved2;
546 }
547 /// GICC Affinity Structure Definition
548 struct EFI_ACPI_6_0_GICC_AFFINITY_STRUCTURE
549 {
550 align(1):
551     UINT8 Type;
552     UINT8 Length;
553     UINT32 ProximityDomain;
554     UINT32 AcpiProcessorUid;
555     UINT32 Flags;
556     UINT32 ClockDomain;
557 }
558 /// GICC Flags.  All other bits are reserved and must be 0.
559 enum EFI_ACPI_6_0_GICC_ENABLED = (1 << 0);
560 /// System Locality Distance Information Table (SLIT).
561 /// The rest of the table is a matrix.
562 struct EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER
563 {
564 align(1):
565     EFI_ACPI_DESCRIPTION_HEADER Header;
566     UINT64 NumberOfSystemLocalities;
567 }
568 /// SLIT Version (as defined in ACPI 6.0 spec.)
569 enum EFI_ACPI_6_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION = 0x01;
570 /// Corrected Platform Error Polling Table (CPEP)
571 struct EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER
572 {
573 align(1):
574     EFI_ACPI_DESCRIPTION_HEADER Header;
575     UINT8[8] Reserved;
576 }
577 /// CPEP Version (as defined in ACPI 6.0 spec.)
578 enum EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION = 0x01;
579 enum EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC = 0x00;
580 /// Corrected Platform Error Polling Processor Structure Definition
581 struct EFI_ACPI_6_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE
582 {
583 align(1):
584     UINT8 Type;
585     UINT8 Length;
586     UINT8 ProcessorId;
587     UINT8 ProcessorEid;
588     UINT32 PollingInterval;
589 }
590 /// Maximum System Characteristics Table (MSCT)
591 struct EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER
592 {
593 align(1):
594     EFI_ACPI_DESCRIPTION_HEADER Header;
595     UINT32 OffsetProxDomInfo;
596     UINT32 MaximumNumberOfProximityDomains;
597     UINT32 MaximumNumberOfClockDomains;
598     UINT64 MaximumPhysicalAddress;
599 }
600 /// MSCT Version (as defined in ACPI 6.0 spec.)
601 enum EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION = 0x01;
602 /// Maximum Proximity Domain Information Structure Definition
603 struct EFI_ACPI_6_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE
604 {
605 align(1):
606     UINT8 Revision;
607     UINT8 Length;
608     UINT32 ProximityDomainRangeLow;
609     UINT32 ProximityDomainRangeHigh;
610     UINT32 MaximumProcessorCapacity;
611     UINT64 MaximumMemoryCapacity;
612 }
613 /// ACPI RAS Feature Table definition.
614 struct EFI_ACPI_6_0_RAS_FEATURE_TABLE
615 {
616 align(1):
617     EFI_ACPI_DESCRIPTION_HEADER Header;
618     UINT8[12] PlatformCommunicationChannelIdentifier;
619 }
620 /// RASF Version (as defined in ACPI 6.0 spec.)
621 enum EFI_ACPI_6_0_RAS_FEATURE_TABLE_REVISION = 0x01;
622 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
623 struct EFI_ACPI_6_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION
624 {
625 align(1):
626     UINT32 Signature;
627     UINT16 Command;
628     UINT16 Status;
629     UINT16 Version;
630     UINT8[16] RASCapabilities;
631     UINT8[16] SetRASCapabilities;
632     UINT16 NumberOfRASFParameterBlocks;
633     UINT32 SetRASCapabilitiesStatus;
634 }
635 /// ACPI RASF PCC command code
636 enum EFI_ACPI_6_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND = 0x01;
637 /// ACPI RASF Platform RAS Capabilities
638 enum EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED = 0x01;
639 enum EFI_ACPI_6_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE = 0x02;
640 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
641 struct EFI_ACPI_6_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE
642 {
643 align(1):
644     UINT16 Type;
645     UINT16 Version;
646     UINT16 Length;
647     UINT16 PatrolScrubCommand;
648     UINT64[2] RequestedAddressRange;
649     UINT64[2] ActualAddressRange;
650     UINT16 Flags;
651     UINT8 RequestedSpeed;
652 }
653 /// ACPI RASF Patrol Scrub command
654 enum EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS = 0x01;
655 enum EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER = 0x02;
656 enum EFI_ACPI_6_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER = 0x03;
657 /// Memory Power State Table definition.
658 struct EFI_ACPI_6_0_MEMORY_POWER_STATUS_TABLE
659 {
660 align(1):
661     EFI_ACPI_DESCRIPTION_HEADER Header;
662     UINT8 PlatformCommunicationChannelIdentifier;
663     UINT8[3] Reserved;
664     // Memory Power Node Structure
665     // Memory Power State Characteristics
666 }
667 /// MPST Version (as defined in ACPI 6.0 spec.)
668 enum EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_REVISION = 0x01;
669 /// MPST Platform Communication Channel Shared Memory Region definition.
670 struct EFI_ACPI_6_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION
671 {
672 align(1):
673     UINT32 Signature;
674     UINT16 Command;
675     UINT16 Status;
676     UINT32 MemoryPowerCommandRegister;
677     UINT32 MemoryPowerStatusRegister;
678     UINT32 PowerStateId;
679     UINT32 MemoryPowerNodeId;
680     UINT64 MemoryEnergyConsumed;
681     UINT64 ExpectedAveragePowerComsuned;
682 }
683 /// ACPI MPST PCC command code
684 enum EFI_ACPI_6_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND = 0x03;
685 /// ACPI MPST Memory Power command
686 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE = 0x01;
687 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE = 0x02;
688 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED = 0x03;
689 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED = 0x04;
690 /// MPST Memory Power Node Table
691 struct EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE
692 {
693 align(1):
694     UINT8 PowerStateValue;
695     UINT8 PowerStateInformationIndex;
696 }
697 
698 struct EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE
699 {
700 align(1):
701     UINT8 Flag;
702     UINT8 Reserved;
703     UINT16 MemoryPowerNodeId;
704     UINT32 Length;
705     UINT64 AddressBase;
706     UINT64 AddressLength;
707     UINT32 NumberOfPowerStates;
708     UINT32 NumberOfPhysicalComponents;
709     //EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
710     //UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
711 }
712 
713 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE = 0x01;
714 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED = 0x02;
715 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE = 0x04;
716 struct EFI_ACPI_6_0_MPST_MEMORY_POWER_NODE_TABLE
717 {
718 align(1):
719     UINT16 MemoryPowerNodeCount;
720     UINT8[2] Reserved;
721 }
722 /// MPST Memory Power State Characteristics Table
723 struct EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE
724 {
725 align(1):
726     UINT8 PowerStateStructureID;
727     UINT8 Flag;
728     UINT16 Reserved;
729     UINT32 AveragePowerConsumedInMPS0;
730     UINT32 RelativePowerSavingToMPS0;
731     UINT64 ExitLatencyToMPS0;
732 }
733 
734 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED = 0x01;
735 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY = 0x02;
736 enum EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT = 0x04;
737 struct EFI_ACPI_6_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE
738 {
739 align(1):
740     UINT16 MemoryPowerStateCharacteristicsCount;
741     UINT8[2] Reserved;
742 }
743 /// Memory Topology Table definition.
744 struct EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE
745 {
746 align(1):
747     EFI_ACPI_DESCRIPTION_HEADER Header;
748     UINT32 Reserved;
749 }
750 /// PMTT Version (as defined in ACPI 6.0 spec.)
751 enum EFI_ACPI_6_0_MEMORY_TOPOLOGY_TABLE_REVISION = 0x01;
752 /// Common Memory Aggregator Device Structure.
753 struct EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE
754 {
755 align(1):
756     UINT8 Type;
757     UINT8 Reserved;
758     UINT16 Length;
759     UINT16 Flags;
760     UINT16 Reserved1;
761 }
762 /// Memory Aggregator Device Type
763 enum EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET = 0x1;
764 enum EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER = 0x2;
765 enum EFI_ACPI_6_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM = 0x3;
766 /// Socket Memory Aggregator Device Structure.
767 struct EFI_ACPI_6_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE
768 {
769 align(1):
770     EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header;
771     UINT16 SocketIdentifier;
772     UINT16 Reserved;
773     //EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
774 }
775 /// MemoryController Memory Aggregator Device Structure.
776 struct EFI_ACPI_6_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE
777 {
778 align(1):
779     EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header;
780     UINT32 ReadLatency;
781     UINT32 WriteLatency;
782     UINT32 ReadBandwidth;
783     UINT32 WriteBandwidth;
784     UINT16 OptimalAccessUnit;
785     UINT16 OptimalAccessAlignment;
786     UINT16 Reserved;
787     UINT16 NumberOfProximityDomains;
788     //UINT32                                                       ProximityDomain[NumberOfProximityDomains];
789     //EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
790 }
791 /// DIMM Memory Aggregator Device Structure.
792 struct EFI_ACPI_6_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE
793 {
794 align(1):
795     EFI_ACPI_6_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE Header;
796     UINT16 PhysicalComponentIdentifier;
797     UINT16 Reserved;
798     UINT32 SizeOfDimm;
799     UINT32 SmbiosHandle;
800 }
801 /// Boot Graphics Resource Table definition.
802 struct EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE
803 {
804 align(1):
805     EFI_ACPI_DESCRIPTION_HEADER Header;
806     ///
807     /// 2-bytes (16 bit) version ID. This value must be 1.
808     ///
809     UINT16 Version;
810     ///
811     /// 1-byte status field indicating current status about the table.
812     ///     Bits[7:1] = Reserved (must be zero)
813     ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
814     ///
815     UINT8 Status;
816     ///
817     /// 1-byte enumerated type field indicating format of the image.
818     ///     0 = Bitmap
819     ///     1 - 255  Reserved (for future use)
820     ///
821     UINT8 ImageType;
822     ///
823     /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
824     /// of the image bitmap.
825     ///
826     UINT64 ImageAddress;
827     ///
828     /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
829     /// (X, Y) display offset of the top left corner of the boot image.
830     /// The top left corner of the display is at offset (0, 0).
831     ///
832     UINT32 ImageOffsetX;
833     ///
834     /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
835     /// (X, Y) display offset of the top left corner of the boot image.
836     /// The top left corner of the display is at offset (0, 0).
837     ///
838     UINT32 ImageOffsetY;
839 }
840 /// BGRT Revision
841 enum EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION = 1;
842 /// BGRT Version
843 enum EFI_ACPI_6_0_BGRT_VERSION = 0x01;
844 /// BGRT Status
845 enum EFI_ACPI_6_0_BGRT_STATUS_NOT_DISPLAYED = 0x00;
846 enum EFI_ACPI_6_0_BGRT_STATUS_DISPLAYED = 0x01;
847 /// BGRT Image Type
848 enum EFI_ACPI_6_0_BGRT_IMAGE_TYPE_BMP = 0x00;
849 /// FPDT Version (as defined in ACPI 6.0 spec.)
850 enum EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION = 0x01;
851 /// FPDT Performance Record Types
852 enum EFI_ACPI_6_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER = 0x0000;
853 enum EFI_ACPI_6_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER = 0x0001;
854 /// FPDT Performance Record Revision
855 enum EFI_ACPI_6_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER = 0x01;
856 enum EFI_ACPI_6_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER = 0x01;
857 /// FPDT Runtime Performance Record Types
858 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME = 0x0000;
859 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND = 0x0001;
860 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT = 0x0002;
861 /// FPDT Runtime Performance Record Revision
862 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME = 0x01;
863 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND = 0x01;
864 enum EFI_ACPI_6_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT = 0x02;
865 /// FPDT Performance Record header
866 struct EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER
867 {
868 align(1):
869     UINT16 Type;
870     UINT8 Length;
871     UINT8 Revision;
872 }
873 /// FPDT Performance Table header
874 struct EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER
875 {
876 align(1):
877     UINT32 Signature;
878     UINT32 Length;
879 }
880 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
881 struct EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD
882 {
883 align(1):
884     EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
885     UINT32 Reserved;
886     ///
887     /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
888     ///
889     UINT64 BootPerformanceTablePointer;
890 }
891 /// FPDT S3 Performance Table Pointer Record Structure
892 struct EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD
893 {
894 align(1):
895     EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
896     UINT32 Reserved;
897     ///
898     /// 64-bit processor-relative physical address of the S3 Performance Table.
899     ///
900     UINT64 S3PerformanceTablePointer;
901 }
902 /// FPDT Firmware Basic Boot Performance Record Structure
903 struct EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD
904 {
905 align(1):
906     EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
907     UINT32 Reserved;
908     ///
909     /// Timer value logged at the beginning of firmware image execution.
910     /// This may not always be zero or near zero.
911     ///
912     UINT64 ResetEnd;
913     ///
914     /// Timer value logged just prior to loading the OS boot loader into memory.
915     /// For non-UEFI compatible boots, this field must be zero.
916     ///
917     UINT64 OsLoaderLoadImageStart;
918     ///
919     /// Timer value logged just prior to launching the previously loaded OS boot loader image.
920     /// For non-UEFI compatible boots, the timer value logged will be just prior
921     /// to the INT 19h handler invocation.
922     ///
923     UINT64 OsLoaderStartImageStart;
924     ///
925     /// Timer value logged at the point when the OS loader calls the
926     /// ExitBootServices function for UEFI compatible firmware.
927     /// For non-UEFI compatible boots, this field must be zero.
928     ///
929     UINT64 ExitBootServicesEntry;
930     ///
931     /// Timer value logged at the point just prior towhen the OS loader gaining
932     /// control back from calls the ExitBootServices function for UEFI compatible firmware.
933     /// For non-UEFI compatible boots, this field must be zero.
934     ///
935     UINT64 ExitBootServicesExit;
936 }
937 /// FPDT Firmware Basic Boot Performance Table signature
938 enum EFI_ACPI_6_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE = SIGNATURE_32('F', 'B', 'P',
939         'T');
940 struct EFI_ACPI_6_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE
941 {
942 align(1):
943     EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER Header;
944     //
945     // one or more Performance Records.
946     //
947 }
948 /// FPDT "S3PT" S3 Performance Table
949 enum EFI_ACPI_6_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE = SIGNATURE_32('S', '3', 'P',
950         'T');
951 struct EFI_ACPI_6_0_FPDT_FIRMWARE_S3_BOOT_TABLE
952 {
953 align(1):
954     EFI_ACPI_6_0_FPDT_PERFORMANCE_TABLE_HEADER Header;
955     //
956     // one or more Performance Records.
957     //
958 }
959 /// FPDT Basic S3 Resume Performance Record
960 struct EFI_ACPI_6_0_FPDT_S3_RESUME_RECORD
961 {
962 align(1):
963     EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
964     ///
965     /// A count of the number of S3 resume cycles since the last full boot sequence.
966     ///
967     UINT32 ResumeCount;
968     ///
969     /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
970     /// OS waking vector. Only the most recent resume cycle's time is retained.
971     ///
972     UINT64 FullResume;
973     ///
974     /// Average timer value of all resume cycles logged since the last full boot
975     /// sequence, including the most recent resume.  Note that the entire log of
976     /// timer values does not need to be retained in order to calculate this average.
977     ///
978     UINT64 AverageResume;
979 }
980 /// FPDT Basic S3 Suspend Performance Record
981 struct EFI_ACPI_6_0_FPDT_S3_SUSPEND_RECORD
982 {
983 align(1):
984     EFI_ACPI_6_0_FPDT_PERFORMANCE_RECORD_HEADER Header;
985     ///
986     /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
987     /// Only the most recent suspend cycle's timer value is retained.
988     ///
989     UINT64 SuspendStart;
990     ///
991     /// Timer value recorded at the final firmware write to SLP_TYP (or other
992     /// mechanism) used to trigger hardware entry to S3.
993     /// Only the most recent suspend cycle's timer value is retained.
994     ///
995     UINT64 SuspendEnd;
996 }
997 /// Firmware Performance Record Table definition.
998 struct EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_RECORD_TABLE
999 {
1000 align(1):
1001     EFI_ACPI_DESCRIPTION_HEADER Header;
1002 }
1003 /// Generic Timer Description Table definition.
1004 struct EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE
1005 {
1006 align(1):
1007     EFI_ACPI_DESCRIPTION_HEADER Header;
1008     UINT64 CntControlBasePhysicalAddress;
1009     UINT32 Reserved;
1010     UINT32 SecurePL1TimerGSIV;
1011     UINT32 SecurePL1TimerFlags;
1012     UINT32 NonSecurePL1TimerGSIV;
1013     UINT32 NonSecurePL1TimerFlags;
1014     UINT32 VirtualTimerGSIV;
1015     UINT32 VirtualTimerFlags;
1016     UINT32 NonSecurePL2TimerGSIV;
1017     UINT32 NonSecurePL2TimerFlags;
1018     UINT64 CntReadBasePhysicalAddress;
1019     UINT32 PlatformTimerCount;
1020     UINT32 PlatformTimerOffset;
1021 }
1022 /// GTDT Version (as defined in ACPI 6.0 spec.)
1023 enum EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION = 0x02;
1024 /// Timer Flags.  All other bits are reserved and must be 0.
1025 enum EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE = BIT0;
1026 enum EFI_ACPI_6_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY = BIT1;
1027 enum EFI_ACPI_6_0_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY = BIT2;
1028 /// Platform Timer Type
1029 enum EFI_ACPI_6_0_GTDT_GT_BLOCK = 0;
1030 enum EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG = 1;
1031 /// GT Block Structure
1032 struct EFI_ACPI_6_0_GTDT_GT_BLOCK_STRUCTURE
1033 {
1034 align(1):
1035     UINT8 Type;
1036     UINT16 Length;
1037     UINT8 Reserved;
1038     UINT64 CntCtlBase;
1039     UINT32 GTBlockTimerCount;
1040     UINT32 GTBlockTimerOffset;
1041 }
1042 /// GT Block Timer Structure
1043 struct EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_STRUCTURE
1044 {
1045 align(1):
1046     UINT8 GTFrameNumber;
1047     UINT8[3] Reserved;
1048     UINT64 CntBaseX;
1049     UINT64 CntEL0BaseX;
1050     UINT32 GTxPhysicalTimerGSIV;
1051     UINT32 GTxPhysicalTimerFlags;
1052     UINT32 GTxVirtualTimerGSIV;
1053     UINT32 GTxVirtualTimerFlags;
1054     UINT32 GTxCommonFlags;
1055 }
1056 /// GT Block Physical Timers and Virtual Timers Flags.  All other bits are reserved and must be 0.
1057 enum EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE = BIT0;
1058 enum EFI_ACPI_6_0_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY = BIT1;
1059 /// Common Flags Flags.  All other bits are reserved and must be 0.
1060 enum EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER = BIT0;
1061 enum EFI_ACPI_6_0_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY = BIT1;
1062 /// SBSA Generic Watchdog Structure
1063 struct EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE
1064 {
1065 align(1):
1066     UINT8 Type;
1067     UINT16 Length;
1068     UINT8 Reserved;
1069     UINT64 RefreshFramePhysicalAddress;
1070     UINT64 WatchdogControlFramePhysicalAddress;
1071     UINT32 WatchdogTimerGSIV;
1072     UINT32 WatchdogTimerFlags;
1073 }
1074 /// SBSA Generic Watchdog Timer Flags.  All other bits are reserved and must be 0.
1075 enum EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE = BIT0;
1076 enum EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY = BIT1;
1077 enum EFI_ACPI_6_0_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER = BIT2;
1078 struct EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE
1079 {
1080 align(1):
1081     EFI_ACPI_DESCRIPTION_HEADER Header;
1082     UINT32 Reserved;
1083 }
1084 
1085 enum EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION = 0x1;
1086 enum EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE_TYPE = 0;
1087 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE_TYPE = 1;
1088 enum EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE_TYPE = 2;
1089 enum EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE_TYPE = 3;
1090 enum EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE_TYPE = 4;
1091 enum EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE_TYPE = 5;
1092 enum EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE_TYPE = 6;
1093 struct EFI_ACPI_6_0_NFIT_STRUCTURE_HEADER
1094 {
1095 align(1):
1096     UINT16 Type;
1097     UINT16 Length;
1098 }
1099 
1100 enum EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_CONTROL_REGION_FOR_MANAGEMENT = BIT0;
1101 enum EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_PROXIMITY_DOMAIN_VALID = BIT1;
1102 enum EFI_ACPI_6_0_NFIT_GUID_VOLATILE_MEMORY_REGION = GUID(0x7305944F, 0xFDDA,
1103         0x44E3, 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0);
1104 enum EFI_ACPI_6_0_NFIT_GUID_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_REGION = GUID(
1105         0x66F0D379, 0xB4F3, 0x4074, 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB);
1106 
1107 enum EFI_ACPI_6_0_NFIT_GUID_NVDIMM_CONTROL_REGION = GUID(0x92F701F6, 0x13B4,
1108         0x405D, 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C);
1109 
1110 enum EFI_ACPI_6_0_NFIT_GUID_NVDIMM_BLOCK_DATA_WINDOW_REGION = GUID(0x91AF0530,
1111         0x5D86, 0x470E, 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49);
1112 
1113 enum EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE = GUID(
1114         0x77AB535A, 0x45FC, 0x624B, 0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E);
1115 
1116 enum EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE = GUID(
1117         0x3D5ABD30, 0x4175, 0x87CE, 0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB);
1118 
1119 enum EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT = GUID(
1120         0x5CEA02C9, 0x4D07, 0x69D3, 0x26, 0x9F, 0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9);
1121 enum EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT = GUID(
1122         0x08018188, 0x42CD, 0xBB48, 0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D);
1123 
1124 struct EFI_ACPI_6_0_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE
1125 {
1126 align(1):
1127     UINT16 Type;
1128     UINT16 Length;
1129     UINT16 SPARangeStructureIndex;
1130     UINT16 Flags;
1131     UINT32 Reserved_8;
1132     UINT32 ProximityDomain;
1133     GUID AddressRangeTypeGUID;
1134     UINT64 SystemPhysicalAddressRangeBase;
1135     UINT64 SystemPhysicalAddressRangeLength;
1136     UINT64 AddressRangeMemoryMappingAttribute;
1137 }
1138 
1139 struct EFI_ACPI_6_0_NFIT_DEVICE_HANDLE
1140 {
1141 align(1):
1142     mixin(bitfields!(UINT32, "DIMMNumber", 4, UINT32, "MemoryChannelNumber",
1143         4, UINT32, "MemoryControllerID", 4, UINT32, "SocketID", 4, UINT32,
1144         "NodeControllerID", 12, UINT32, "Reserved_28", 4));
1145 }
1146 
1147 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PREVIOUS_SAVE_FAIL = BIT0;
1148 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_LAST_RESTORE_FAIL = BIT1;
1149 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_PLATFORM_FLUSH_FAIL = BIT2;
1150 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_NOT_ARMED_PRIOR_TO_OSPM_HAND_OFF = BIT3;
1151 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_SMART_HEALTH_EVENTS_PRIOR_OSPM_HAND_OFF = BIT4;
1152 enum EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_ENABLED_TO_NOTIFY_OSPM_ON_SMART_HEALTH_EVENTS = BIT5;
1153 struct EFI_ACPI_6_0_NFIT_MEMORY_DEVICE_TO_SYSTEM_ADDRESS_RANGE_MAP_STRUCTURE
1154 {
1155 align(1):
1156     UINT16 Type;
1157     UINT16 Length;
1158     EFI_ACPI_6_0_NFIT_DEVICE_HANDLE NFITDeviceHandle;
1159     UINT16 MemoryDevicePhysicalID;
1160     UINT16 MemoryDeviceRegionID;
1161     UINT16 SPARangeStructureIndex;
1162     UINT16 NVDIMMControlRegionStructureIndex;
1163     UINT64 MemoryDeviceRegionSize;
1164     UINT64 RegionOffset;
1165     UINT64 MemoryDevicePhysicalAddressRegionBase;
1166     UINT16 InterleaveStructureIndex;
1167     UINT16 InterleaveWays;
1168     UINT16 MemoryDeviceStateFlags;
1169     UINT16 Reserved_46;
1170 }
1171 
1172 struct EFI_ACPI_6_0_NFIT_INTERLEAVE_STRUCTURE
1173 {
1174 align(1):
1175     UINT16 Type;
1176     UINT16 Length;
1177     UINT16 InterleaveStructureIndex;
1178     UINT16 Reserved_6;
1179     UINT32 NumberOfLines;
1180     UINT32 LineSize;
1181     //UINT32                                      LineOffset[NumberOfLines];
1182 }
1183 
1184 struct EFI_ACPI_6_0_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE
1185 {
1186 align(1):
1187     UINT16 Type;
1188     UINT16 Length;
1189     UINT32 Reserved_4;
1190     //UINT8                                       Data[];
1191 }
1192 
1193 enum EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_FLAGS_BLOCK_DATA_WINDOWS_BUFFERED = BIT0;
1194 struct EFI_ACPI_6_0_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE
1195 {
1196 align(1):
1197     UINT16 Type;
1198     UINT16 Length;
1199     UINT16 NVDIMMControlRegionStructureIndex;
1200     UINT16 VendorID;
1201     UINT16 DeviceID;
1202     UINT16 RevisionID;
1203     UINT16 SubsystemVendorID;
1204     UINT16 SubsystemDeviceID;
1205     UINT16 SubsystemRevisionID;
1206     UINT8[6] Reserved_18;
1207     UINT32 SerialNumber;
1208     UINT16 RegionFormatInterfaceCode;
1209     UINT16 NumberOfBlockControlWindows;
1210     UINT64 SizeOfBlockControlWindow;
1211     UINT64 CommandRegisterOffsetInBlockControlWindow;
1212     UINT64 SizeOfCommandRegisterInBlockControlWindows;
1213     UINT64 StatusRegisterOffsetInBlockControlWindow;
1214     UINT64 SizeOfStatusRegisterInBlockControlWindows;
1215     UINT16 NVDIMMControlRegionFlag;
1216     UINT8[6] Reserved_74;
1217 }
1218 
1219 struct EFI_ACPI_6_0_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE
1220 {
1221 align(1):
1222     UINT16 Type;
1223     UINT16 Length;
1224     UINT16 NVDIMMControlRegionStructureIndex;
1225     UINT16 NumberOfBlockDataWindows;
1226     UINT64 BlockDataWindowStartOffset;
1227     UINT64 SizeOfBlockDataWindow;
1228     UINT64 BlockAccessibleMemoryCapacity;
1229     UINT64 BeginningAddressOfFirstBlockInBlockAccessibleMemory;
1230 }
1231 
1232 struct EFI_ACPI_6_0_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE
1233 {
1234 align(1):
1235     UINT16 Type;
1236     UINT16 Length;
1237     EFI_ACPI_6_0_NFIT_DEVICE_HANDLE NFITDeviceHandle;
1238     UINT16 NumberOfFlushHintAddresses;
1239     UINT8[6] Reserved_10;
1240     //UINT64                                      FlushHintAddress[NumberOfFlushHintAddresses];
1241 }
1242 /// Boot Error Record Table (BERT)
1243 struct EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_HEADER
1244 {
1245 align(1):
1246     EFI_ACPI_DESCRIPTION_HEADER Header;
1247     UINT32 BootErrorRegionLength;
1248     UINT64 BootErrorRegion;
1249 }
1250 /// BERT Version (as defined in ACPI 6.0 spec.)
1251 enum EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_REVISION = 0x01;
1252 /// Boot Error Region Block Status Definition
1253 struct EFI_ACPI_6_0_ERROR_BLOCK_STATUS
1254 {
1255 align(1):
1256     mixin(bitfields!(UINT32, "UncorrectableErrorValid", 1, UINT32,
1257         "CorrectableErrorValid", 1, UINT32, "MultipleUncorrectableErrors", 1,
1258         UINT32, "MultipleCorrectableErrors", 1, UINT32, "ErrorDataEntryCount",
1259         10, UINT32, "Reserved", 18));
1260 }
1261 /// Boot Error Region Definition
1262 struct EFI_ACPI_6_0_BOOT_ERROR_REGION_STRUCTURE
1263 {
1264 align(1):
1265     EFI_ACPI_6_0_ERROR_BLOCK_STATUS BlockStatus;
1266     UINT32 RawDataOffset;
1267     UINT32 RawDataLength;
1268     UINT32 DataLength;
1269     UINT32 ErrorSeverity;
1270 }
1271 
1272 enum EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTABLE = 0x00;
1273 enum EFI_ACPI_6_0_ERROR_SEVERITY_FATAL = 0x01;
1274 enum EFI_ACPI_6_0_ERROR_SEVERITY_CORRECTED = 0x02;
1275 enum EFI_ACPI_6_0_ERROR_SEVERITY_NONE = 0x03;
1276 /// Generic Error Data Entry Definition
1277 struct EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE
1278 {
1279 align(1):
1280     UINT8[16] SectionType;
1281     UINT32 ErrorSeverity;
1282     UINT16 Revision;
1283     UINT8 ValidationBits;
1284     UINT8 Flags;
1285     UINT32 ErrorDataLength;
1286     UINT8[16] FruId;
1287     UINT8[20] FruText;
1288 }
1289 /// Generic Error Data Entry Version (as defined in ACPI 6.0 spec.)
1290 enum EFI_ACPI_6_0_GENERIC_ERROR_DATA_ENTRY_REVISION = 0x0201;
1291 /// HEST - Hardware Error Source Table
1292 struct EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER
1293 {
1294 align(1):
1295     EFI_ACPI_DESCRIPTION_HEADER Header;
1296     UINT32 ErrorSourceCount;
1297 }
1298 /// HEST Version (as defined in ACPI 6.0 spec.)
1299 enum EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION = 0x01;
1300 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION = 0x00;
1301 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK = 0x01;
1302 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR = 0x02;
1303 enum EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER = 0x06;
1304 enum EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER = 0x07;
1305 enum EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER = 0x08;
1306 enum EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR = 0x09;
1307 enum EFI_ACPI_6_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST = (1 << 0);
1308 enum EFI_ACPI_6_0_ERROR_SOURCE_FLAG_GLOBAL = (1 << 1);
1309 /// IA-32 Architecture Machine Check Exception Structure Definition
1310 struct EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE
1311 {
1312 align(1):
1313     UINT16 Type;
1314     UINT16 SourceId;
1315     UINT8[2] Reserved0;
1316     UINT8 Flags;
1317     UINT8 Enabled;
1318     UINT32 NumberOfRecordsToPreAllocate;
1319     UINT32 MaxSectionsPerRecord;
1320     UINT64 GlobalCapabilityInitData;
1321     UINT64 GlobalControlInitData;
1322     UINT8 NumberOfHardwareBanks;
1323     UINT8[7] Reserved1;
1324 }
1325 /// IA-32 Architecture Machine Check Bank Structure Definition
1326 struct EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE
1327 {
1328 align(1):
1329     UINT8 BankNumber;
1330     UINT8 ClearStatusOnInitialization;
1331     UINT8 StatusDataFormat;
1332     UINT8 Reserved0;
1333     UINT32 ControlRegisterMsrAddress;
1334     UINT64 ControlInitData;
1335     UINT32 StatusRegisterMsrAddress;
1336     UINT32 AddressRegisterMsrAddress;
1337     UINT32 MiscRegisterMsrAddress;
1338 }
1339 /// IA-32 Architecture Machine Check Bank Structure MCA data format
1340 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32 = 0x00;
1341 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64 = 0x01;
1342 enum EFI_ACPI_6_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64 = 0x02;
1343 enum EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_POLLED = 0x00;
1344 enum EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT = 0x01;
1345 enum EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT = 0x02;
1346 enum EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_SCI = 0x03;
1347 enum EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_NMI = 0x04;
1348 /// Hardware Error Notification Configuration Write Enable Structure Definition
1349 struct EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE
1350 {
1351 align(1):
1352     mixin(bitfields!(UINT16, "Type", 1, UINT16, "PollInterval", 1, UINT16,
1353         "SwitchToPollingThresholdValue", 1, UINT16,
1354         "SwitchToPollingThresholdWindow", 1, UINT16, "ErrorThresholdValue", 1,
1355         UINT16, "ErrorThresholdWindow", 1, UINT16, "Reserved", 10));
1356 }
1357 /// Hardware Error Notification Structure Definition
1358 struct EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE
1359 {
1360 align(1):
1361     UINT8 Type;
1362     UINT8 Length;
1363     EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE ConfigurationWriteEnable;
1364     UINT32 PollInterval;
1365     UINT32 Vector;
1366     UINT32 SwitchToPollingThresholdValue;
1367     UINT32 SwitchToPollingThresholdWindow;
1368     UINT32 ErrorThresholdValue;
1369     UINT32 ErrorThresholdWindow;
1370 }
1371 /// IA-32 Architecture Corrected Machine Check Structure Definition
1372 struct EFI_ACPI_6_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE
1373 {
1374 align(1):
1375     UINT16 Type;
1376     UINT16 SourceId;
1377     UINT8[2] Reserved0;
1378     UINT8 Flags;
1379     UINT8 Enabled;
1380     UINT32 NumberOfRecordsToPreAllocate;
1381     UINT32 MaxSectionsPerRecord;
1382     EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE NotificationStructure;
1383     UINT8 NumberOfHardwareBanks;
1384     UINT8[3] Reserved1;
1385 }
1386 /// IA-32 Architecture NMI Error Structure Definition
1387 struct EFI_ACPI_6_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE
1388 {
1389 align(1):
1390     UINT16 Type;
1391     UINT16 SourceId;
1392     UINT8[2] Reserved0;
1393     UINT32 NumberOfRecordsToPreAllocate;
1394     UINT32 MaxSectionsPerRecord;
1395     UINT32 MaxRawDataLength;
1396 }
1397 /// PCI Express Root Port AER Structure Definition
1398 struct EFI_ACPI_6_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE
1399 {
1400 align(1):
1401     UINT16 Type;
1402     UINT16 SourceId;
1403     UINT8[2] Reserved0;
1404     UINT8 Flags;
1405     UINT8 Enabled;
1406     UINT32 NumberOfRecordsToPreAllocate;
1407     UINT32 MaxSectionsPerRecord;
1408     UINT32 Bus;
1409     UINT16 Device;
1410     UINT16 Function;
1411     UINT16 DeviceControl;
1412     UINT8[2] Reserved1;
1413     UINT32 UncorrectableErrorMask;
1414     UINT32 UncorrectableErrorSeverity;
1415     UINT32 CorrectableErrorMask;
1416     UINT32 AdvancedErrorCapabilitiesAndControl;
1417     UINT32 RootErrorCommand;
1418 }
1419 /// PCI Express Device AER Structure Definition
1420 struct EFI_ACPI_6_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE
1421 {
1422 align(1):
1423     UINT16 Type;
1424     UINT16 SourceId;
1425     UINT8[2] Reserved0;
1426     UINT8 Flags;
1427     UINT8 Enabled;
1428     UINT32 NumberOfRecordsToPreAllocate;
1429     UINT32 MaxSectionsPerRecord;
1430     UINT32 Bus;
1431     UINT16 Device;
1432     UINT16 Function;
1433     UINT16 DeviceControl;
1434     UINT8[2] Reserved1;
1435     UINT32 UncorrectableErrorMask;
1436     UINT32 UncorrectableErrorSeverity;
1437     UINT32 CorrectableErrorMask;
1438     UINT32 AdvancedErrorCapabilitiesAndControl;
1439 }
1440 /// PCI Express Bridge AER Structure Definition
1441 struct EFI_ACPI_6_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE
1442 {
1443 align(1):
1444     UINT16 Type;
1445     UINT16 SourceId;
1446     UINT8[2] Reserved0;
1447     UINT8 Flags;
1448     UINT8 Enabled;
1449     UINT32 NumberOfRecordsToPreAllocate;
1450     UINT32 MaxSectionsPerRecord;
1451     UINT32 Bus;
1452     UINT16 Device;
1453     UINT16 Function;
1454     UINT16 DeviceControl;
1455     UINT8[2] Reserved1;
1456     UINT32 UncorrectableErrorMask;
1457     UINT32 UncorrectableErrorSeverity;
1458     UINT32 CorrectableErrorMask;
1459     UINT32 AdvancedErrorCapabilitiesAndControl;
1460     UINT32 SecondaryUncorrectableErrorMask;
1461     UINT32 SecondaryUncorrectableErrorSeverity;
1462     UINT32 SecondaryAdvancedErrorCapabilitiesAndControl;
1463 }
1464 /// Generic Hardware Error Source Structure Definition
1465 struct EFI_ACPI_6_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE
1466 {
1467 align(1):
1468     UINT16 Type;
1469     UINT16 SourceId;
1470     UINT16 RelatedSourceId;
1471     UINT8 Flags;
1472     UINT8 Enabled;
1473     UINT32 NumberOfRecordsToPreAllocate;
1474     UINT32 MaxSectionsPerRecord;
1475     UINT32 MaxRawDataLength;
1476     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE ErrorStatusAddress;
1477     EFI_ACPI_6_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE NotificationStructure;
1478     UINT32 ErrorStatusBlockLength;
1479 }
1480 /// Generic Error Status Definition
1481 struct EFI_ACPI_6_0_GENERIC_ERROR_STATUS_STRUCTURE
1482 {
1483 align(1):
1484     EFI_ACPI_6_0_ERROR_BLOCK_STATUS BlockStatus;
1485     UINT32 RawDataOffset;
1486     UINT32 RawDataLength;
1487     UINT32 DataLength;
1488     UINT32 ErrorSeverity;
1489 }
1490 /// ERST - Error Record Serialization Table
1491 struct EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER
1492 {
1493 align(1):
1494     EFI_ACPI_DESCRIPTION_HEADER Header;
1495     UINT32 SerializationHeaderSize;
1496     UINT8[4] Reserved0;
1497     UINT32 InstructionEntryCount;
1498 }
1499 /// ERST Version (as defined in ACPI 6.0 spec.)
1500 enum EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION = 0x01;
1501 /// ERST Serialization Actions
1502 enum EFI_ACPI_6_0_ERST_BEGIN_WRITE_OPERATION = 0x00;
1503 enum EFI_ACPI_6_0_ERST_BEGIN_READ_OPERATION = 0x01;
1504 enum EFI_ACPI_6_0_ERST_BEGIN_CLEAR_OPERATION = 0x02;
1505 enum EFI_ACPI_6_0_ERST_END_OPERATION = 0x03;
1506 enum EFI_ACPI_6_0_ERST_SET_RECORD_OFFSET = 0x04;
1507 enum EFI_ACPI_6_0_ERST_EXECUTE_OPERATION = 0x05;
1508 enum EFI_ACPI_6_0_ERST_CHECK_BUSY_STATUS = 0x06;
1509 enum EFI_ACPI_6_0_ERST_GET_COMMAND_STATUS = 0x07;
1510 enum EFI_ACPI_6_0_ERST_GET_RECORD_IDENTIFIER = 0x08;
1511 enum EFI_ACPI_6_0_ERST_SET_RECORD_IDENTIFIER = 0x09;
1512 enum EFI_ACPI_6_0_ERST_GET_RECORD_COUNT = 0x0A;
1513 enum EFI_ACPI_6_0_ERST_BEGIN_DUMMY_WRITE_OPERATION = 0x0B;
1514 enum EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE = 0x0D;
1515 enum EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH = 0x0E;
1516 enum EFI_ACPI_6_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES = 0x0F;
1517 /// ERST Action Command Status
1518 enum EFI_ACPI_6_0_ERST_STATUS_SUCCESS = 0x00;
1519 enum EFI_ACPI_6_0_ERST_STATUS_NOT_ENOUGH_SPACE = 0x01;
1520 enum EFI_ACPI_6_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE = 0x02;
1521 enum EFI_ACPI_6_0_ERST_STATUS_FAILED = 0x03;
1522 enum EFI_ACPI_6_0_ERST_STATUS_RECORD_STORE_EMPTY = 0x04;
1523 enum EFI_ACPI_6_0_ERST_STATUS_RECORD_NOT_FOUND = 0x05;
1524 /// ERST Serialization Instructions
1525 enum EFI_ACPI_6_0_ERST_READ_REGISTER = 0x00;
1526 enum EFI_ACPI_6_0_ERST_READ_REGISTER_VALUE = 0x01;
1527 enum EFI_ACPI_6_0_ERST_WRITE_REGISTER = 0x02;
1528 enum EFI_ACPI_6_0_ERST_WRITE_REGISTER_VALUE = 0x03;
1529 enum EFI_ACPI_6_0_ERST_NOOP = 0x04;
1530 enum EFI_ACPI_6_0_ERST_LOAD_VAR1 = 0x05;
1531 enum EFI_ACPI_6_0_ERST_LOAD_VAR2 = 0x06;
1532 enum EFI_ACPI_6_0_ERST_STORE_VAR1 = 0x07;
1533 enum EFI_ACPI_6_0_ERST_ADD = 0x08;
1534 enum EFI_ACPI_6_0_ERST_SUBTRACT = 0x09;
1535 enum EFI_ACPI_6_0_ERST_ADD_VALUE = 0x0A;
1536 enum EFI_ACPI_6_0_ERST_SUBTRACT_VALUE = 0x0B;
1537 enum EFI_ACPI_6_0_ERST_STALL = 0x0C;
1538 enum EFI_ACPI_6_0_ERST_STALL_WHILE_TRUE = 0x0D;
1539 enum EFI_ACPI_6_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE = 0x0E;
1540 enum EFI_ACPI_6_0_ERST_GOTO = 0x0F;
1541 enum EFI_ACPI_6_0_ERST_SET_SRC_ADDRESS_BASE = 0x10;
1542 enum EFI_ACPI_6_0_ERST_SET_DST_ADDRESS_BASE = 0x11;
1543 enum EFI_ACPI_6_0_ERST_MOVE_DATA = 0x12;
1544 /// ERST Instruction Flags
1545 enum EFI_ACPI_6_0_ERST_PRESERVE_REGISTER = 0x01;
1546 /// ERST Serialization Instruction Entry
1547 struct EFI_ACPI_6_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY
1548 {
1549 align(1):
1550     UINT8 SerializationAction;
1551     UINT8 Instruction;
1552     UINT8 Flags;
1553     UINT8 Reserved0;
1554     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE RegisterRegion;
1555     UINT64 Value;
1556     UINT64 Mask;
1557 }
1558 /// EINJ - Error Injection Table
1559 struct EFI_ACPI_6_0_ERROR_INJECTION_TABLE_HEADER
1560 {
1561 align(1):
1562     EFI_ACPI_DESCRIPTION_HEADER Header;
1563     UINT32 InjectionHeaderSize;
1564     UINT8 InjectionFlags;
1565     UINT8[3] Reserved0;
1566     UINT32 InjectionEntryCount;
1567 }
1568 /// EINJ Version (as defined in ACPI 6.0 spec.)
1569 enum EFI_ACPI_6_0_ERROR_INJECTION_TABLE_REVISION = 0x01;
1570 /// EINJ Error Injection Actions
1571 enum EFI_ACPI_6_0_EINJ_BEGIN_INJECTION_OPERATION = 0x00;
1572 enum EFI_ACPI_6_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE = 0x01;
1573 enum EFI_ACPI_6_0_EINJ_SET_ERROR_TYPE = 0x02;
1574 enum EFI_ACPI_6_0_EINJ_GET_ERROR_TYPE = 0x03;
1575 enum EFI_ACPI_6_0_EINJ_END_OPERATION = 0x04;
1576 enum EFI_ACPI_6_0_EINJ_EXECUTE_OPERATION = 0x05;
1577 enum EFI_ACPI_6_0_EINJ_CHECK_BUSY_STATUS = 0x06;
1578 enum EFI_ACPI_6_0_EINJ_GET_COMMAND_STATUS = 0x07;
1579 enum EFI_ACPI_6_0_EINJ_TRIGGER_ERROR = 0xFF;
1580 /// EINJ Action Command Status
1581 enum EFI_ACPI_6_0_EINJ_STATUS_SUCCESS = 0x00;
1582 enum EFI_ACPI_6_0_EINJ_STATUS_UNKNOWN_FAILURE = 0x01;
1583 enum EFI_ACPI_6_0_EINJ_STATUS_INVALID_ACCESS = 0x02;
1584 /// EINJ Error Type Definition
1585 enum EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_CORRECTABLE = (1 << 0);
1586 enum EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL = (1 << 1);
1587 enum EFI_ACPI_6_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL = (1 << 2);
1588 enum EFI_ACPI_6_0_EINJ_ERROR_MEMORY_CORRECTABLE = (1 << 3);
1589 enum EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL = (1 << 4);
1590 enum EFI_ACPI_6_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL = (1 << 5);
1591 enum EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE = (1 << 6);
1592 enum EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL = (1 << 7);
1593 enum EFI_ACPI_6_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL = (1 << 8);
1594 enum EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_CORRECTABLE = (1 << 9);
1595 enum EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL = (1 << 10);
1596 enum EFI_ACPI_6_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL = (1 << 11);
1597 /// EINJ Injection Instructions
1598 enum EFI_ACPI_6_0_EINJ_READ_REGISTER = 0x00;
1599 enum EFI_ACPI_6_0_EINJ_READ_REGISTER_VALUE = 0x01;
1600 enum EFI_ACPI_6_0_EINJ_WRITE_REGISTER = 0x02;
1601 enum EFI_ACPI_6_0_EINJ_WRITE_REGISTER_VALUE = 0x03;
1602 enum EFI_ACPI_6_0_EINJ_NOOP = 0x04;
1603 /// EINJ Instruction Flags
1604 enum EFI_ACPI_6_0_EINJ_PRESERVE_REGISTER = 0x01;
1605 /// EINJ Injection Instruction Entry
1606 struct EFI_ACPI_6_0_EINJ_INJECTION_INSTRUCTION_ENTRY
1607 {
1608 align(1):
1609     UINT8 InjectionAction;
1610     UINT8 Instruction;
1611     UINT8 Flags;
1612     UINT8 Reserved0;
1613     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE RegisterRegion;
1614     UINT64 Value;
1615     UINT64 Mask;
1616 }
1617 /// EINJ Trigger Action Table
1618 struct EFI_ACPI_6_0_EINJ_TRIGGER_ACTION_TABLE
1619 {
1620 align(1):
1621     UINT32 HeaderSize;
1622     UINT32 Revision;
1623     UINT32 TableSize;
1624     UINT32 EntryCount;
1625 }
1626 /// Platform Communications Channel Table (PCCT)
1627 struct EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER
1628 {
1629 align(1):
1630     EFI_ACPI_DESCRIPTION_HEADER Header;
1631     UINT32 Flags;
1632     UINT64 Reserved;
1633 }
1634 /// PCCT Version (as defined in ACPI 6.0 spec.)
1635 enum EFI_ACPI_6_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION = 0x01;
1636 /// PCCT Global Flags
1637 enum EFI_ACPI_6_0_PCCT_FLAGS_SCI_DOORBELL = BIT0;
1638 enum EFI_ACPI_6_0_PCCT_SUBSPACE_TYPE_GENERIC = 0x00;
1639 /// PCC Subspace Structure Header
1640 struct EFI_ACPI_6_0_PCCT_SUBSPACE_HEADER
1641 {
1642 align(1):
1643     UINT8 Type;
1644     UINT8 Length;
1645 }
1646 /// Generic Communications Subspace Structure
1647 struct EFI_ACPI_6_0_PCCT_SUBSPACE_GENERIC
1648 {
1649 align(1):
1650     UINT8 Type;
1651     UINT8 Length;
1652     UINT8[6] Reserved;
1653     UINT64 BaseAddress;
1654     UINT64 AddressLength;
1655     EFI_ACPI_6_0_GENERIC_ADDRESS_STRUCTURE DoorbellRegister;
1656     UINT64 DoorbellPreserve;
1657     UINT64 DoorbellWrite;
1658     UINT32 NominalLatency;
1659     UINT32 MaximumPeriodicAccessRate;
1660     UINT16 MinimumRequestTurnaroundTime;
1661 }
1662 /// Generic Communications Channel Shared Memory Region
1663 struct EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND
1664 {
1665 align(1):
1666     UINT8 Command;
1667     mixin(bitfields!(UINT8, "Reserved", 7, UINT8, "GenerateSci", 1));
1668 }
1669 
1670 struct EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS
1671 {
1672 align(1):
1673     mixin(bitfields!(UINT8, "CommandComplete", 1, UINT8, "SciDoorbell", 1,
1674         UINT8, "Error", 1, UINT8, "PlatformNotification", 1, UINT8, "Reserved", 4));
1675     UINT8 Reserved1;
1676 }
1677 
1678 struct EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER
1679 {
1680 align(1):
1681     UINT32 Signature;
1682     EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND Command;
1683     EFI_ACPI_6_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS Status;
1684 }
1685 /// "RSD PTR " Root System Description Pointer
1686 enum EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE = SIGNATURE_64('R',
1687         'S', 'D', ' ', 'P', 'T', 'R', ' ');
1688 /// "APIC" Multiple APIC Description Table
1689 enum EFI_ACPI_6_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('A', 'P',
1690         'I', 'C');
1691 /// "BERT" Boot Error Record Table
1692 enum EFI_ACPI_6_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE = SIGNATURE_32('B', 'E', 'R', 'T');
1693 /// "BGRT" Boot Graphics Resource Table
1694 enum EFI_ACPI_6_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE = SIGNATURE_32('B', 'G', 'R',
1695         'T');
1696 /// "CPEP" Corrected Platform Error Polling Table
1697 enum EFI_ACPI_6_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE = SIGNATURE_32(
1698         'C', 'P', 'E', 'P');
1699 /// "DSDT" Differentiated System Description Table
1700 enum EFI_ACPI_6_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32(
1701         'D', 'S', 'D', 'T');
1702 /// "ECDT" Embedded Controller Boot Resources Table
1703 enum EFI_ACPI_6_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE = SIGNATURE_32(
1704         'E', 'C', 'D', 'T');
1705 /// "EINJ" Error Injection Table
1706 enum EFI_ACPI_6_0_ERROR_INJECTION_TABLE_SIGNATURE = SIGNATURE_32('E', 'I', 'N', 'J');
1707 /// "ERST" Error Record Serialization Table
1708 enum EFI_ACPI_6_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE = SIGNATURE_32('E', 'R',
1709         'S', 'T');
1710 /// "FACP" Fixed ACPI Description Table
1711 enum EFI_ACPI_6_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('F', 'A', 'C',
1712         'P');
1713 /// "FACS" Firmware ACPI Control Structure
1714 enum EFI_ACPI_6_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE = SIGNATURE_32('F', 'A',
1715         'C', 'S');
1716 /// "FPDT" Firmware Performance Data Table
1717 enum EFI_ACPI_6_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE = SIGNATURE_32('F', 'P',
1718         'D', 'T');
1719 /// "GTDT" Generic Timer Description Table
1720 enum EFI_ACPI_6_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('G', 'T',
1721         'D', 'T');
1722 /// "HEST" Hardware Error Source Table
1723 enum EFI_ACPI_6_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE = SIGNATURE_32('H', 'E', 'S',
1724         'T');
1725 /// "MPST" Memory Power State Table
1726 enum EFI_ACPI_6_0_MEMORY_POWER_STATE_TABLE_SIGNATURE = SIGNATURE_32('M', 'P', 'S',
1727         'T');
1728 /// "MSCT" Maximum System Characteristics Table
1729 enum EFI_ACPI_6_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE = SIGNATURE_32('M',
1730         'S', 'C', 'T');
1731 /// "NFIT" NVDIMM Firmware Interface Table
1732 enum EFI_ACPI_6_0_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE = SIGNATURE_32(
1733         'N', 'F', 'I', 'T');
1734 /// "PMTT" Platform Memory Topology Table
1735 enum EFI_ACPI_6_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE = SIGNATURE_32('P', 'M',
1736         'T', 'T');
1737 /// "PSDT" Persistent System Description Table
1738 enum EFI_ACPI_6_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('P',
1739         'S', 'D', 'T');
1740 /// "RASF" ACPI RAS Feature Table
1741 enum EFI_ACPI_6_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE = SIGNATURE_32('R', 'A', 'S', 'F');
1742 /// "RSDT" Root System Description Table
1743 enum EFI_ACPI_6_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('R', 'S',
1744         'D', 'T');
1745 /// "SBST" Smart Battery Specification Table
1746 enum EFI_ACPI_6_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE = SIGNATURE_32('S', 'B',
1747         'S', 'T');
1748 /// "SLIT" System Locality Information Table
1749 enum EFI_ACPI_6_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE = SIGNATURE_32('S', 'L',
1750         'I', 'T');
1751 /// "SRAT" System Resource Affinity Table
1752 enum EFI_ACPI_6_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE = SIGNATURE_32('S', 'R',
1753         'A', 'T');
1754 /// "SSDT" Secondary System Description Table
1755 enum EFI_ACPI_6_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('S',
1756         'S', 'D', 'T');
1757 /// "XSDT" Extended System Description Table
1758 enum EFI_ACPI_6_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('X', 'S',
1759         'D', 'T');
1760 /// "BOOT" MS Simple Boot Spec
1761 enum EFI_ACPI_6_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE = SIGNATURE_32('B', 'O', 'O', 'T');
1762 /// "CSRT" MS Core System Resource Table
1763 enum EFI_ACPI_6_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE = SIGNATURE_32('C', 'S', 'R',
1764         'T');
1765 /// "DBG2" MS Debug Port 2 Spec
1766 enum EFI_ACPI_6_0_DEBUG_PORT_2_TABLE_SIGNATURE = SIGNATURE_32('D', 'B', 'G', '2');
1767 /// "DBGP" MS Debug Port Spec
1768 enum EFI_ACPI_6_0_DEBUG_PORT_TABLE_SIGNATURE = SIGNATURE_32('D', 'B', 'G', 'P');
1769 /// "DMAR" DMA Remapping Table
1770 enum EFI_ACPI_6_0_DMA_REMAPPING_TABLE_SIGNATURE = SIGNATURE_32('D', 'M', 'A', 'R');
1771 /// "DRTM" Dynamic Root of Trust for Measurement Table
1772 enum EFI_ACPI_6_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE = SIGNATURE_32(
1773         'D', 'R', 'T', 'M');
1774 /// "ETDT" Event Timer Description Table
1775 enum EFI_ACPI_6_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32('E', 'T',
1776         'D', 'T');
1777 /// "HPET" IA-PC High Precision Event Timer Table
1778 enum EFI_ACPI_6_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE = SIGNATURE_32('H', 'P',
1779         'E', 'T');
1780 /// "iBFT" iSCSI Boot Firmware Table
1781 enum EFI_ACPI_6_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE = SIGNATURE_32('i', 'B', 'F',
1782         'T');
1783 /// "IORT" Interrupt Source Override
1784 enum EFI_ACPI_6_0_INTERRUPT_SOURCE_OVERRIDE_SIGNATURE = SIGNATURE_32('I', 'O', 'R',
1785         'T');
1786 /// "IVRS" I/O Virtualization Reporting Structure
1787 enum EFI_ACPI_6_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE = SIGNATURE_32('I',
1788         'V', 'R', 'S');
1789 /// "LPIT" Low Power Idle Table
1790 enum EFI_ACPI_6_0_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE = SIGNATURE_32('L', 'P',
1791         'I', 'T');
1792 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
1793 enum EFI_ACPI_6_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE = SIGNATURE_32(
1794         'M', 'C', 'F', 'G');
1795 /// "MCHI" Management Controller Host Interface Table
1796 enum EFI_ACPI_6_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE = SIGNATURE_32(
1797         'M', 'C', 'H', 'I');
1798 /// "MSDM" MS Data Management Table
1799 enum EFI_ACPI_6_0_DATA_MANAGEMENT_TABLE_SIGNATURE = SIGNATURE_32('M', 'S', 'D', 'M');
1800 /// "SLIC" MS Software Licensing Table Specification
1801 enum EFI_ACPI_6_0_SOFTWARE_LICENSING_TABLE_SIGNATURE = SIGNATURE_32('S', 'L', 'I',
1802         'C');
1803 /// "SPCR" Serial Port Concole Redirection Table
1804 enum EFI_ACPI_6_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE = SIGNATURE_32('S',
1805         'P', 'C', 'R');
1806 /// "SPMI" Server Platform Management Interface Table
1807 enum EFI_ACPI_6_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE = SIGNATURE_32(
1808         'S', 'P', 'M', 'I');
1809 /// "STAO" _STA Override Table
1810 enum EFI_ACPI_6_0_STA_OVERRIDE_TABLE_SIGNATURE = SIGNATURE_32('S', 'T', 'A', 'O');
1811 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
1812 enum EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE = SIGNATURE_32(
1813         'T', 'C', 'P', 'A');
1814 /// "TPM2" Trusted Computing Platform 1 Table
1815 enum EFI_ACPI_6_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE = SIGNATURE_32('T',
1816         'P', 'M', '2');
1817 /// "UEFI" UEFI ACPI Data Table
1818 enum EFI_ACPI_6_0_UEFI_ACPI_DATA_TABLE_SIGNATURE = SIGNATURE_32('U', 'E', 'F', 'I');
1819 /// "WAET" Windows ACPI Emulated Devices Table
1820 enum EFI_ACPI_6_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE = SIGNATURE_32('W',
1821         'A', 'E', 'T');
1822 /// "WDAT" Watchdog Action Table
1823 enum EFI_ACPI_6_0_WATCHDOG_ACTION_TABLE_SIGNATURE = SIGNATURE_32('W', 'D', 'A', 'T');
1824 /// "WDRT" Watchdog Resource Table
1825 enum EFI_ACPI_6_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE = SIGNATURE_32('W', 'D', 'R', 'T');
1826 /// "WPBT" MS Platform Binary Table
1827 enum EFI_ACPI_6_0_PLATFORM_BINARY_TABLE_SIGNATURE = SIGNATURE_32('W', 'P', 'B', 'T');
1828 /// "XENV" Xen Project Table
1829 enum EFI_ACPI_6_0_XEN_PROJECT_TABLE_SIGNATURE = SIGNATURE_32('X', 'E', 'N', 'V');