xref: /illumos-gate/usr/src/boot/efi/include/IndustryStandard/Acpi62.h (revision 0886dcadf4b2cd677c3b944167f0d16ccb243616)
1 /** @file
2   ACPI 6.2 definitions from the ACPI Specification Revision 6.2 May, 2017.
3 
4   Copyright (c) 2017 - 2022, Intel Corporation. All rights reserved.<BR>
5   Copyright (c) 2020, ARM Ltd. All rights reserved.<BR>
6   SPDX-License-Identifier: BSD-2-Clause-Patent
7 **/
8 
9 #ifndef _ACPI_6_2_H_
10 #define _ACPI_6_2_H_
11 
12 #include <IndustryStandard/Acpi61.h>
13 
14 //
15 // Large Item Descriptor Name
16 //
17 #define ACPI_LARGE_PIN_FUNCTION_DESCRIPTOR_NAME             0x0D
18 #define ACPI_LARGE_PIN_CONFIGURATION_DESCRIPTOR_NAME        0x0F
19 #define ACPI_LARGE_PIN_GROUP_DESCRIPTOR_NAME                0x10
20 #define ACPI_LARGE_PIN_GROUP_FUNCTION_DESCRIPTOR_NAME       0x11
21 #define ACPI_LARGE_PIN_GROUP_CONFIGURATION_DESCRIPTOR_NAME  0x12
22 
23 //
24 // Large Item Descriptor Value
25 //
26 #define ACPI_PIN_FUNCTION_DESCRIPTOR             0x8D
27 #define ACPI_PIN_CONFIGURATION_DESCRIPTOR        0x8F
28 #define ACPI_PIN_GROUP_DESCRIPTOR                0x90
29 #define ACPI_PIN_GROUP_FUNCTION_DESCRIPTOR       0x91
30 #define ACPI_PIN_GROUP_CONFIGURATION_DESCRIPTOR  0x92
31 
32 #pragma pack(1)
33 
34 ///
35 /// Pin Function Descriptor
36 ///
37 typedef PACKED struct {
38   ACPI_LARGE_RESOURCE_HEADER    Header;
39   UINT8                         RevisionId;
40   UINT16                        Flags;
41   UINT8                         PinPullConfiguration;
42   UINT16                        FunctionNumber;
43   UINT16                        PinTableOffset;
44   UINT8                         ResourceSourceIndex;
45   UINT16                        ResourceSourceNameOffset;
46   UINT16                        VendorDataOffset;
47   UINT16                        VendorDataLength;
48 } EFI_ACPI_PIN_FUNCTION_DESCRIPTOR;
49 
50 ///
51 /// Pin Configuration Descriptor
52 ///
53 typedef PACKED struct {
54   ACPI_LARGE_RESOURCE_HEADER    Header;
55   UINT8                         RevisionId;
56   UINT16                        Flags;
57   UINT8                         PinConfigurationType;
58   UINT32                        PinConfigurationValue;
59   UINT16                        PinTableOffset;
60   UINT8                         ResourceSourceIndex;
61   UINT16                        ResourceSourceNameOffset;
62   UINT16                        VendorDataOffset;
63   UINT16                        VendorDataLength;
64 } EFI_ACPI_PIN_CONFIGURATION_DESCRIPTOR;
65 
66 ///
67 /// Pin Group Descriptor
68 ///
69 typedef PACKED struct {
70   ACPI_LARGE_RESOURCE_HEADER    Header;
71   UINT8                         RevisionId;
72   UINT16                        Flags;
73   UINT16                        PinTableOffset;
74   UINT16                        ResourceLabelOffset;
75   UINT16                        VendorDataOffset;
76   UINT16                        VendorDataLength;
77 } EFI_ACPI_PIN_GROUP_DESCRIPTOR;
78 
79 ///
80 /// Pin Group Function Descriptor
81 ///
82 typedef PACKED struct {
83   ACPI_LARGE_RESOURCE_HEADER    Header;
84   UINT8                         RevisionId;
85   UINT16                        Flags;
86   UINT16                        FunctionNumber;
87   UINT8                         ResourceSourceIndex;
88   UINT16                        ResourceSourceNameOffset;
89   UINT16                        ResourceSourceLabelOffset;
90   UINT16                        VendorDataOffset;
91   UINT16                        VendorDataLength;
92 } EFI_ACPI_PIN_GROUP_FUNCTION_DESCRIPTOR;
93 
94 ///
95 /// Pin Group Configuration Descriptor
96 ///
97 typedef PACKED struct {
98   ACPI_LARGE_RESOURCE_HEADER    Header;
99   UINT8                         RevisionId;
100   UINT16                        Flags;
101   UINT8                         PinConfigurationType;
102   UINT32                        PinConfigurationValue;
103   UINT8                         ResourceSourceIndex;
104   UINT16                        ResourceSourceNameOffset;
105   UINT16                        ResourceSourceLabelOffset;
106   UINT16                        VendorDataOffset;
107   UINT16                        VendorDataLength;
108 } EFI_ACPI_PIN_GROUP_CONFIGURATION_DESCRIPTOR;
109 
110 #pragma pack()
111 
112 //
113 // Ensure proper structure formats
114 //
115 #pragma pack(1)
116 
117 ///
118 /// ACPI 6.2 Generic Address Space definition
119 ///
120 typedef struct {
121   UINT8     AddressSpaceId;
122   UINT8     RegisterBitWidth;
123   UINT8     RegisterBitOffset;
124   UINT8     AccessSize;
125   UINT64    Address;
126 } EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE;
127 
128 //
129 // Generic Address Space Address IDs
130 //
131 #define EFI_ACPI_6_2_SYSTEM_MEMORY                   0
132 #define EFI_ACPI_6_2_SYSTEM_IO                       1
133 #define EFI_ACPI_6_2_PCI_CONFIGURATION_SPACE         2
134 #define EFI_ACPI_6_2_EMBEDDED_CONTROLLER             3
135 #define EFI_ACPI_6_2_SMBUS                           4
136 #define EFI_ACPI_6_2_PLATFORM_COMMUNICATION_CHANNEL  0x0A
137 #define EFI_ACPI_6_2_FUNCTIONAL_FIXED_HARDWARE       0x7F
138 
139 //
140 // Generic Address Space Access Sizes
141 //
142 #define EFI_ACPI_6_2_UNDEFINED  0
143 #define EFI_ACPI_6_2_BYTE       1
144 #define EFI_ACPI_6_2_WORD       2
145 #define EFI_ACPI_6_2_DWORD      3
146 #define EFI_ACPI_6_2_QWORD      4
147 
148 //
149 // ACPI 6.2 table structures
150 //
151 
152 ///
153 /// Root System Description Pointer Structure
154 ///
155 typedef struct {
156   UINT64    Signature;
157   UINT8     Checksum;
158   UINT8     OemId[6];
159   UINT8     Revision;
160   UINT32    RsdtAddress;
161   UINT32    Length;
162   UINT64    XsdtAddress;
163   UINT8     ExtendedChecksum;
164   UINT8     Reserved[3];
165 } EFI_ACPI_6_2_ROOT_SYSTEM_DESCRIPTION_POINTER;
166 
167 ///
168 /// RSD_PTR Revision (as defined in ACPI 6.2 spec.)
169 ///
170 #define EFI_ACPI_6_2_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION  0x02 ///< ACPISpec (Revision 6.2) says current value is 2
171 
172 ///
173 /// Common table header, this prefaces all ACPI tables, including FACS, but
174 /// excluding the RSD PTR structure
175 ///
176 typedef struct {
177   UINT32    Signature;
178   UINT32    Length;
179 } EFI_ACPI_6_2_COMMON_HEADER;
180 
181 //
182 // Root System Description Table
183 // No definition needed as it is a common description table header, the same with
184 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
185 //
186 
187 ///
188 /// RSDT Revision (as defined in ACPI 6.2 spec.)
189 ///
190 #define EFI_ACPI_6_2_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
191 
192 //
193 // Extended System Description Table
194 // No definition needed as it is a common description table header, the same with
195 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
196 //
197 
198 ///
199 /// XSDT Revision (as defined in ACPI 6.2 spec.)
200 ///
201 #define EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01
202 
203 ///
204 /// Fixed ACPI Description Table Structure (FADT)
205 ///
206 typedef struct {
207   EFI_ACPI_DESCRIPTION_HEADER               Header;
208   UINT32                                    FirmwareCtrl;
209   UINT32                                    Dsdt;
210   UINT8                                     Reserved0;
211   UINT8                                     PreferredPmProfile;
212   UINT16                                    SciInt;
213   UINT32                                    SmiCmd;
214   UINT8                                     AcpiEnable;
215   UINT8                                     AcpiDisable;
216   UINT8                                     S4BiosReq;
217   UINT8                                     PstateCnt;
218   UINT32                                    Pm1aEvtBlk;
219   UINT32                                    Pm1bEvtBlk;
220   UINT32                                    Pm1aCntBlk;
221   UINT32                                    Pm1bCntBlk;
222   UINT32                                    Pm2CntBlk;
223   UINT32                                    PmTmrBlk;
224   UINT32                                    Gpe0Blk;
225   UINT32                                    Gpe1Blk;
226   UINT8                                     Pm1EvtLen;
227   UINT8                                     Pm1CntLen;
228   UINT8                                     Pm2CntLen;
229   UINT8                                     PmTmrLen;
230   UINT8                                     Gpe0BlkLen;
231   UINT8                                     Gpe1BlkLen;
232   UINT8                                     Gpe1Base;
233   UINT8                                     CstCnt;
234   UINT16                                    PLvl2Lat;
235   UINT16                                    PLvl3Lat;
236   UINT16                                    FlushSize;
237   UINT16                                    FlushStride;
238   UINT8                                     DutyOffset;
239   UINT8                                     DutyWidth;
240   UINT8                                     DayAlrm;
241   UINT8                                     MonAlrm;
242   UINT8                                     Century;
243   UINT16                                    IaPcBootArch;
244   UINT8                                     Reserved1;
245   UINT32                                    Flags;
246   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    ResetReg;
247   UINT8                                     ResetValue;
248   UINT16                                    ArmBootArch;
249   UINT8                                     MinorVersion;
250   UINT64                                    XFirmwareCtrl;
251   UINT64                                    XDsdt;
252   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPm1aEvtBlk;
253   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPm1bEvtBlk;
254   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPm1aCntBlk;
255   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPm1bCntBlk;
256   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPm2CntBlk;
257   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XPmTmrBlk;
258   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XGpe0Blk;
259   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    XGpe1Blk;
260   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    SleepControlReg;
261   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    SleepStatusReg;
262   UINT64                                    HypervisorVendorIdentity;
263 } EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE;
264 
265 ///
266 /// FADT Version (as defined in ACPI 6.2 spec.)
267 ///
268 #define EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION        0x06
269 #define EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION  0x02
270 
271 //
272 // Fixed ACPI Description Table Preferred Power Management Profile
273 //
274 #define EFI_ACPI_6_2_PM_PROFILE_UNSPECIFIED         0
275 #define EFI_ACPI_6_2_PM_PROFILE_DESKTOP             1
276 #define EFI_ACPI_6_2_PM_PROFILE_MOBILE              2
277 #define EFI_ACPI_6_2_PM_PROFILE_WORKSTATION         3
278 #define EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER   4
279 #define EFI_ACPI_6_2_PM_PROFILE_SOHO_SERVER         5
280 #define EFI_ACPI_6_2_PM_PROFILE_APPLIANCE_PC        6
281 #define EFI_ACPI_6_2_PM_PROFILE_PERFORMANCE_SERVER  7
282 #define EFI_ACPI_6_2_PM_PROFILE_TABLET              8
283 
284 //
285 // Fixed ACPI Description Table Boot Architecture Flags
286 // All other bits are reserved and must be set to 0.
287 //
288 #define EFI_ACPI_6_2_LEGACY_DEVICES        BIT0
289 #define EFI_ACPI_6_2_8042                  BIT1
290 #define EFI_ACPI_6_2_VGA_NOT_PRESENT       BIT2
291 #define EFI_ACPI_6_2_MSI_NOT_SUPPORTED     BIT3
292 #define EFI_ACPI_6_2_PCIE_ASPM_CONTROLS    BIT4
293 #define EFI_ACPI_6_2_CMOS_RTC_NOT_PRESENT  BIT5
294 
295 //
296 // Fixed ACPI Description Table Arm Boot Architecture Flags
297 // All other bits are reserved and must be set to 0.
298 //
299 #define EFI_ACPI_6_2_ARM_PSCI_COMPLIANT  BIT0
300 #define EFI_ACPI_6_2_ARM_PSCI_USE_HVC    BIT1
301 
302 //
303 // Fixed ACPI Description Table Fixed Feature Flags
304 // All other bits are reserved and must be set to 0.
305 //
306 #define EFI_ACPI_6_2_WBINVD                                BIT0
307 #define EFI_ACPI_6_2_WBINVD_FLUSH                          BIT1
308 #define EFI_ACPI_6_2_PROC_C1                               BIT2
309 #define EFI_ACPI_6_2_P_LVL2_UP                             BIT3
310 #define EFI_ACPI_6_2_PWR_BUTTON                            BIT4
311 #define EFI_ACPI_6_2_SLP_BUTTON                            BIT5
312 #define EFI_ACPI_6_2_FIX_RTC                               BIT6
313 #define EFI_ACPI_6_2_RTC_S4                                BIT7
314 #define EFI_ACPI_6_2_TMR_VAL_EXT                           BIT8
315 #define EFI_ACPI_6_2_DCK_CAP                               BIT9
316 #define EFI_ACPI_6_2_RESET_REG_SUP                         BIT10
317 #define EFI_ACPI_6_2_SEALED_CASE                           BIT11
318 #define EFI_ACPI_6_2_HEADLESS                              BIT12
319 #define EFI_ACPI_6_2_CPU_SW_SLP                            BIT13
320 #define EFI_ACPI_6_2_PCI_EXP_WAK                           BIT14
321 #define EFI_ACPI_6_2_USE_PLATFORM_CLOCK                    BIT15
322 #define EFI_ACPI_6_2_S4_RTC_STS_VALID                      BIT16
323 #define EFI_ACPI_6_2_REMOTE_POWER_ON_CAPABLE               BIT17
324 #define EFI_ACPI_6_2_FORCE_APIC_CLUSTER_MODEL              BIT18
325 #define EFI_ACPI_6_2_FORCE_APIC_PHYSICAL_DESTINATION_MODE  BIT19
326 #define EFI_ACPI_6_2_HW_REDUCED_ACPI                       BIT20
327 #define EFI_ACPI_6_2_LOW_POWER_S0_IDLE_CAPABLE             BIT21
328 
329 ///
330 /// Firmware ACPI Control Structure
331 ///
332 typedef struct {
333   UINT32    Signature;
334   UINT32    Length;
335   UINT32    HardwareSignature;
336   UINT32    FirmwareWakingVector;
337   UINT32    GlobalLock;
338   UINT32    Flags;
339   UINT64    XFirmwareWakingVector;
340   UINT8     Version;
341   UINT8     Reserved0[3];
342   UINT32    OspmFlags;
343   UINT8     Reserved1[24];
344 } EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE;
345 
346 ///
347 /// FACS Version (as defined in ACPI 6.2 spec.)
348 ///
349 #define EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
350 
351 ///
352 /// Firmware Control Structure Feature Flags
353 /// All other bits are reserved and must be set to 0.
354 ///
355 #define EFI_ACPI_6_2_S4BIOS_F                BIT0
356 #define EFI_ACPI_6_2_64BIT_WAKE_SUPPORTED_F  BIT1
357 
358 ///
359 /// OSPM Enabled Firmware Control Structure Flags
360 /// All other bits are reserved and must be set to 0.
361 ///
362 #define EFI_ACPI_6_2_OSPM_64BIT_WAKE_F  BIT0
363 
364 //
365 // Differentiated System Description Table,
366 // Secondary System Description Table
367 // and Persistent System Description Table,
368 // no definition needed as they are common description table header, the same with
369 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
370 //
371 #define EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION  0x02
372 #define EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION       0x02
373 
374 ///
375 /// Multiple APIC Description Table header definition.  The rest of the table
376 /// must be defined in a platform specific manner.
377 ///
378 typedef struct {
379   EFI_ACPI_DESCRIPTION_HEADER    Header;
380   UINT32                         LocalApicAddress;
381   UINT32                         Flags;
382 } EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
383 
384 ///
385 /// MADT Revision (as defined in ACPI 6.2 spec.)
386 ///
387 #define EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION  0x04
388 
389 ///
390 /// Multiple APIC Flags
391 /// All other bits are reserved and must be set to 0.
392 ///
393 #define EFI_ACPI_6_2_PCAT_COMPAT  BIT0
394 
395 //
396 // Multiple APIC Description Table APIC structure types
397 // All other values between 0x0D and 0x7F are reserved and
398 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
399 //
400 #define EFI_ACPI_6_2_PROCESSOR_LOCAL_APIC           0x00
401 #define EFI_ACPI_6_2_IO_APIC                        0x01
402 #define EFI_ACPI_6_2_INTERRUPT_SOURCE_OVERRIDE      0x02
403 #define EFI_ACPI_6_2_NON_MASKABLE_INTERRUPT_SOURCE  0x03
404 #define EFI_ACPI_6_2_LOCAL_APIC_NMI                 0x04
405 #define EFI_ACPI_6_2_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
406 #define EFI_ACPI_6_2_IO_SAPIC                       0x06
407 #define EFI_ACPI_6_2_LOCAL_SAPIC                    0x07
408 #define EFI_ACPI_6_2_PLATFORM_INTERRUPT_SOURCES     0x08
409 #define EFI_ACPI_6_2_PROCESSOR_LOCAL_X2APIC         0x09
410 #define EFI_ACPI_6_2_LOCAL_X2APIC_NMI               0x0A
411 #define EFI_ACPI_6_2_GIC                            0x0B
412 #define EFI_ACPI_6_2_GICD                           0x0C
413 #define EFI_ACPI_6_2_GIC_MSI_FRAME                  0x0D
414 #define EFI_ACPI_6_2_GICR                           0x0E
415 #define EFI_ACPI_6_2_GIC_ITS                        0x0F
416 
417 //
418 // APIC Structure Definitions
419 //
420 
421 ///
422 /// Processor Local APIC Structure Definition
423 ///
424 typedef struct {
425   UINT8     Type;
426   UINT8     Length;
427   UINT8     AcpiProcessorUid;
428   UINT8     ApicId;
429   UINT32    Flags;
430 } EFI_ACPI_6_2_PROCESSOR_LOCAL_APIC_STRUCTURE;
431 
432 ///
433 /// Local APIC Flags.  All other bits are reserved and must be 0.
434 ///
435 #define EFI_ACPI_6_2_LOCAL_APIC_ENABLED  BIT0
436 
437 ///
438 /// IO APIC Structure
439 ///
440 typedef struct {
441   UINT8     Type;
442   UINT8     Length;
443   UINT8     IoApicId;
444   UINT8     Reserved;
445   UINT32    IoApicAddress;
446   UINT32    GlobalSystemInterruptBase;
447 } EFI_ACPI_6_2_IO_APIC_STRUCTURE;
448 
449 ///
450 /// Interrupt Source Override Structure
451 ///
452 typedef struct {
453   UINT8     Type;
454   UINT8     Length;
455   UINT8     Bus;
456   UINT8     Source;
457   UINT32    GlobalSystemInterrupt;
458   UINT16    Flags;
459 } EFI_ACPI_6_2_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
460 
461 ///
462 /// Platform Interrupt Sources Structure Definition
463 ///
464 typedef struct {
465   UINT8     Type;
466   UINT8     Length;
467   UINT16    Flags;
468   UINT8     InterruptType;
469   UINT8     ProcessorId;
470   UINT8     ProcessorEid;
471   UINT8     IoSapicVector;
472   UINT32    GlobalSystemInterrupt;
473   UINT32    PlatformInterruptSourceFlags;
474   UINT8     CpeiProcessorOverride;
475   UINT8     Reserved[31];
476 } EFI_ACPI_6_2_PLATFORM_INTERRUPT_APIC_STRUCTURE;
477 
478 //
479 // MPS INTI flags.
480 // All other bits are reserved and must be set to 0.
481 //
482 #define EFI_ACPI_6_2_POLARITY      (3 << 0)
483 #define EFI_ACPI_6_2_TRIGGER_MODE  (3 << 2)
484 
485 ///
486 /// Non-Maskable Interrupt Source Structure
487 ///
488 typedef struct {
489   UINT8     Type;
490   UINT8     Length;
491   UINT16    Flags;
492   UINT32    GlobalSystemInterrupt;
493 } EFI_ACPI_6_2_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
494 
495 ///
496 /// Local APIC NMI Structure
497 ///
498 typedef struct {
499   UINT8     Type;
500   UINT8     Length;
501   UINT8     AcpiProcessorUid;
502   UINT16    Flags;
503   UINT8     LocalApicLint;
504 } EFI_ACPI_6_2_LOCAL_APIC_NMI_STRUCTURE;
505 
506 ///
507 /// Local APIC Address Override Structure
508 ///
509 typedef struct {
510   UINT8     Type;
511   UINT8     Length;
512   UINT16    Reserved;
513   UINT64    LocalApicAddress;
514 } EFI_ACPI_6_2_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
515 
516 ///
517 /// IO SAPIC Structure
518 ///
519 typedef struct {
520   UINT8     Type;
521   UINT8     Length;
522   UINT8     IoApicId;
523   UINT8     Reserved;
524   UINT32    GlobalSystemInterruptBase;
525   UINT64    IoSapicAddress;
526 } EFI_ACPI_6_2_IO_SAPIC_STRUCTURE;
527 
528 ///
529 /// Local SAPIC Structure
530 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
531 ///
532 typedef struct {
533   UINT8     Type;
534   UINT8     Length;
535   UINT8     AcpiProcessorId;
536   UINT8     LocalSapicId;
537   UINT8     LocalSapicEid;
538   UINT8     Reserved[3];
539   UINT32    Flags;
540   UINT32    ACPIProcessorUIDValue;
541 } EFI_ACPI_6_2_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
542 
543 ///
544 /// Platform Interrupt Sources Structure
545 ///
546 typedef struct {
547   UINT8     Type;
548   UINT8     Length;
549   UINT16    Flags;
550   UINT8     InterruptType;
551   UINT8     ProcessorId;
552   UINT8     ProcessorEid;
553   UINT8     IoSapicVector;
554   UINT32    GlobalSystemInterrupt;
555   UINT32    PlatformInterruptSourceFlags;
556 } EFI_ACPI_6_2_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
557 
558 ///
559 /// Platform Interrupt Source Flags.
560 /// All other bits are reserved and must be set to 0.
561 ///
562 #define EFI_ACPI_6_2_CPEI_PROCESSOR_OVERRIDE  BIT0
563 
564 ///
565 /// Processor Local x2APIC Structure Definition
566 ///
567 typedef struct {
568   UINT8     Type;
569   UINT8     Length;
570   UINT8     Reserved[2];
571   UINT32    X2ApicId;
572   UINT32    Flags;
573   UINT32    AcpiProcessorUid;
574 } EFI_ACPI_6_2_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
575 
576 ///
577 /// Local x2APIC NMI Structure
578 ///
579 typedef struct {
580   UINT8     Type;
581   UINT8     Length;
582   UINT16    Flags;
583   UINT32    AcpiProcessorUid;
584   UINT8     LocalX2ApicLint;
585   UINT8     Reserved[3];
586 } EFI_ACPI_6_2_LOCAL_X2APIC_NMI_STRUCTURE;
587 
588 ///
589 /// GIC Structure
590 ///
591 typedef struct {
592   UINT8     Type;
593   UINT8     Length;
594   UINT16    Reserved;
595   UINT32    CPUInterfaceNumber;
596   UINT32    AcpiProcessorUid;
597   UINT32    Flags;
598   UINT32    ParkingProtocolVersion;
599   UINT32    PerformanceInterruptGsiv;
600   UINT64    ParkedAddress;
601   UINT64    PhysicalBaseAddress;
602   UINT64    GICV;
603   UINT64    GICH;
604   UINT32    VGICMaintenanceInterrupt;
605   UINT64    GICRBaseAddress;
606   UINT64    MPIDR;
607   UINT8     ProcessorPowerEfficiencyClass;
608   UINT8     Reserved2[3];
609 } EFI_ACPI_6_2_GIC_STRUCTURE;
610 
611 ///
612 /// GIC Flags.  All other bits are reserved and must be 0.
613 ///
614 #define EFI_ACPI_6_2_GIC_ENABLED                            BIT0
615 #define EFI_ACPI_6_2_PERFORMANCE_INTERRUPT_MODEL            BIT1
616 #define EFI_ACPI_6_2_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS  BIT2
617 
618 ///
619 /// GIC Distributor Structure
620 ///
621 typedef struct {
622   UINT8     Type;
623   UINT8     Length;
624   UINT16    Reserved1;
625   UINT32    GicId;
626   UINT64    PhysicalBaseAddress;
627   UINT32    SystemVectorBase;
628   UINT8     GicVersion;
629   UINT8     Reserved2[3];
630 } EFI_ACPI_6_2_GIC_DISTRIBUTOR_STRUCTURE;
631 
632 ///
633 /// GIC Version
634 ///
635 #define EFI_ACPI_6_2_GIC_V1  0x01
636 #define EFI_ACPI_6_2_GIC_V2  0x02
637 #define EFI_ACPI_6_2_GIC_V3  0x03
638 #define EFI_ACPI_6_2_GIC_V4  0x04
639 
640 ///
641 /// GIC MSI Frame Structure
642 ///
643 typedef struct {
644   UINT8     Type;
645   UINT8     Length;
646   UINT16    Reserved1;
647   UINT32    GicMsiFrameId;
648   UINT64    PhysicalBaseAddress;
649   UINT32    Flags;
650   UINT16    SPICount;
651   UINT16    SPIBase;
652 } EFI_ACPI_6_2_GIC_MSI_FRAME_STRUCTURE;
653 
654 ///
655 /// GIC MSI Frame Flags.  All other bits are reserved and must be 0.
656 ///
657 #define EFI_ACPI_6_2_SPI_COUNT_BASE_SELECT  BIT0
658 
659 ///
660 /// GICR Structure
661 ///
662 typedef struct {
663   UINT8     Type;
664   UINT8     Length;
665   UINT16    Reserved;
666   UINT64    DiscoveryRangeBaseAddress;
667   UINT32    DiscoveryRangeLength;
668 } EFI_ACPI_6_2_GICR_STRUCTURE;
669 
670 ///
671 /// GIC Interrupt Translation Service Structure
672 ///
673 typedef struct {
674   UINT8     Type;
675   UINT8     Length;
676   UINT16    Reserved;
677   UINT32    GicItsId;
678   UINT64    PhysicalBaseAddress;
679   UINT32    Reserved2;
680 } EFI_ACPI_6_2_GIC_ITS_STRUCTURE;
681 
682 ///
683 /// Smart Battery Description Table (SBST)
684 ///
685 typedef struct {
686   EFI_ACPI_DESCRIPTION_HEADER    Header;
687   UINT32                         WarningEnergyLevel;
688   UINT32                         LowEnergyLevel;
689   UINT32                         CriticalEnergyLevel;
690 } EFI_ACPI_6_2_SMART_BATTERY_DESCRIPTION_TABLE;
691 
692 ///
693 /// SBST Version (as defined in ACPI 6.2 spec.)
694 ///
695 #define EFI_ACPI_6_2_SMART_BATTERY_DESCRIPTION_TABLE_REVISION  0x01
696 
697 ///
698 /// Embedded Controller Boot Resources Table (ECDT)
699 /// The table is followed by a null terminated ASCII string that contains
700 /// a fully qualified reference to the name space object.
701 ///
702 typedef struct {
703   EFI_ACPI_DESCRIPTION_HEADER               Header;
704   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    EcControl;
705   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    EcData;
706   UINT32                                    Uid;
707   UINT8                                     GpeBit;
708 } EFI_ACPI_6_2_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
709 
710 ///
711 /// ECDT Version (as defined in ACPI 6.2 spec.)
712 ///
713 #define EFI_ACPI_6_2_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
714 
715 ///
716 /// System Resource Affinity Table (SRAT).  The rest of the table
717 /// must be defined in a platform specific manner.
718 ///
719 typedef struct {
720   EFI_ACPI_DESCRIPTION_HEADER    Header;
721   UINT32                         Reserved1; ///< Must be set to 1
722   UINT64                         Reserved2;
723 } EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
724 
725 ///
726 /// SRAT Version (as defined in ACPI 6.2 spec.)
727 ///
728 #define EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
729 
730 //
731 // SRAT structure types.
732 // All other values between 0x05 an 0xFF are reserved and
733 // will be ignored by OSPM.
734 //
735 #define EFI_ACPI_6_2_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
736 #define EFI_ACPI_6_2_MEMORY_AFFINITY                      0x01
737 #define EFI_ACPI_6_2_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
738 #define EFI_ACPI_6_2_GICC_AFFINITY                        0x03
739 #define EFI_ACPI_6_2_GIC_ITS_AFFINITY                     0x04
740 
741 ///
742 /// Processor Local APIC/SAPIC Affinity Structure Definition
743 ///
744 typedef struct {
745   UINT8     Type;
746   UINT8     Length;
747   UINT8     ProximityDomain7To0;
748   UINT8     ApicId;
749   UINT32    Flags;
750   UINT8     LocalSapicEid;
751   UINT8     ProximityDomain31To8[3];
752   UINT32    ClockDomain;
753 } EFI_ACPI_6_2_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
754 
755 ///
756 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
757 ///
758 #define EFI_ACPI_6_2_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED  (1 << 0)
759 
760 ///
761 /// Memory Affinity Structure Definition
762 ///
763 typedef struct {
764   UINT8     Type;
765   UINT8     Length;
766   UINT32    ProximityDomain;
767   UINT16    Reserved1;
768   UINT32    AddressBaseLow;
769   UINT32    AddressBaseHigh;
770   UINT32    LengthLow;
771   UINT32    LengthHigh;
772   UINT32    Reserved2;
773   UINT32    Flags;
774   UINT64    Reserved3;
775 } EFI_ACPI_6_2_MEMORY_AFFINITY_STRUCTURE;
776 
777 //
778 // Memory Flags.  All other bits are reserved and must be 0.
779 //
780 #define EFI_ACPI_6_2_MEMORY_ENABLED        (1 << 0)
781 #define EFI_ACPI_6_2_MEMORY_HOT_PLUGGABLE  (1 << 1)
782 #define EFI_ACPI_6_2_MEMORY_NONVOLATILE    (1 << 2)
783 
784 ///
785 /// Processor Local x2APIC Affinity Structure Definition
786 ///
787 typedef struct {
788   UINT8     Type;
789   UINT8     Length;
790   UINT8     Reserved1[2];
791   UINT32    ProximityDomain;
792   UINT32    X2ApicId;
793   UINT32    Flags;
794   UINT32    ClockDomain;
795   UINT8     Reserved2[4];
796 } EFI_ACPI_6_2_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
797 
798 ///
799 /// GICC Affinity Structure Definition
800 ///
801 typedef struct {
802   UINT8     Type;
803   UINT8     Length;
804   UINT32    ProximityDomain;
805   UINT32    AcpiProcessorUid;
806   UINT32    Flags;
807   UINT32    ClockDomain;
808 } EFI_ACPI_6_2_GICC_AFFINITY_STRUCTURE;
809 
810 ///
811 /// GICC Flags.  All other bits are reserved and must be 0.
812 ///
813 #define EFI_ACPI_6_2_GICC_ENABLED  (1 << 0)
814 
815 ///
816 /// GIC Interrupt Translation Service (ITS) Affinity Structure Definition
817 ///
818 typedef struct {
819   UINT8     Type;
820   UINT8     Length;
821   UINT32    ProximityDomain;
822   UINT8     Reserved[2];
823   UINT32    ItsId;
824 } EFI_ACPI_6_2_GIC_ITS_AFFINITY_STRUCTURE;
825 
826 ///
827 /// System Locality Distance Information Table (SLIT).
828 /// The rest of the table is a matrix.
829 ///
830 typedef struct {
831   EFI_ACPI_DESCRIPTION_HEADER    Header;
832   UINT64                         NumberOfSystemLocalities;
833 } EFI_ACPI_6_2_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
834 
835 ///
836 /// SLIT Version (as defined in ACPI 6.2 spec.)
837 ///
838 #define EFI_ACPI_6_2_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
839 
840 ///
841 /// Corrected Platform Error Polling Table (CPEP)
842 ///
843 typedef struct {
844   EFI_ACPI_DESCRIPTION_HEADER    Header;
845   UINT8                          Reserved[8];
846 } EFI_ACPI_6_2_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
847 
848 ///
849 /// CPEP Version (as defined in ACPI 6.2 spec.)
850 ///
851 #define EFI_ACPI_6_2_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION  0x01
852 
853 //
854 // CPEP processor structure types.
855 //
856 #define EFI_ACPI_6_2_CPEP_PROCESSOR_APIC_SAPIC  0x00
857 
858 ///
859 /// Corrected Platform Error Polling Processor Structure Definition
860 ///
861 typedef struct {
862   UINT8     Type;
863   UINT8     Length;
864   UINT8     ProcessorId;
865   UINT8     ProcessorEid;
866   UINT32    PollingInterval;
867 } EFI_ACPI_6_2_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
868 
869 ///
870 /// Maximum System Characteristics Table (MSCT)
871 ///
872 typedef struct {
873   EFI_ACPI_DESCRIPTION_HEADER    Header;
874   UINT32                         OffsetProxDomInfo;
875   UINT32                         MaximumNumberOfProximityDomains;
876   UINT32                         MaximumNumberOfClockDomains;
877   UINT64                         MaximumPhysicalAddress;
878 } EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
879 
880 ///
881 /// MSCT Version (as defined in ACPI 6.2 spec.)
882 ///
883 #define EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION  0x01
884 
885 ///
886 /// Maximum Proximity Domain Information Structure Definition
887 ///
888 typedef struct {
889   UINT8     Revision;
890   UINT8     Length;
891   UINT32    ProximityDomainRangeLow;
892   UINT32    ProximityDomainRangeHigh;
893   UINT32    MaximumProcessorCapacity;
894   UINT64    MaximumMemoryCapacity;
895 } EFI_ACPI_6_2_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
896 
897 ///
898 /// ACPI RAS Feature Table definition.
899 ///
900 typedef struct {
901   EFI_ACPI_DESCRIPTION_HEADER    Header;
902   UINT8                          PlatformCommunicationChannelIdentifier[12];
903 } EFI_ACPI_6_2_RAS_FEATURE_TABLE;
904 
905 ///
906 /// RASF Version (as defined in ACPI 6.2 spec.)
907 ///
908 #define EFI_ACPI_6_2_RAS_FEATURE_TABLE_REVISION  0x01
909 
910 ///
911 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
912 ///
913 typedef struct {
914   UINT32    Signature;
915   UINT16    Command;
916   UINT16    Status;
917   UINT16    Version;
918   UINT8     RASCapabilities[16];
919   UINT8     SetRASCapabilities[16];
920   UINT16    NumberOfRASFParameterBlocks;
921   UINT32    SetRASCapabilitiesStatus;
922 } EFI_ACPI_6_2_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
923 
924 ///
925 /// ACPI RASF PCC command code
926 ///
927 #define EFI_ACPI_6_2_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
928 
929 ///
930 /// ACPI RASF Platform RAS Capabilities
931 ///
932 #define EFI_ACPI_6_2_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPORTED                          BIT0
933 #define EFI_ACPI_6_2_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPORTED_AND_EXPOSED_TO_SOFTWARE  BIT1
934 #define EFI_ACPI_6_2_RASF_PLATFORM_RAS_CAPABILITY_CPU_CACHE_FLUSH_TO_NVDIMM_DURABILITY_ON_POWER_LOSS             BIT2
935 #define EFI_ACPI_6_2_RASF_PLATFORM_RAS_CAPABILITY_MEMORY_CONTROLLER_FLUSH_TO_NVDIMM_DURABILITY_ON_POWER_LOSS     BIT3
936 #define EFI_ACPI_6_2_RASF_PLATFORM_RAS_CAPABILITY_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_HARDWARE_MIRRORING          BIT4
937 
938 ///
939 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
940 ///
941 typedef struct {
942   UINT16    Type;
943   UINT16    Version;
944   UINT16    Length;
945   UINT16    PatrolScrubCommand;
946   UINT64    RequestedAddressRange[2];
947   UINT64    ActualAddressRange[2];
948   UINT16    Flags;
949   UINT8     RequestedSpeed;
950 } EFI_ACPI_6_2_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
951 
952 ///
953 /// ACPI RASF Patrol Scrub command
954 ///
955 #define EFI_ACPI_6_2_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS  0x01
956 #define EFI_ACPI_6_2_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER  0x02
957 #define EFI_ACPI_6_2_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER   0x03
958 
959 ///
960 /// Memory Power State Table definition.
961 ///
962 typedef struct {
963   EFI_ACPI_DESCRIPTION_HEADER    Header;
964   UINT8                          PlatformCommunicationChannelIdentifier;
965   UINT8                          Reserved[3];
966   // Memory Power Node Structure
967   // Memory Power State Characteristics
968 } EFI_ACPI_6_2_MEMORY_POWER_STATUS_TABLE;
969 
970 ///
971 /// MPST Version (as defined in ACPI 6.2 spec.)
972 ///
973 #define EFI_ACPI_6_2_MEMORY_POWER_STATE_TABLE_REVISION  0x01
974 
975 ///
976 /// MPST Platform Communication Channel Shared Memory Region definition.
977 ///
978 typedef struct {
979   UINT32    Signature;
980   UINT16    Command;
981   UINT16    Status;
982   UINT32    MemoryPowerCommandRegister;
983   UINT32    MemoryPowerStatusRegister;
984   UINT32    PowerStateId;
985   UINT32    MemoryPowerNodeId;
986   UINT64    MemoryEnergyConsumed;
987   UINT64    ExpectedAveragePowerComsuned;
988 } EFI_ACPI_6_2_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
989 
990 ///
991 /// ACPI MPST PCC command code
992 ///
993 #define EFI_ACPI_6_2_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
994 
995 ///
996 /// ACPI MPST Memory Power command
997 ///
998 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE      0x01
999 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE      0x02
1000 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED  0x03
1001 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED  0x04
1002 
1003 ///
1004 /// MPST Memory Power Node Table
1005 ///
1006 typedef struct {
1007   UINT8    PowerStateValue;
1008   UINT8    PowerStateInformationIndex;
1009 } EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE;
1010 
1011 typedef struct {
1012   UINT8     Flag;
1013   UINT8     Reserved;
1014   UINT16    MemoryPowerNodeId;
1015   UINT32    Length;
1016   UINT64    AddressBase;
1017   UINT64    AddressLength;
1018   UINT32    NumberOfPowerStates;
1019   UINT32    NumberOfPhysicalComponents;
1020   // EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
1021   // UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
1022 } EFI_ACPI_6_2_MPST_MEMORY_POWER_STRUCTURE;
1023 
1024 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE         0x01
1025 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED  0x02
1026 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE  0x04
1027 
1028 typedef struct {
1029   UINT16    MemoryPowerNodeCount;
1030   UINT8     Reserved[2];
1031 } EFI_ACPI_6_2_MPST_MEMORY_POWER_NODE_TABLE;
1032 
1033 ///
1034 /// MPST Memory Power State Characteristics Table
1035 ///
1036 typedef struct {
1037   UINT8     PowerStateStructureID;
1038   UINT8     Flag;
1039   UINT16    Reserved;
1040   UINT32    AveragePowerConsumedInMPS0;
1041   UINT32    RelativePowerSavingToMPS0;
1042   UINT64    ExitLatencyToMPS0;
1043 } EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
1044 
1045 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED             0x01
1046 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY  0x02
1047 #define EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT   0x04
1048 
1049 typedef struct {
1050   UINT16    MemoryPowerStateCharacteristicsCount;
1051   UINT8     Reserved[2];
1052 } EFI_ACPI_6_2_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
1053 
1054 ///
1055 /// Memory Topology Table definition.
1056 ///
1057 typedef struct {
1058   EFI_ACPI_DESCRIPTION_HEADER    Header;
1059   UINT32                         Reserved;
1060 } EFI_ACPI_6_2_MEMORY_TOPOLOGY_TABLE;
1061 
1062 ///
1063 /// PMTT Version (as defined in ACPI 6.2 spec.)
1064 ///
1065 #define EFI_ACPI_6_2_MEMORY_TOPOLOGY_TABLE_REVISION  0x01
1066 
1067 ///
1068 /// Common Memory Aggregator Device Structure.
1069 ///
1070 typedef struct {
1071   UINT8     Type;
1072   UINT8     Reserved;
1073   UINT16    Length;
1074   UINT16    Flags;
1075   UINT16    Reserved1;
1076 } EFI_ACPI_6_2_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1077 
1078 ///
1079 /// Memory Aggregator Device Type
1080 ///
1081 #define EFI_ACPI_6_2_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET             0x0
1082 #define EFI_ACPI_6_2_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER  0x1
1083 #define EFI_ACPI_6_2_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM               0x2
1084 
1085 ///
1086 /// Socket Memory Aggregator Device Structure.
1087 ///
1088 typedef struct {
1089   EFI_ACPI_6_2_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    Header;
1090   UINT16                                                         SocketIdentifier;
1091   UINT16                                                         Reserved;
1092   // EFI_ACPI_6_2_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
1093 } EFI_ACPI_6_2_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1094 
1095 ///
1096 /// MemoryController Memory Aggregator Device Structure.
1097 ///
1098 typedef struct {
1099   EFI_ACPI_6_2_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    Header;
1100   UINT32                                                         ReadLatency;
1101   UINT32                                                         WriteLatency;
1102   UINT32                                                         ReadBandwidth;
1103   UINT32                                                         WriteBandwidth;
1104   UINT16                                                         OptimalAccessUnit;
1105   UINT16                                                         OptimalAccessAlignment;
1106   UINT16                                                         Reserved;
1107   UINT16                                                         NumberOfProximityDomains;
1108   // UINT32                                                       ProximityDomain[NumberOfProximityDomains];
1109   // EFI_ACPI_6_2_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
1110 } EFI_ACPI_6_2_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1111 
1112 ///
1113 /// DIMM Memory Aggregator Device Structure.
1114 ///
1115 typedef struct {
1116   EFI_ACPI_6_2_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    Header;
1117   UINT16                                                         PhysicalComponentIdentifier;
1118   UINT16                                                         Reserved;
1119   UINT32                                                         SizeOfDimm;
1120   UINT32                                                         SmbiosHandle;
1121 } EFI_ACPI_6_2_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1122 
1123 ///
1124 /// Boot Graphics Resource Table definition.
1125 ///
1126 typedef struct {
1127   EFI_ACPI_DESCRIPTION_HEADER    Header;
1128   ///
1129   /// 2-bytes (16 bit) version ID. This value must be 1.
1130   ///
1131   UINT16                         Version;
1132   ///
1133   /// 1-byte status field indicating current status about the table.
1134   ///     Bits[7:1] = Reserved (must be zero)
1135   ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
1136   ///
1137   UINT8                          Status;
1138   ///
1139   /// 1-byte enumerated type field indicating format of the image.
1140   ///     0 = Bitmap
1141   ///     1 - 255  Reserved (for future use)
1142   ///
1143   UINT8                          ImageType;
1144   ///
1145   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
1146   /// of the image bitmap.
1147   ///
1148   UINT64                         ImageAddress;
1149   ///
1150   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
1151   /// (X, Y) display offset of the top left corner of the boot image.
1152   /// The top left corner of the display is at offset (0, 0).
1153   ///
1154   UINT32                         ImageOffsetX;
1155   ///
1156   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
1157   /// (X, Y) display offset of the top left corner of the boot image.
1158   /// The top left corner of the display is at offset (0, 0).
1159   ///
1160   UINT32                         ImageOffsetY;
1161 } EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE;
1162 
1163 ///
1164 /// BGRT Revision
1165 ///
1166 #define EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION  1
1167 
1168 ///
1169 /// BGRT Version
1170 ///
1171 #define EFI_ACPI_6_2_BGRT_VERSION  0x01
1172 
1173 ///
1174 /// BGRT Status
1175 ///
1176 #define EFI_ACPI_6_2_BGRT_STATUS_NOT_DISPLAYED  0x00
1177 #define EFI_ACPI_6_2_BGRT_STATUS_DISPLAYED      0x01
1178 
1179 ///
1180 /// BGRT Image Type
1181 ///
1182 #define EFI_ACPI_6_2_BGRT_IMAGE_TYPE_BMP  0x00
1183 
1184 ///
1185 /// FPDT Version (as defined in ACPI 6.2 spec.)
1186 ///
1187 #define EFI_ACPI_6_2_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION  0x01
1188 
1189 ///
1190 /// FPDT Performance Record Types
1191 ///
1192 #define EFI_ACPI_6_2_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER   0x0000
1193 #define EFI_ACPI_6_2_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER  0x0001
1194 
1195 ///
1196 /// FPDT Performance Record Revision
1197 ///
1198 #define EFI_ACPI_6_2_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER   0x01
1199 #define EFI_ACPI_6_2_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER  0x01
1200 
1201 ///
1202 /// FPDT Runtime Performance Record Types
1203 ///
1204 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME            0x0000
1205 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND           0x0001
1206 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT  0x0002
1207 
1208 ///
1209 /// FPDT Runtime Performance Record Revision
1210 ///
1211 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
1212 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
1213 #define EFI_ACPI_6_2_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
1214 
1215 ///
1216 /// FPDT Performance Record header
1217 ///
1218 typedef struct {
1219   UINT16    Type;
1220   UINT8     Length;
1221   UINT8     Revision;
1222 } EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER;
1223 
1224 ///
1225 /// FPDT Performance Table header
1226 ///
1227 typedef struct {
1228   UINT32    Signature;
1229   UINT32    Length;
1230 } EFI_ACPI_6_2_FPDT_PERFORMANCE_TABLE_HEADER;
1231 
1232 ///
1233 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
1234 ///
1235 typedef struct {
1236   EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1237   UINT32                                         Reserved;
1238   ///
1239   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
1240   ///
1241   UINT64                                         BootPerformanceTablePointer;
1242 } EFI_ACPI_6_2_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
1243 
1244 ///
1245 /// FPDT S3 Performance Table Pointer Record Structure
1246 ///
1247 typedef struct {
1248   EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1249   UINT32                                         Reserved;
1250   ///
1251   /// 64-bit processor-relative physical address of the S3 Performance Table.
1252   ///
1253   UINT64                                         S3PerformanceTablePointer;
1254 } EFI_ACPI_6_2_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
1255 
1256 ///
1257 /// FPDT Firmware Basic Boot Performance Record Structure
1258 ///
1259 typedef struct {
1260   EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1261   UINT32                                         Reserved;
1262   ///
1263   /// Timer value logged at the beginning of firmware image execution.
1264   /// This may not always be zero or near zero.
1265   ///
1266   UINT64                                         ResetEnd;
1267   ///
1268   /// Timer value logged just prior to loading the OS boot loader into memory.
1269   /// For non-UEFI compatible boots, this field must be zero.
1270   ///
1271   UINT64                                         OsLoaderLoadImageStart;
1272   ///
1273   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
1274   /// For non-UEFI compatible boots, the timer value logged will be just prior
1275   /// to the INT 19h handler invocation.
1276   ///
1277   UINT64                                         OsLoaderStartImageStart;
1278   ///
1279   /// Timer value logged at the point when the OS loader calls the
1280   /// ExitBootServices function for UEFI compatible firmware.
1281   /// For non-UEFI compatible boots, this field must be zero.
1282   ///
1283   UINT64                                         ExitBootServicesEntry;
1284   ///
1285   /// Timer value logged at the point just prior to when the OS loader gaining
1286   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
1287   /// For non-UEFI compatible boots, this field must be zero.
1288   ///
1289   UINT64                                         ExitBootServicesExit;
1290 } EFI_ACPI_6_2_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
1291 
1292 ///
1293 /// FPDT Firmware Basic Boot Performance Table signature
1294 ///
1295 #define EFI_ACPI_6_2_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
1296 
1297 //
1298 // FPDT Firmware Basic Boot Performance Table
1299 //
1300 typedef struct {
1301   EFI_ACPI_6_2_FPDT_PERFORMANCE_TABLE_HEADER    Header;
1302   //
1303   // one or more Performance Records.
1304   //
1305 } EFI_ACPI_6_2_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
1306 
1307 ///
1308 /// FPDT "S3PT" S3 Performance Table
1309 ///
1310 #define EFI_ACPI_6_2_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
1311 
1312 //
1313 // FPDT Firmware S3 Boot Performance Table
1314 //
1315 typedef struct {
1316   EFI_ACPI_6_2_FPDT_PERFORMANCE_TABLE_HEADER    Header;
1317   //
1318   // one or more Performance Records.
1319   //
1320 } EFI_ACPI_6_2_FPDT_FIRMWARE_S3_BOOT_TABLE;
1321 
1322 ///
1323 /// FPDT Basic S3 Resume Performance Record
1324 ///
1325 typedef struct {
1326   EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1327   ///
1328   /// A count of the number of S3 resume cycles since the last full boot sequence.
1329   ///
1330   UINT32                                         ResumeCount;
1331   ///
1332   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
1333   /// OS waking vector. Only the most recent resume cycle's time is retained.
1334   ///
1335   UINT64                                         FullResume;
1336   ///
1337   /// Average timer value of all resume cycles logged since the last full boot
1338   /// sequence, including the most recent resume.  Note that the entire log of
1339   /// timer values does not need to be retained in order to calculate this average.
1340   ///
1341   UINT64                                         AverageResume;
1342 } EFI_ACPI_6_2_FPDT_S3_RESUME_RECORD;
1343 
1344 ///
1345 /// FPDT Basic S3 Suspend Performance Record
1346 ///
1347 typedef struct {
1348   EFI_ACPI_6_2_FPDT_PERFORMANCE_RECORD_HEADER    Header;
1349   ///
1350   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
1351   /// Only the most recent suspend cycle's timer value is retained.
1352   ///
1353   UINT64                                         SuspendStart;
1354   ///
1355   /// Timer value recorded at the final firmware write to SLP_TYP (or other
1356   /// mechanism) used to trigger hardware entry to S3.
1357   /// Only the most recent suspend cycle's timer value is retained.
1358   ///
1359   UINT64                                         SuspendEnd;
1360 } EFI_ACPI_6_2_FPDT_S3_SUSPEND_RECORD;
1361 
1362 ///
1363 /// Firmware Performance Record Table definition.
1364 ///
1365 typedef struct {
1366   EFI_ACPI_DESCRIPTION_HEADER    Header;
1367 } EFI_ACPI_6_2_FIRMWARE_PERFORMANCE_RECORD_TABLE;
1368 
1369 ///
1370 /// Generic Timer Description Table definition.
1371 ///
1372 typedef struct {
1373   EFI_ACPI_DESCRIPTION_HEADER    Header;
1374   UINT64                         CntControlBasePhysicalAddress;
1375   UINT32                         Reserved;
1376   UINT32                         SecurePL1TimerGSIV;
1377   UINT32                         SecurePL1TimerFlags;
1378   UINT32                         NonSecurePL1TimerGSIV;
1379   UINT32                         NonSecurePL1TimerFlags;
1380   UINT32                         VirtualTimerGSIV;
1381   UINT32                         VirtualTimerFlags;
1382   UINT32                         NonSecurePL2TimerGSIV;
1383   UINT32                         NonSecurePL2TimerFlags;
1384   UINT64                         CntReadBasePhysicalAddress;
1385   UINT32                         PlatformTimerCount;
1386   UINT32                         PlatformTimerOffset;
1387 } EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE;
1388 
1389 ///
1390 /// GTDT Version (as defined in ACPI 6.2 spec.)
1391 ///
1392 #define EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION  0x02
1393 
1394 ///
1395 /// Timer Flags.  All other bits are reserved and must be 0.
1396 ///
1397 #define EFI_ACPI_6_2_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE      BIT0
1398 #define EFI_ACPI_6_2_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1399 #define EFI_ACPI_6_2_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY      BIT2
1400 
1401 ///
1402 /// Platform Timer Type
1403 ///
1404 #define EFI_ACPI_6_2_GTDT_GT_BLOCK               0
1405 #define EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG  1
1406 
1407 ///
1408 /// GT Block Structure
1409 ///
1410 typedef struct {
1411   UINT8     Type;
1412   UINT16    Length;
1413   UINT8     Reserved;
1414   UINT64    CntCtlBase;
1415   UINT32    GTBlockTimerCount;
1416   UINT32    GTBlockTimerOffset;
1417 } EFI_ACPI_6_2_GTDT_GT_BLOCK_STRUCTURE;
1418 
1419 ///
1420 /// GT Block Timer Structure
1421 ///
1422 typedef struct {
1423   UINT8     GTFrameNumber;
1424   UINT8     Reserved[3];
1425   UINT64    CntBaseX;
1426   UINT64    CntEL0BaseX;
1427   UINT32    GTxPhysicalTimerGSIV;
1428   UINT32    GTxPhysicalTimerFlags;
1429   UINT32    GTxVirtualTimerGSIV;
1430   UINT32    GTxVirtualTimerFlags;
1431   UINT32    GTxCommonFlags;
1432 } EFI_ACPI_6_2_GTDT_GT_BLOCK_TIMER_STRUCTURE;
1433 
1434 ///
1435 /// GT Block Physical Timers and Virtual Timers Flags.  All other bits are reserved and must be 0.
1436 ///
1437 #define EFI_ACPI_6_2_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE      BIT0
1438 #define EFI_ACPI_6_2_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1439 
1440 ///
1441 /// Common Flags Flags.  All other bits are reserved and must be 0.
1442 ///
1443 #define EFI_ACPI_6_2_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER          BIT0
1444 #define EFI_ACPI_6_2_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY  BIT1
1445 
1446 ///
1447 /// SBSA Generic Watchdog Structure
1448 ///
1449 typedef struct {
1450   UINT8     Type;
1451   UINT16    Length;
1452   UINT8     Reserved;
1453   UINT64    RefreshFramePhysicalAddress;
1454   UINT64    WatchdogControlFramePhysicalAddress;
1455   UINT32    WatchdogTimerGSIV;
1456   UINT32    WatchdogTimerFlags;
1457 } EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE;
1458 
1459 ///
1460 /// SBSA Generic Watchdog Timer Flags.  All other bits are reserved and must be 0.
1461 ///
1462 #define EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE      BIT0
1463 #define EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY  BIT1
1464 #define EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER              BIT2
1465 
1466 //
1467 // NVDIMM Firmware Interface Table definition.
1468 //
1469 typedef struct {
1470   EFI_ACPI_DESCRIPTION_HEADER    Header;
1471   UINT32                         Reserved;
1472 } EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE;
1473 
1474 //
1475 // NFIT Version (as defined in ACPI 6.2 spec.)
1476 //
1477 #define EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_REVISION  0x1
1478 
1479 //
1480 // Definition for NFIT Table Structure Types
1481 //
1482 #define EFI_ACPI_6_2_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE_TYPE    0
1483 #define EFI_ACPI_6_2_NFIT_NVDIMM_REGION_MAPPING_STRUCTURE_TYPE            1
1484 #define EFI_ACPI_6_2_NFIT_INTERLEAVE_STRUCTURE_TYPE                       2
1485 #define EFI_ACPI_6_2_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE_TYPE    3
1486 #define EFI_ACPI_6_2_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE_TYPE            4
1487 #define EFI_ACPI_6_2_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE_TYPE  5
1488 #define EFI_ACPI_6_2_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE_TYPE               6
1489 
1490 //
1491 // Definition for NFIT Structure Header
1492 //
1493 typedef struct {
1494   UINT16    Type;
1495   UINT16    Length;
1496 } EFI_ACPI_6_2_NFIT_STRUCTURE_HEADER;
1497 
1498 //
1499 // Definition for System Physical Address Range Structure
1500 //
1501 #define EFI_ACPI_6_2_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_CONTROL_REGION_FOR_MANAGEMENT  BIT0
1502 #define EFI_ACPI_6_2_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_FLAGS_PROXIMITY_DOMAIN_VALID         BIT1
1503 #define EFI_ACPI_6_2_NFIT_GUID_VOLATILE_MEMORY_REGION                                        { 0x7305944F, 0xFDDA, 0x44E3, { 0xB1, 0x6C, 0x3F, 0x22, 0xD2, 0x52, 0xE5, 0xD0 }}
1504 #define EFI_ACPI_6_2_NFIT_GUID_BYTE_ADDRESSABLE_PERSISTENT_MEMORY_REGION                     { 0x66F0D379, 0xB4F3, 0x4074, { 0xAC, 0x43, 0x0D, 0x33, 0x18, 0xB7, 0x8C, 0xDB }}
1505 #define EFI_ACPI_6_2_NFIT_GUID_NVDIMM_CONTROL_REGION                                         { 0x92F701F6, 0x13B4, 0x405D, { 0x91, 0x0B, 0x29, 0x93, 0x67, 0xE8, 0x23, 0x4C }}
1506 #define EFI_ACPI_6_2_NFIT_GUID_NVDIMM_BLOCK_DATA_WINDOW_REGION                               { 0x91AF0530, 0x5D86, 0x470E, { 0xA6, 0xB0, 0x0A, 0x2D, 0xB9, 0x40, 0x82, 0x49 }}
1507 #define EFI_ACPI_6_2_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE              { 0x77AB535A, 0x45FC, 0x624B, { 0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E }}
1508 #define EFI_ACPI_6_2_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE                { 0x3D5ABD30, 0x4175, 0x87CE, { 0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB }}
1509 #define EFI_ACPI_6_2_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT            { 0x5CEA02C9, 0x4D07, 0x69D3, { 0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 }}
1510 #define EFI_ACPI_6_2_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT              { 0x08018188, 0x42CD, 0xBB48, { 0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D }}
1511 typedef struct {
1512   UINT16    Type;
1513   UINT16    Length;
1514   UINT16    SPARangeStructureIndex;
1515   UINT16    Flags;
1516   UINT32    Reserved_8;
1517   UINT32    ProximityDomain;
1518   GUID      AddressRangeTypeGUID;
1519   UINT64    SystemPhysicalAddressRangeBase;
1520   UINT64    SystemPhysicalAddressRangeLength;
1521   UINT64    AddressRangeMemoryMappingAttribute;
1522 } EFI_ACPI_6_2_NFIT_SYSTEM_PHYSICAL_ADDRESS_RANGE_STRUCTURE;
1523 
1524 //
1525 // Definition for Memory Device to System Physical Address Range Mapping Structure
1526 //
1527 typedef struct {
1528   UINT32    DIMMNumber          : 4;
1529   UINT32    MemoryChannelNumber : 4;
1530   UINT32    MemoryControllerID  : 4;
1531   UINT32    SocketID            : 4;
1532   UINT32    NodeControllerID    : 12;
1533   UINT32    Reserved_28         : 4;
1534 } EFI_ACPI_6_2_NFIT_DEVICE_HANDLE;
1535 
1536 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_PREVIOUS_SAVE_FAIL                                      BIT0
1537 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_LAST_RESTORE_FAIL                                       BIT1
1538 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_PLATFORM_FLUSH_FAIL                                     BIT2
1539 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_NOT_ARMED_PRIOR_TO_OSPM_HAND_OFF                        BIT3
1540 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_SMART_HEALTH_EVENTS_PRIOR_OSPM_HAND_OFF                 BIT4
1541 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_ENABLED_TO_NOTIFY_OSPM_ON_SMART_HEALTH_EVENTS  BIT5
1542 #define EFI_ACPI_6_2_NFIT_MEMORY_DEVICE_STATE_FLAGS_FIRMWARE_NOT_MAP_NVDIMM_TO_SPA                          BIT6
1543 typedef struct {
1544   UINT16                             Type;
1545   UINT16                             Length;
1546   EFI_ACPI_6_2_NFIT_DEVICE_HANDLE    NFITDeviceHandle;
1547   UINT16                             NVDIMMPhysicalID;
1548   UINT16                             NVDIMMRegionID;
1549   UINT16                             SPARangeStructureIndex;
1550   UINT16                             NVDIMMControlRegionStructureIndex;
1551   UINT64                             NVDIMMRegionSize;
1552   UINT64                             RegionOffset;
1553   UINT64                             NVDIMMPhysicalAddressRegionBase;
1554   UINT16                             InterleaveStructureIndex;
1555   UINT16                             InterleaveWays;
1556   UINT16                             NVDIMMStateFlags;
1557   UINT16                             Reserved_46;
1558 } EFI_ACPI_6_2_NFIT_NVDIMM_REGION_MAPPING_STRUCTURE;
1559 
1560 //
1561 // Definition for Interleave Structure
1562 //
1563 typedef struct {
1564   UINT16    Type;
1565   UINT16    Length;
1566   UINT16    InterleaveStructureIndex;
1567   UINT16    Reserved_6;
1568   UINT32    NumberOfLines;
1569   UINT32    LineSize;
1570   // UINT32                                      LineOffset[NumberOfLines];
1571 } EFI_ACPI_6_2_NFIT_INTERLEAVE_STRUCTURE;
1572 
1573 //
1574 // Definition for SMBIOS Management Information Structure
1575 //
1576 typedef struct {
1577   UINT16    Type;
1578   UINT16    Length;
1579   UINT32    Reserved_4;
1580   // UINT8                                       Data[];
1581 } EFI_ACPI_6_2_NFIT_SMBIOS_MANAGEMENT_INFORMATION_STRUCTURE;
1582 
1583 //
1584 // Definition for NVDIMM Control Region Structure
1585 //
1586 #define EFI_ACPI_6_2_NFIT_NVDIMM_CONTROL_REGION_VALID_FIELDS_MANUFACTURING  BIT0
1587 
1588 #define EFI_ACPI_6_2_NFIT_NVDIMM_CONTROL_REGION_FLAGS_BLOCK_DATA_WINDOWS_BUFFERED  BIT0
1589 typedef struct {
1590   UINT16    Type;
1591   UINT16    Length;
1592   UINT16    NVDIMMControlRegionStructureIndex;
1593   UINT16    VendorID;
1594   UINT16    DeviceID;
1595   UINT16    RevisionID;
1596   UINT16    SubsystemVendorID;
1597   UINT16    SubsystemDeviceID;
1598   UINT16    SubsystemRevisionID;
1599   UINT8     ValidFields;
1600   UINT8     ManufacturingLocation;
1601   UINT16    ManufacturingDate;
1602   UINT8     Reserved_22[2];
1603   UINT32    SerialNumber;
1604   UINT16    RegionFormatInterfaceCode;
1605   UINT16    NumberOfBlockControlWindows;
1606   UINT64    SizeOfBlockControlWindow;
1607   UINT64    CommandRegisterOffsetInBlockControlWindow;
1608   UINT64    SizeOfCommandRegisterInBlockControlWindows;
1609   UINT64    StatusRegisterOffsetInBlockControlWindow;
1610   UINT64    SizeOfStatusRegisterInBlockControlWindows;
1611   UINT16    NVDIMMControlRegionFlag;
1612   UINT8     Reserved_74[6];
1613 } EFI_ACPI_6_2_NFIT_NVDIMM_CONTROL_REGION_STRUCTURE;
1614 
1615 //
1616 // Definition for NVDIMM Block Data Window Region Structure
1617 //
1618 typedef struct {
1619   UINT16    Type;
1620   UINT16    Length;
1621   UINT16    NVDIMMControlRegionStructureIndex;
1622   UINT16    NumberOfBlockDataWindows;
1623   UINT64    BlockDataWindowStartOffset;
1624   UINT64    SizeOfBlockDataWindow;
1625   UINT64    BlockAccessibleMemoryCapacity;
1626   UINT64    BeginningAddressOfFirstBlockInBlockAccessibleMemory;
1627 } EFI_ACPI_6_2_NFIT_NVDIMM_BLOCK_DATA_WINDOW_REGION_STRUCTURE;
1628 
1629 //
1630 // Definition for Flush Hint Address Structure
1631 //
1632 typedef struct {
1633   UINT16                             Type;
1634   UINT16                             Length;
1635   EFI_ACPI_6_2_NFIT_DEVICE_HANDLE    NFITDeviceHandle;
1636   UINT16                             NumberOfFlushHintAddresses;
1637   UINT8                              Reserved_10[6];
1638   // UINT64                                      FlushHintAddress[NumberOfFlushHintAddresses];
1639 } EFI_ACPI_6_2_NFIT_FLUSH_HINT_ADDRESS_STRUCTURE;
1640 
1641 ///
1642 /// Secure DEVices Table (SDEV)
1643 ///
1644 typedef struct {
1645   EFI_ACPI_DESCRIPTION_HEADER    Header;
1646 } EFI_ACPI_6_2_SECURE_DEVICES_TABLE_HEADER;
1647 
1648 ///
1649 /// SDEV Revision (as defined in ACPI 6.2 spec.)
1650 ///
1651 #define EFI_ACPI_6_2_SECURE_DEVICES_TABLE_REVISION  0x01
1652 
1653 ///
1654 /// Secure Device types
1655 ///
1656 #define EFI_ACPI_6_2_SDEV_TYPE_PCIE_ENDPOINT_DEVICE   0x01
1657 #define EFI_ACPI_6_2_SDEV_TYPE_ACPI_NAMESPACE_DEVICE  0x00
1658 
1659 ///
1660 /// Secure Device flags
1661 ///
1662 #define EFI_ACPI_6_2_SDEV_FLAG_ALLOW_HANDOFF  BIT0
1663 
1664 ///
1665 /// SDEV Structure Header
1666 ///
1667 typedef struct {
1668   UINT8     Type;
1669   UINT8     Flags;
1670   UINT16    Length;
1671 } EFI_ACPI_6_2_SDEV_STRUCTURE_HEADER;
1672 
1673 ///
1674 /// PCIe Endpoint Device based Secure Device Structure
1675 ///
1676 typedef struct {
1677   UINT8     Type;
1678   UINT8     Flags;
1679   UINT16    Length;
1680   UINT16    PciSegmentNumber;
1681   UINT16    StartBusNumber;
1682   UINT16    PciPathOffset;
1683   UINT16    PciPathLength;
1684   UINT16    VendorSpecificDataOffset;
1685   UINT16    VendorSpecificDataLength;
1686 } EFI_ACPI_6_2_SDEV_STRUCTURE_PCIE_ENDPOINT_DEVICE;
1687 
1688 ///
1689 /// ACPI_NAMESPACE_DEVICE based Secure Device Structure
1690 ///
1691 typedef struct {
1692   UINT8     Type;
1693   UINT8     Flags;
1694   UINT16    Length;
1695   UINT16    DeviceIdentifierOffset;
1696   UINT16    DeviceIdentifierLength;
1697   UINT16    VendorSpecificDataOffset;
1698   UINT16    VendorSpecificDataLength;
1699 } EFI_ACPI_6_2_SDEV_STRUCTURE_ACPI_NAMESPACE_DEVICE;
1700 
1701 ///
1702 /// Boot Error Record Table (BERT)
1703 ///
1704 typedef struct {
1705   EFI_ACPI_DESCRIPTION_HEADER    Header;
1706   UINT32                         BootErrorRegionLength;
1707   UINT64                         BootErrorRegion;
1708 } EFI_ACPI_6_2_BOOT_ERROR_RECORD_TABLE_HEADER;
1709 
1710 ///
1711 /// BERT Version (as defined in ACPI 6.2 spec.)
1712 ///
1713 #define EFI_ACPI_6_2_BOOT_ERROR_RECORD_TABLE_REVISION  0x01
1714 
1715 ///
1716 /// Boot Error Region Block Status Definition
1717 ///
1718 typedef struct {
1719   UINT32    UncorrectableErrorValid     : 1;
1720   UINT32    CorrectableErrorValid       : 1;
1721   UINT32    MultipleUncorrectableErrors : 1;
1722   UINT32    MultipleCorrectableErrors   : 1;
1723   UINT32    ErrorDataEntryCount         : 10;
1724   UINT32    Reserved                    : 18;
1725 } EFI_ACPI_6_2_ERROR_BLOCK_STATUS;
1726 
1727 ///
1728 /// Boot Error Region Definition
1729 ///
1730 typedef struct {
1731   EFI_ACPI_6_2_ERROR_BLOCK_STATUS    BlockStatus;
1732   UINT32                             RawDataOffset;
1733   UINT32                             RawDataLength;
1734   UINT32                             DataLength;
1735   UINT32                             ErrorSeverity;
1736 } EFI_ACPI_6_2_BOOT_ERROR_REGION_STRUCTURE;
1737 
1738 //
1739 // Boot Error Severity types
1740 //
1741 #define EFI_ACPI_6_2_ERROR_SEVERITY_RECOVERABLE  0x00
1742 #define EFI_ACPI_6_2_ERROR_SEVERITY_FATAL        0x01
1743 #define EFI_ACPI_6_2_ERROR_SEVERITY_CORRECTED    0x02
1744 #define EFI_ACPI_6_2_ERROR_SEVERITY_NONE         0x03
1745 //
1746 // The term 'Correctable' is no longer being used as an error severity of the
1747 // reported error since ACPI Specification Version 5.1 Errata B.
1748 // The below macro is considered as deprecated and should no longer be used.
1749 //
1750 #define EFI_ACPI_6_2_ERROR_SEVERITY_CORRECTABLE  0x00
1751 
1752 ///
1753 /// Generic Error Data Entry Definition
1754 ///
1755 typedef struct {
1756   UINT8     SectionType[16];
1757   UINT32    ErrorSeverity;
1758   UINT16    Revision;
1759   UINT8     ValidationBits;
1760   UINT8     Flags;
1761   UINT32    ErrorDataLength;
1762   UINT8     FruId[16];
1763   UINT8     FruText[20];
1764   UINT8     Timestamp[8];
1765 } EFI_ACPI_6_2_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
1766 
1767 ///
1768 /// Generic Error Data Entry Version (as defined in ACPI 6.2 spec.)
1769 ///
1770 #define EFI_ACPI_6_2_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0300
1771 
1772 ///
1773 /// HEST - Hardware Error Source Table
1774 ///
1775 typedef struct {
1776   EFI_ACPI_DESCRIPTION_HEADER    Header;
1777   UINT32                         ErrorSourceCount;
1778 } EFI_ACPI_6_2_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
1779 
1780 ///
1781 /// HEST Version (as defined in ACPI 6.2 spec.)
1782 ///
1783 #define EFI_ACPI_6_2_HARDWARE_ERROR_SOURCE_TABLE_REVISION  0x01
1784 
1785 //
1786 // Error Source structure types.
1787 //
1788 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
1789 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
1790 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_NMI_ERROR                0x02
1791 #define EFI_ACPI_6_2_PCI_EXPRESS_ROOT_PORT_AER                  0x06
1792 #define EFI_ACPI_6_2_PCI_EXPRESS_DEVICE_AER                     0x07
1793 #define EFI_ACPI_6_2_PCI_EXPRESS_BRIDGE_AER                     0x08
1794 #define EFI_ACPI_6_2_GENERIC_HARDWARE_ERROR                     0x09
1795 #define EFI_ACPI_6_2_GENERIC_HARDWARE_ERROR_VERSION_2           0x0A
1796 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_DEFERRED_MACHINE_CHECK   0x0B
1797 
1798 //
1799 // Error Source structure flags.
1800 //
1801 #define EFI_ACPI_6_2_ERROR_SOURCE_FLAG_FIRMWARE_FIRST  (1 << 0)
1802 #define EFI_ACPI_6_2_ERROR_SOURCE_FLAG_GLOBAL          (1 << 1)
1803 #define EFI_ACPI_6_2_ERROR_SOURCE_FLAG_GHES_ASSIST     (1 << 2)
1804 
1805 ///
1806 /// IA-32 Architecture Machine Check Exception Structure Definition
1807 ///
1808 typedef struct {
1809   UINT16    Type;
1810   UINT16    SourceId;
1811   UINT8     Reserved0[2];
1812   UINT8     Flags;
1813   UINT8     Enabled;
1814   UINT32    NumberOfRecordsToPreAllocate;
1815   UINT32    MaxSectionsPerRecord;
1816   UINT64    GlobalCapabilityInitData;
1817   UINT64    GlobalControlInitData;
1818   UINT8     NumberOfHardwareBanks;
1819   UINT8     Reserved1[7];
1820 } EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
1821 
1822 ///
1823 /// IA-32 Architecture Machine Check Bank Structure Definition
1824 ///
1825 typedef struct {
1826   UINT8     BankNumber;
1827   UINT8     ClearStatusOnInitialization;
1828   UINT8     StatusDataFormat;
1829   UINT8     Reserved0;
1830   UINT32    ControlRegisterMsrAddress;
1831   UINT64    ControlInitData;
1832   UINT32    StatusRegisterMsrAddress;
1833   UINT32    AddressRegisterMsrAddress;
1834   UINT32    MiscRegisterMsrAddress;
1835 } EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
1836 
1837 ///
1838 /// IA-32 Architecture Machine Check Bank Structure MCA data format
1839 ///
1840 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32     0x00
1841 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64  0x01
1842 #define EFI_ACPI_6_2_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64    0x02
1843 
1844 //
1845 // Hardware Error Notification types. All other values are reserved
1846 //
1847 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_POLLED                        0x00
1848 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT            0x01
1849 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT               0x02
1850 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_SCI                           0x03
1851 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_NMI                           0x04
1852 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_CMCI                          0x05
1853 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_MCE                           0x06
1854 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_GPIO_SIGNAL                   0x07
1855 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_ARMV8_SEA                     0x08
1856 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_ARMV8_SEI                     0x09
1857 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_GSIV                          0x0A
1858 #define EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_SOFTWARE_DELEGATED_EXCEPTION  0x0B
1859 
1860 ///
1861 /// Hardware Error Notification Configuration Write Enable Structure Definition
1862 ///
1863 typedef struct {
1864   UINT16    Type                           : 1;
1865   UINT16    PollInterval                   : 1;
1866   UINT16    SwitchToPollingThresholdValue  : 1;
1867   UINT16    SwitchToPollingThresholdWindow : 1;
1868   UINT16    ErrorThresholdValue            : 1;
1869   UINT16    ErrorThresholdWindow           : 1;
1870   UINT16    Reserved                       : 10;
1871 } EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
1872 
1873 ///
1874 /// Hardware Error Notification Structure Definition
1875 ///
1876 typedef struct {
1877   UINT8                                                                            Type;
1878   UINT8                                                                            Length;
1879   EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE    ConfigurationWriteEnable;
1880   UINT32                                                                           PollInterval;
1881   UINT32                                                                           Vector;
1882   UINT32                                                                           SwitchToPollingThresholdValue;
1883   UINT32                                                                           SwitchToPollingThresholdWindow;
1884   UINT32                                                                           ErrorThresholdValue;
1885   UINT32                                                                           ErrorThresholdWindow;
1886 } EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
1887 
1888 ///
1889 /// IA-32 Architecture Corrected Machine Check Structure Definition
1890 ///
1891 typedef struct {
1892   UINT16                                                Type;
1893   UINT16                                                SourceId;
1894   UINT8                                                 Reserved0[2];
1895   UINT8                                                 Flags;
1896   UINT8                                                 Enabled;
1897   UINT32                                                NumberOfRecordsToPreAllocate;
1898   UINT32                                                MaxSectionsPerRecord;
1899   EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
1900   UINT8                                                 NumberOfHardwareBanks;
1901   UINT8                                                 Reserved1[3];
1902 } EFI_ACPI_6_2_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
1903 
1904 ///
1905 /// IA-32 Architecture NMI Error Structure Definition
1906 ///
1907 typedef struct {
1908   UINT16    Type;
1909   UINT16    SourceId;
1910   UINT8     Reserved0[2];
1911   UINT32    NumberOfRecordsToPreAllocate;
1912   UINT32    MaxSectionsPerRecord;
1913   UINT32    MaxRawDataLength;
1914 } EFI_ACPI_6_2_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
1915 
1916 ///
1917 /// PCI Express Root Port AER Structure Definition
1918 ///
1919 typedef struct {
1920   UINT16    Type;
1921   UINT16    SourceId;
1922   UINT8     Reserved0[2];
1923   UINT8     Flags;
1924   UINT8     Enabled;
1925   UINT32    NumberOfRecordsToPreAllocate;
1926   UINT32    MaxSectionsPerRecord;
1927   UINT32    Bus;
1928   UINT16    Device;
1929   UINT16    Function;
1930   UINT16    DeviceControl;
1931   UINT8     Reserved1[2];
1932   UINT32    UncorrectableErrorMask;
1933   UINT32    UncorrectableErrorSeverity;
1934   UINT32    CorrectableErrorMask;
1935   UINT32    AdvancedErrorCapabilitiesAndControl;
1936   UINT32    RootErrorCommand;
1937 } EFI_ACPI_6_2_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
1938 
1939 ///
1940 /// PCI Express Device AER Structure Definition
1941 ///
1942 typedef struct {
1943   UINT16    Type;
1944   UINT16    SourceId;
1945   UINT8     Reserved0[2];
1946   UINT8     Flags;
1947   UINT8     Enabled;
1948   UINT32    NumberOfRecordsToPreAllocate;
1949   UINT32    MaxSectionsPerRecord;
1950   UINT32    Bus;
1951   UINT16    Device;
1952   UINT16    Function;
1953   UINT16    DeviceControl;
1954   UINT8     Reserved1[2];
1955   UINT32    UncorrectableErrorMask;
1956   UINT32    UncorrectableErrorSeverity;
1957   UINT32    CorrectableErrorMask;
1958   UINT32    AdvancedErrorCapabilitiesAndControl;
1959 } EFI_ACPI_6_2_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
1960 
1961 ///
1962 /// PCI Express Bridge AER Structure Definition
1963 ///
1964 typedef struct {
1965   UINT16    Type;
1966   UINT16    SourceId;
1967   UINT8     Reserved0[2];
1968   UINT8     Flags;
1969   UINT8     Enabled;
1970   UINT32    NumberOfRecordsToPreAllocate;
1971   UINT32    MaxSectionsPerRecord;
1972   UINT32    Bus;
1973   UINT16    Device;
1974   UINT16    Function;
1975   UINT16    DeviceControl;
1976   UINT8     Reserved1[2];
1977   UINT32    UncorrectableErrorMask;
1978   UINT32    UncorrectableErrorSeverity;
1979   UINT32    CorrectableErrorMask;
1980   UINT32    AdvancedErrorCapabilitiesAndControl;
1981   UINT32    SecondaryUncorrectableErrorMask;
1982   UINT32    SecondaryUncorrectableErrorSeverity;
1983   UINT32    SecondaryAdvancedErrorCapabilitiesAndControl;
1984 } EFI_ACPI_6_2_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
1985 
1986 ///
1987 /// Generic Hardware Error Source Structure Definition
1988 ///
1989 typedef struct {
1990   UINT16                                                Type;
1991   UINT16                                                SourceId;
1992   UINT16                                                RelatedSourceId;
1993   UINT8                                                 Flags;
1994   UINT8                                                 Enabled;
1995   UINT32                                                NumberOfRecordsToPreAllocate;
1996   UINT32                                                MaxSectionsPerRecord;
1997   UINT32                                                MaxRawDataLength;
1998   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE                ErrorStatusAddress;
1999   EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2000   UINT32                                                ErrorStatusBlockLength;
2001 } EFI_ACPI_6_2_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
2002 
2003 ///
2004 /// Generic Hardware Error Source Version 2 Structure Definition
2005 ///
2006 typedef struct {
2007   UINT16                                                Type;
2008   UINT16                                                SourceId;
2009   UINT16                                                RelatedSourceId;
2010   UINT8                                                 Flags;
2011   UINT8                                                 Enabled;
2012   UINT32                                                NumberOfRecordsToPreAllocate;
2013   UINT32                                                MaxSectionsPerRecord;
2014   UINT32                                                MaxRawDataLength;
2015   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE                ErrorStatusAddress;
2016   EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2017   UINT32                                                ErrorStatusBlockLength;
2018   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE                ReadAckRegister;
2019   UINT64                                                ReadAckPreserve;
2020   UINT64                                                ReadAckWrite;
2021 } EFI_ACPI_6_2_GENERIC_HARDWARE_ERROR_SOURCE_VERSION_2_STRUCTURE;
2022 
2023 ///
2024 /// Generic Error Status Definition
2025 ///
2026 typedef struct {
2027   EFI_ACPI_6_2_ERROR_BLOCK_STATUS    BlockStatus;
2028   UINT32                             RawDataOffset;
2029   UINT32                             RawDataLength;
2030   UINT32                             DataLength;
2031   UINT32                             ErrorSeverity;
2032 } EFI_ACPI_6_2_GENERIC_ERROR_STATUS_STRUCTURE;
2033 
2034 ///
2035 /// IA-32 Architecture Deferred Machine Check Structure Definition
2036 ///
2037 typedef struct {
2038   UINT16                                                Type;
2039   UINT16                                                SourceId;
2040   UINT8                                                 Reserved0[2];
2041   UINT8                                                 Flags;
2042   UINT8                                                 Enabled;
2043   UINT32                                                NumberOfRecordsToPreAllocate;
2044   UINT32                                                MaxSectionsPerRecord;
2045   EFI_ACPI_6_2_HARDWARE_ERROR_NOTIFICATION_STRUCTURE    NotificationStructure;
2046   UINT8                                                 NumberOfHardwareBanks;
2047   UINT8                                                 Reserved1[3];
2048 } EFI_ACPI_6_2_IA32_ARCHITECTURE_DEFERRED_MACHINE_CHECK_STRUCTURE;
2049 
2050 ///
2051 /// HMAT - Heterogeneous Memory Attribute Table
2052 ///
2053 typedef struct {
2054   EFI_ACPI_DESCRIPTION_HEADER    Header;
2055   UINT8                          Reserved[4];
2056 } EFI_ACPI_6_2_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_HEADER;
2057 
2058 ///
2059 /// HMAT Revision (as defined in ACPI 6.2 spec.)
2060 ///
2061 #define EFI_ACPI_6_2_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_REVISION  0x01
2062 
2063 ///
2064 /// HMAT types
2065 ///
2066 #define EFI_ACPI_6_2_HMAT_TYPE_MEMORY_SUBSYSTEM_ADDRESS_RANGE              0x00
2067 #define EFI_ACPI_6_2_HMAT_TYPE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO  0x01
2068 #define EFI_ACPI_6_2_HMAT_TYPE_MEMORY_SIDE_CACHE_INFO                      0x02
2069 
2070 ///
2071 /// HMAT Structure Header
2072 ///
2073 typedef struct {
2074   UINT16    Type;
2075   UINT8     Reserved[2];
2076   UINT32    Length;
2077 } EFI_ACPI_6_2_HMAT_STRUCTURE_HEADER;
2078 
2079 ///
2080 /// Memory Subsystem Address Range Structure flags
2081 ///
2082 typedef struct {
2083   UINT16    ProcessorProximityDomainValid : 1;
2084   UINT16    MemoryProximityDomainValid    : 1;
2085   UINT16    ReservationHint               : 1;
2086   UINT16    Reserved                      : 13;
2087 } EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SUBSYSTEM_ADDRESS_RANGE_FLAGS;
2088 
2089 ///
2090 /// Memory Subsystem Address Range Structure
2091 ///
2092 typedef struct {
2093   UINT16                                                              Type;
2094   UINT8                                                               Reserved[2];
2095   UINT32                                                              Length;
2096   EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SUBSYSTEM_ADDRESS_RANGE_FLAGS    Flags;
2097   UINT8                                                               Reserved1[2];
2098   UINT32                                                              ProcessorProximityDomain;
2099   UINT32                                                              MemoryProximityDomain;
2100   UINT8                                                               Reserved2[4];
2101   UINT64                                                              SystemPhysicalAddressRangeBase;
2102   UINT64                                                              SystemPhysicalAddressRangeLength;
2103 } EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SUBSYSTEM_ADDRESS_RANGE;
2104 
2105 ///
2106 /// System Locality Latency and Bandwidth Information Structure flags
2107 ///
2108 typedef struct {
2109   UINT8    MemoryHierarchy : 5;
2110   UINT8    Reserved        : 3;
2111 } EFI_ACPI_6_2_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS;
2112 
2113 ///
2114 /// System Locality Latency and Bandwidth Information Structure
2115 ///
2116 typedef struct {
2117   UINT16                                                                          Type;
2118   UINT8                                                                           Reserved[2];
2119   UINT32                                                                          Length;
2120   EFI_ACPI_6_2_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO_FLAGS    Flags;
2121   UINT8                                                                           DataType;
2122   UINT8                                                                           Reserved1[2];
2123   UINT32                                                                          NumberOfInitiatorProximityDomains;
2124   UINT32                                                                          NumberOfTargetProximityDomains;
2125   UINT8                                                                           Reserved2[4];
2126   UINT64                                                                          EntryBaseUnit;
2127 } EFI_ACPI_6_2_HMAT_STRUCTURE_SYSTEM_LOCALITY_LATENCY_AND_BANDWIDTH_INFO;
2128 
2129 ///
2130 /// Memory Side Cache Information Structure cache attributes
2131 ///
2132 typedef struct {
2133   UINT32    TotalCacheLevels   : 4;
2134   UINT32    CacheLevel         : 4;
2135   UINT32    CacheAssociativity : 4;
2136   UINT32    WritePolicy        : 4;
2137   UINT32    CacheLineSize      : 16;
2138 } EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES;
2139 
2140 ///
2141 /// Memory Side Cache Information Structure
2142 ///
2143 typedef struct {
2144   UINT16                                                                 Type;
2145   UINT8                                                                  Reserved[2];
2146   UINT32                                                                 Length;
2147   UINT32                                                                 MemoryProximityDomain;
2148   UINT8                                                                  Reserved1[4];
2149   UINT64                                                                 MemorySideCacheSize;
2150   EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO_CACHE_ATTRIBUTES    CacheAttributes;
2151   UINT8                                                                  Reserved2[2];
2152   UINT16                                                                 NumberOfSmbiosHandles;
2153 } EFI_ACPI_6_2_HMAT_STRUCTURE_MEMORY_SIDE_CACHE_INFO;
2154 
2155 ///
2156 /// ERST - Error Record Serialization Table
2157 ///
2158 typedef struct {
2159   EFI_ACPI_DESCRIPTION_HEADER    Header;
2160   UINT32                         SerializationHeaderSize;
2161   UINT8                          Reserved0[4];
2162   UINT32                         InstructionEntryCount;
2163 } EFI_ACPI_6_2_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
2164 
2165 ///
2166 /// ERST Version (as defined in ACPI 6.2 spec.)
2167 ///
2168 #define EFI_ACPI_6_2_ERROR_RECORD_SERIALIZATION_TABLE_REVISION  0x01
2169 
2170 ///
2171 /// ERST Serialization Actions
2172 ///
2173 #define EFI_ACPI_6_2_ERST_BEGIN_WRITE_OPERATION                   0x00
2174 #define EFI_ACPI_6_2_ERST_BEGIN_READ_OPERATION                    0x01
2175 #define EFI_ACPI_6_2_ERST_BEGIN_CLEAR_OPERATION                   0x02
2176 #define EFI_ACPI_6_2_ERST_END_OPERATION                           0x03
2177 #define EFI_ACPI_6_2_ERST_SET_RECORD_OFFSET                       0x04
2178 #define EFI_ACPI_6_2_ERST_EXECUTE_OPERATION                       0x05
2179 #define EFI_ACPI_6_2_ERST_CHECK_BUSY_STATUS                       0x06
2180 #define EFI_ACPI_6_2_ERST_GET_COMMAND_STATUS                      0x07
2181 #define EFI_ACPI_6_2_ERST_GET_RECORD_IDENTIFIER                   0x08
2182 #define EFI_ACPI_6_2_ERST_SET_RECORD_IDENTIFIER                   0x09
2183 #define EFI_ACPI_6_2_ERST_GET_RECORD_COUNT                        0x0A
2184 #define EFI_ACPI_6_2_ERST_BEGIN_DUMMY_WRITE_OPERATION             0x0B
2185 #define EFI_ACPI_6_2_ERST_GET_ERROR_LOG_ADDRESS_RANGE             0x0D
2186 #define EFI_ACPI_6_2_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH      0x0E
2187 #define EFI_ACPI_6_2_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES  0x0F
2188 #define EFI_ACPI_6_2_ERST_GET_EXECUTE_OPERATION_TIMINGS           0x10
2189 
2190 ///
2191 /// ERST Action Command Status
2192 ///
2193 #define EFI_ACPI_6_2_ERST_STATUS_SUCCESS                 0x00
2194 #define EFI_ACPI_6_2_ERST_STATUS_NOT_ENOUGH_SPACE        0x01
2195 #define EFI_ACPI_6_2_ERST_STATUS_HARDWARE_NOT_AVAILABLE  0x02
2196 #define EFI_ACPI_6_2_ERST_STATUS_FAILED                  0x03
2197 #define EFI_ACPI_6_2_ERST_STATUS_RECORD_STORE_EMPTY      0x04
2198 #define EFI_ACPI_6_2_ERST_STATUS_RECORD_NOT_FOUND        0x05
2199 
2200 ///
2201 /// ERST Serialization Instructions
2202 ///
2203 #define EFI_ACPI_6_2_ERST_READ_REGISTER                  0x00
2204 #define EFI_ACPI_6_2_ERST_READ_REGISTER_VALUE            0x01
2205 #define EFI_ACPI_6_2_ERST_WRITE_REGISTER                 0x02
2206 #define EFI_ACPI_6_2_ERST_WRITE_REGISTER_VALUE           0x03
2207 #define EFI_ACPI_6_2_ERST_NOOP                           0x04
2208 #define EFI_ACPI_6_2_ERST_LOAD_VAR1                      0x05
2209 #define EFI_ACPI_6_2_ERST_LOAD_VAR2                      0x06
2210 #define EFI_ACPI_6_2_ERST_STORE_VAR1                     0x07
2211 #define EFI_ACPI_6_2_ERST_ADD                            0x08
2212 #define EFI_ACPI_6_2_ERST_SUBTRACT                       0x09
2213 #define EFI_ACPI_6_2_ERST_ADD_VALUE                      0x0A
2214 #define EFI_ACPI_6_2_ERST_SUBTRACT_VALUE                 0x0B
2215 #define EFI_ACPI_6_2_ERST_STALL                          0x0C
2216 #define EFI_ACPI_6_2_ERST_STALL_WHILE_TRUE               0x0D
2217 #define EFI_ACPI_6_2_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE  0x0E
2218 #define EFI_ACPI_6_2_ERST_GOTO                           0x0F
2219 #define EFI_ACPI_6_2_ERST_SET_SRC_ADDRESS_BASE           0x10
2220 #define EFI_ACPI_6_2_ERST_SET_DST_ADDRESS_BASE           0x11
2221 #define EFI_ACPI_6_2_ERST_MOVE_DATA                      0x12
2222 
2223 ///
2224 /// ERST Instruction Flags
2225 ///
2226 #define EFI_ACPI_6_2_ERST_PRESERVE_REGISTER  0x01
2227 
2228 ///
2229 /// ERST Serialization Instruction Entry
2230 ///
2231 typedef struct {
2232   UINT8                                     SerializationAction;
2233   UINT8                                     Instruction;
2234   UINT8                                     Flags;
2235   UINT8                                     Reserved0;
2236   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
2237   UINT64                                    Value;
2238   UINT64                                    Mask;
2239 } EFI_ACPI_6_2_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
2240 
2241 ///
2242 /// EINJ - Error Injection Table
2243 ///
2244 typedef struct {
2245   EFI_ACPI_DESCRIPTION_HEADER    Header;
2246   UINT32                         InjectionHeaderSize;
2247   UINT8                          InjectionFlags;
2248   UINT8                          Reserved0[3];
2249   UINT32                         InjectionEntryCount;
2250 } EFI_ACPI_6_2_ERROR_INJECTION_TABLE_HEADER;
2251 
2252 ///
2253 /// EINJ Version (as defined in ACPI 6.2 spec.)
2254 ///
2255 #define EFI_ACPI_6_2_ERROR_INJECTION_TABLE_REVISION  0x01
2256 
2257 ///
2258 /// EINJ Error Injection Actions
2259 ///
2260 #define EFI_ACPI_6_2_EINJ_BEGIN_INJECTION_OPERATION       0x00
2261 #define EFI_ACPI_6_2_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE  0x01
2262 #define EFI_ACPI_6_2_EINJ_SET_ERROR_TYPE                  0x02
2263 #define EFI_ACPI_6_2_EINJ_GET_ERROR_TYPE                  0x03
2264 #define EFI_ACPI_6_2_EINJ_END_OPERATION                   0x04
2265 #define EFI_ACPI_6_2_EINJ_EXECUTE_OPERATION               0x05
2266 #define EFI_ACPI_6_2_EINJ_CHECK_BUSY_STATUS               0x06
2267 #define EFI_ACPI_6_2_EINJ_GET_COMMAND_STATUS              0x07
2268 #define EFI_ACPI_6_2_EINJ_TRIGGER_ERROR                   0xFF
2269 
2270 ///
2271 /// EINJ Action Command Status
2272 ///
2273 #define EFI_ACPI_6_2_EINJ_STATUS_SUCCESS          0x00
2274 #define EFI_ACPI_6_2_EINJ_STATUS_UNKNOWN_FAILURE  0x01
2275 #define EFI_ACPI_6_2_EINJ_STATUS_INVALID_ACCESS   0x02
2276 
2277 ///
2278 /// EINJ Error Type Definition
2279 ///
2280 #define EFI_ACPI_6_2_EINJ_ERROR_PROCESSOR_CORRECTABLE               (1 << 0)
2281 #define EFI_ACPI_6_2_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL    (1 << 1)
2282 #define EFI_ACPI_6_2_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL       (1 << 2)
2283 #define EFI_ACPI_6_2_EINJ_ERROR_MEMORY_CORRECTABLE                  (1 << 3)
2284 #define EFI_ACPI_6_2_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL       (1 << 4)
2285 #define EFI_ACPI_6_2_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL          (1 << 5)
2286 #define EFI_ACPI_6_2_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE             (1 << 6)
2287 #define EFI_ACPI_6_2_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL  (1 << 7)
2288 #define EFI_ACPI_6_2_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL     (1 << 8)
2289 #define EFI_ACPI_6_2_EINJ_ERROR_PLATFORM_CORRECTABLE                (1 << 9)
2290 #define EFI_ACPI_6_2_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL     (1 << 10)
2291 #define EFI_ACPI_6_2_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL        (1 << 11)
2292 
2293 ///
2294 /// EINJ Injection Instructions
2295 ///
2296 #define EFI_ACPI_6_2_EINJ_READ_REGISTER         0x00
2297 #define EFI_ACPI_6_2_EINJ_READ_REGISTER_VALUE   0x01
2298 #define EFI_ACPI_6_2_EINJ_WRITE_REGISTER        0x02
2299 #define EFI_ACPI_6_2_EINJ_WRITE_REGISTER_VALUE  0x03
2300 #define EFI_ACPI_6_2_EINJ_NOOP                  0x04
2301 
2302 ///
2303 /// EINJ Instruction Flags
2304 ///
2305 #define EFI_ACPI_6_2_EINJ_PRESERVE_REGISTER  0x01
2306 
2307 ///
2308 /// EINJ Injection Instruction Entry
2309 ///
2310 typedef struct {
2311   UINT8                                     InjectionAction;
2312   UINT8                                     Instruction;
2313   UINT8                                     Flags;
2314   UINT8                                     Reserved0;
2315   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    RegisterRegion;
2316   UINT64                                    Value;
2317   UINT64                                    Mask;
2318 } EFI_ACPI_6_2_EINJ_INJECTION_INSTRUCTION_ENTRY;
2319 
2320 ///
2321 /// EINJ Trigger Action Table
2322 ///
2323 typedef struct {
2324   UINT32    HeaderSize;
2325   UINT32    Revision;
2326   UINT32    TableSize;
2327   UINT32    EntryCount;
2328 } EFI_ACPI_6_2_EINJ_TRIGGER_ACTION_TABLE;
2329 
2330 ///
2331 /// Platform Communications Channel Table (PCCT)
2332 ///
2333 typedef struct {
2334   EFI_ACPI_DESCRIPTION_HEADER    Header;
2335   UINT32                         Flags;
2336   UINT64                         Reserved;
2337 } EFI_ACPI_6_2_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
2338 
2339 ///
2340 /// PCCT Version (as defined in ACPI 6.2 spec.)
2341 ///
2342 #define EFI_ACPI_6_2_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION  0x02
2343 
2344 ///
2345 /// PCCT Global Flags
2346 ///
2347 #define EFI_ACPI_6_2_PCCT_FLAGS_PLATFORM_INTERRUPT  BIT0
2348 
2349 //
2350 // PCCT Subspace type
2351 //
2352 #define EFI_ACPI_6_2_PCCT_SUBSPACE_TYPE_GENERIC                      0x00
2353 #define EFI_ACPI_6_2_PCCT_SUBSPACE_TYPE_1_HW_REDUCED_COMMUNICATIONS  0x01
2354 #define EFI_ACPI_6_2_PCCT_SUBSPACE_TYPE_2_HW_REDUCED_COMMUNICATIONS  0x02
2355 #define EFI_ACPI_6_2_PCCT_SUBSPACE_TYPE_3_EXTENDED_PCC               0x03
2356 #define EFI_ACPI_6_2_PCCT_SUBSPACE_TYPE_4_EXTENDED_PCC               0x04
2357 
2358 ///
2359 /// PCC Subspace Structure Header
2360 ///
2361 typedef struct {
2362   UINT8    Type;
2363   UINT8    Length;
2364 } EFI_ACPI_6_2_PCCT_SUBSPACE_HEADER;
2365 
2366 ///
2367 /// Generic Communications Subspace Structure
2368 ///
2369 typedef struct {
2370   UINT8                                     Type;
2371   UINT8                                     Length;
2372   UINT8                                     Reserved[6];
2373   UINT64                                    BaseAddress;
2374   UINT64                                    AddressLength;
2375   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2376   UINT64                                    DoorbellPreserve;
2377   UINT64                                    DoorbellWrite;
2378   UINT32                                    NominalLatency;
2379   UINT32                                    MaximumPeriodicAccessRate;
2380   UINT16                                    MinimumRequestTurnaroundTime;
2381 } EFI_ACPI_6_2_PCCT_SUBSPACE_GENERIC;
2382 
2383 ///
2384 /// Generic Communications Channel Shared Memory Region
2385 ///
2386 
2387 typedef struct {
2388   UINT8    Command;
2389   UINT8    Reserved           : 7;
2390   UINT8    NotifyOnCompletion : 1;
2391 } EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
2392 
2393 typedef struct {
2394   UINT8    CommandComplete      : 1;
2395   UINT8    PlatformInterrupt    : 1;
2396   UINT8    Error                : 1;
2397   UINT8    PlatformNotification : 1;
2398   UINT8    Reserved             : 4;
2399   UINT8    Reserved1;
2400 } EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
2401 
2402 typedef struct {
2403   UINT32                                                    Signature;
2404   EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
2405   EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
2406 } EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
2407 
2408 #define EFI_ACPI_6_2_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_POLARITY  BIT0
2409 #define EFI_ACPI_6_2_PCCT_SUBSPACE_PLATFORM_INTERRUPT_FLAGS_MODE      BIT1
2410 
2411 ///
2412 /// Type 1 HW-Reduced Communications Subspace Structure
2413 ///
2414 typedef struct {
2415   UINT8                                     Type;
2416   UINT8                                     Length;
2417   UINT32                                    PlatformInterrupt;
2418   UINT8                                     PlatformInterruptFlags;
2419   UINT8                                     Reserved;
2420   UINT64                                    BaseAddress;
2421   UINT64                                    AddressLength;
2422   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2423   UINT64                                    DoorbellPreserve;
2424   UINT64                                    DoorbellWrite;
2425   UINT32                                    NominalLatency;
2426   UINT32                                    MaximumPeriodicAccessRate;
2427   UINT16                                    MinimumRequestTurnaroundTime;
2428 } EFI_ACPI_6_2_PCCT_SUBSPACE_1_HW_REDUCED_COMMUNICATIONS;
2429 
2430 ///
2431 /// Type 2 HW-Reduced Communications Subspace Structure
2432 ///
2433 typedef struct {
2434   UINT8                                     Type;
2435   UINT8                                     Length;
2436   UINT32                                    PlatformInterrupt;
2437   UINT8                                     PlatformInterruptFlags;
2438   UINT8                                     Reserved;
2439   UINT64                                    BaseAddress;
2440   UINT64                                    AddressLength;
2441   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2442   UINT64                                    DoorbellPreserve;
2443   UINT64                                    DoorbellWrite;
2444   UINT32                                    NominalLatency;
2445   UINT32                                    MaximumPeriodicAccessRate;
2446   UINT16                                    MinimumRequestTurnaroundTime;
2447   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    PlatformInterruptAckRegister;
2448   UINT64                                    PlatformInterruptAckPreserve;
2449   UINT64                                    PlatformInterruptAckWrite;
2450 } EFI_ACPI_6_2_PCCT_SUBSPACE_2_HW_REDUCED_COMMUNICATIONS;
2451 
2452 ///
2453 /// Type 3 Extended PCC Subspace Structure
2454 ///
2455 typedef struct {
2456   UINT8                                     Type;
2457   UINT8                                     Length;
2458   UINT32                                    PlatformInterrupt;
2459   UINT8                                     PlatformInterruptFlags;
2460   UINT8                                     Reserved;
2461   UINT64                                    BaseAddress;
2462   UINT32                                    AddressLength;
2463   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    DoorbellRegister;
2464   UINT64                                    DoorbellPreserve;
2465   UINT64                                    DoorbellWrite;
2466   UINT32                                    NominalLatency;
2467   UINT32                                    MaximumPeriodicAccessRate;
2468   UINT32                                    MinimumRequestTurnaroundTime;
2469   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    PlatformInterruptAckRegister;
2470   UINT64                                    PlatformInterruptAckPreserve;
2471   UINT64                                    PlatformInterruptAckSet;
2472   UINT8                                     Reserved1[8];
2473   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    CommandCompleteCheckRegister;
2474   UINT64                                    CommandCompleteCheckMask;
2475   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    CommandCompleteUpdateRegister;
2476   UINT64                                    CommandCompleteUpdatePreserve;
2477   UINT64                                    CommandCompleteUpdateSet;
2478   EFI_ACPI_6_2_GENERIC_ADDRESS_STRUCTURE    ErrorStatusRegister;
2479   UINT64                                    ErrorStatusMask;
2480 } EFI_ACPI_6_2_PCCT_SUBSPACE_3_EXTENDED_PCC;
2481 
2482 ///
2483 /// Type 4 Extended PCC Subspace Structure
2484 ///
2485 typedef EFI_ACPI_6_2_PCCT_SUBSPACE_3_EXTENDED_PCC EFI_ACPI_6_2_PCCT_SUBSPACE_4_EXTENDED_PCC;
2486 
2487 #define EFI_ACPI_6_2_PCCT_MASTER_SLAVE_COMMUNICATIONS_CHANNEL_FLAGS_NOTIFY_ON_COMPLETION  BIT0
2488 
2489 typedef struct {
2490   UINT32    Signature;
2491   UINT32    Flags;
2492   UINT32    Length;
2493   UINT32    Command;
2494 } EFI_ACPI_6_2_PCCT_EXTENDED_PCC_SHARED_MEMORY_REGION_HEADER;
2495 
2496 ///
2497 /// Platform Debug Trigger Table (PDTT)
2498 ///
2499 typedef struct {
2500   EFI_ACPI_DESCRIPTION_HEADER    Header;
2501   UINT8                          TriggerCount;
2502   UINT8                          Reserved[3];
2503   UINT32                         TriggerIdentifierArrayOffset;
2504 } EFI_ACPI_6_2_PLATFORM_DEBUG_TRIGGER_TABLE_HEADER;
2505 
2506 ///
2507 /// PDTT Revision (as defined in ACPI 6.2 spec.)
2508 ///
2509 #define EFI_ACPI_6_2_PLATFORM_DEBUG_TRIGGER_TABLE_REVISION  0x00
2510 
2511 ///
2512 /// PDTT Platform Communication Channel Identifier Structure
2513 ///
2514 typedef struct {
2515   UINT16    SubChannelIdentifer : 8;
2516   UINT16    Runtime             : 1;
2517   UINT16    WaitForCompletion   : 1;
2518   UINT16    Reserved            : 6;
2519 } EFI_ACPI_6_2_PDTT_PCC_IDENTIFIER;
2520 
2521 ///
2522 /// PCC Commands Codes used by Platform Debug Trigger Table
2523 ///
2524 #define EFI_ACPI_6_2_PDTT_PCC_COMMAND_DOORBELL_ONLY    0x00
2525 #define EFI_ACPI_6_2_PDTT_PCC_COMMAND_VENDOR_SPECIFIC  0x01
2526 
2527 ///
2528 /// PPTT Platform Communication Channel
2529 ///
2530 typedef EFI_ACPI_6_2_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER EFI_ACPI_6_2_PDTT_PCC;
2531 
2532 ///
2533 /// Processor Properties Topology Table (PPTT)
2534 ///
2535 typedef struct {
2536   EFI_ACPI_DESCRIPTION_HEADER    Header;
2537 } EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_HEADER;
2538 
2539 ///
2540 /// PPTT Revision (as defined in ACPI 6.2 spec.)
2541 ///
2542 #define EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_REVISION  0x01
2543 
2544 ///
2545 /// PPTT types
2546 ///
2547 #define EFI_ACPI_6_2_PPTT_TYPE_PROCESSOR  0x00
2548 #define EFI_ACPI_6_2_PPTT_TYPE_CACHE      0x01
2549 #define EFI_ACPI_6_2_PPTT_TYPE_ID         0x02
2550 
2551 ///
2552 /// PPTT Structure Header
2553 ///
2554 typedef struct {
2555   UINT8    Type;
2556   UINT8    Length;
2557   UINT8    Reserved[2];
2558 } EFI_ACPI_6_2_PPTT_STRUCTURE_HEADER;
2559 
2560 ///
2561 /// For PPTT struct processor flags
2562 ///
2563 #define EFI_ACPI_6_2_PPTT_PROCESSOR_ID_INVALID  0x0
2564 #define EFI_ACPI_6_2_PPTT_PROCESSOR_ID_VALID    0x1
2565 
2566 ///
2567 /// Processor hierarchy node structure flags
2568 ///
2569 typedef struct {
2570   UINT32    PhysicalPackage      : 1;
2571   UINT32    AcpiProcessorIdValid : 1;
2572   UINT32    Reserved             : 30;
2573 } EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR_FLAGS;
2574 
2575 ///
2576 /// Processor hierarchy node structure
2577 ///
2578 typedef struct {
2579   UINT8                                          Type;
2580   UINT8                                          Length;
2581   UINT8                                          Reserved[2];
2582   EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR_FLAGS    Flags;
2583   UINT32                                         Parent;
2584   UINT32                                         AcpiProcessorId;
2585   UINT32                                         NumberOfPrivateResources;
2586 } EFI_ACPI_6_2_PPTT_STRUCTURE_PROCESSOR;
2587 
2588 ///
2589 /// Cache Type Structure flags
2590 ///
2591 typedef struct {
2592   UINT32    SizePropertyValid   : 1;
2593   UINT32    NumberOfSetsValid   : 1;
2594   UINT32    AssociativityValid  : 1;
2595   UINT32    AllocationTypeValid : 1;
2596   UINT32    CacheTypeValid      : 1;
2597   UINT32    WritePolicyValid    : 1;
2598   UINT32    LineSizeValid       : 1;
2599   UINT32    Reserved            : 25;
2600 } EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE_FLAGS;
2601 
2602 ///
2603 /// For cache attributes
2604 ///
2605 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ             0x0
2606 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_WRITE            0x1
2607 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_ALLOCATION_READ_WRITE       0x2
2608 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_DATA             0x0
2609 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_INSTRUCTION      0x1
2610 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_CACHE_TYPE_UNIFIED          0x2
2611 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_BACK     0x0
2612 #define EFI_ACPI_6_2_CACHE_ATTRIBUTES_WRITE_POLICY_WRITE_THROUGH  0x1
2613 
2614 ///
2615 /// Cache Type Structure cache attributes
2616 ///
2617 typedef struct {
2618   UINT8    AllocationType : 2;
2619   UINT8    CacheType      : 2;
2620   UINT8    WritePolicy    : 1;
2621   UINT8    Reserved       : 3;
2622 } EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE_ATTRIBUTES;
2623 
2624 ///
2625 /// Cache Type Structure
2626 ///
2627 typedef struct {
2628   UINT8                                           Type;
2629   UINT8                                           Length;
2630   UINT8                                           Reserved[2];
2631   EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE_FLAGS         Flags;
2632   UINT32                                          NextLevelOfCache;
2633   UINT32                                          Size;
2634   UINT32                                          NumberOfSets;
2635   UINT8                                           Associativity;
2636   EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE_ATTRIBUTES    Attributes;
2637   UINT16                                          LineSize;
2638 } EFI_ACPI_6_2_PPTT_STRUCTURE_CACHE;
2639 
2640 ///
2641 /// ID structure
2642 ///
2643 typedef struct {
2644   UINT8     Type;
2645   UINT8     Length;
2646   UINT8     Reserved[2];
2647   UINT32    VendorId;
2648   UINT64    Level1Id;
2649   UINT64    Level2Id;
2650   UINT16    MajorRev;
2651   UINT16    MinorRev;
2652   UINT16    SpinRev;
2653 } EFI_ACPI_6_2_PPTT_STRUCTURE_ID;
2654 
2655 //
2656 // Known table signatures
2657 //
2658 
2659 ///
2660 /// "RSD PTR " Root System Description Pointer
2661 ///
2662 #define EFI_ACPI_6_2_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
2663 
2664 ///
2665 /// "APIC" Multiple APIC Description Table
2666 ///
2667 #define EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
2668 
2669 ///
2670 /// "BERT" Boot Error Record Table
2671 ///
2672 #define EFI_ACPI_6_2_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
2673 
2674 ///
2675 /// "BGRT" Boot Graphics Resource Table
2676 ///
2677 #define EFI_ACPI_6_2_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
2678 
2679 ///
2680 /// "CPEP" Corrected Platform Error Polling Table
2681 ///
2682 #define EFI_ACPI_6_2_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
2683 
2684 ///
2685 /// "DSDT" Differentiated System Description Table
2686 ///
2687 #define EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
2688 
2689 ///
2690 /// "ECDT" Embedded Controller Boot Resources Table
2691 ///
2692 #define EFI_ACPI_6_2_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
2693 
2694 ///
2695 /// "EINJ" Error Injection Table
2696 ///
2697 #define EFI_ACPI_6_2_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
2698 
2699 ///
2700 /// "ERST" Error Record Serialization Table
2701 ///
2702 #define EFI_ACPI_6_2_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
2703 
2704 ///
2705 /// "FACP" Fixed ACPI Description Table
2706 ///
2707 #define EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
2708 
2709 ///
2710 /// "FACS" Firmware ACPI Control Structure
2711 ///
2712 #define EFI_ACPI_6_2_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
2713 
2714 ///
2715 /// "FPDT" Firmware Performance Data Table
2716 ///
2717 #define EFI_ACPI_6_2_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
2718 
2719 ///
2720 /// "GTDT" Generic Timer Description Table
2721 ///
2722 #define EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
2723 
2724 ///
2725 /// "HEST" Hardware Error Source Table
2726 ///
2727 #define EFI_ACPI_6_2_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
2728 
2729 ///
2730 /// "HMAT" Heterogeneous Memory Attribute Table
2731 ///
2732 #define EFI_ACPI_6_2_HETEROGENEOUS_MEMORY_ATTRIBUTE_TABLE_SIGNATURE  SIGNATURE_32('H', 'M', 'A', 'T')
2733 
2734 ///
2735 /// "MPST" Memory Power State Table
2736 ///
2737 #define EFI_ACPI_6_2_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
2738 
2739 ///
2740 /// "MSCT" Maximum System Characteristics Table
2741 ///
2742 #define EFI_ACPI_6_2_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
2743 
2744 ///
2745 /// "NFIT" NVDIMM Firmware Interface Table
2746 ///
2747 #define EFI_ACPI_6_2_NVDIMM_FIRMWARE_INTERFACE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('N', 'F', 'I', 'T')
2748 
2749 ///
2750 /// "PDTT" Platform Debug Trigger Table
2751 ///
2752 #define EFI_ACPI_6_2_PLATFORM_DEBUG_TRIGGER_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('P', 'D', 'T', 'T')
2753 
2754 ///
2755 /// "PMTT" Platform Memory Topology Table
2756 ///
2757 #define EFI_ACPI_6_2_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
2758 
2759 ///
2760 /// "PPTT" Processor Properties Topology Table
2761 ///
2762 #define EFI_ACPI_6_2_PROCESSOR_PROPERTIES_TOPOLOGY_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('P', 'P', 'T', 'T')
2763 
2764 ///
2765 /// "PSDT" Persistent System Description Table
2766 ///
2767 #define EFI_ACPI_6_2_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
2768 
2769 ///
2770 /// "RASF" ACPI RAS Feature Table
2771 ///
2772 #define EFI_ACPI_6_2_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
2773 
2774 ///
2775 /// "RSDT" Root System Description Table
2776 ///
2777 #define EFI_ACPI_6_2_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
2778 
2779 ///
2780 /// "SBST" Smart Battery Specification Table
2781 ///
2782 #define EFI_ACPI_6_2_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
2783 
2784 ///
2785 /// "SDEV" Secure DEVices Table
2786 ///
2787 #define EFI_ACPI_6_2_SECURE_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('S', 'D', 'E', 'V')
2788 
2789 ///
2790 /// "SLIT" System Locality Information Table
2791 ///
2792 #define EFI_ACPI_6_2_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
2793 
2794 ///
2795 /// "SRAT" System Resource Affinity Table
2796 ///
2797 #define EFI_ACPI_6_2_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
2798 
2799 ///
2800 /// "SSDT" Secondary System Description Table
2801 ///
2802 #define EFI_ACPI_6_2_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
2803 
2804 ///
2805 /// "XSDT" Extended System Description Table
2806 ///
2807 #define EFI_ACPI_6_2_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
2808 
2809 ///
2810 /// "BOOT" MS Simple Boot Spec
2811 ///
2812 #define EFI_ACPI_6_2_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
2813 
2814 ///
2815 /// "CSRT" MS Core System Resource Table
2816 ///
2817 #define EFI_ACPI_6_2_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
2818 
2819 ///
2820 /// "DBG2" MS Debug Port 2 Spec
2821 ///
2822 #define EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
2823 
2824 ///
2825 /// "DBGP" MS Debug Port Spec
2826 ///
2827 #define EFI_ACPI_6_2_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
2828 
2829 ///
2830 /// "DMAR" DMA Remapping Table
2831 ///
2832 #define EFI_ACPI_6_2_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
2833 
2834 ///
2835 /// "DPPT" DMA Protection Policy Table
2836 ///
2837 #define EFI_ACPI_6_2_DMA_PROTECTION_POLICY_TABLE_SIGNATURE  SIGNATURE_32('D', 'P', 'P', 'T')
2838 
2839 ///
2840 /// "DRTM" Dynamic Root of Trust for Measurement Table
2841 ///
2842 #define EFI_ACPI_6_2_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
2843 
2844 ///
2845 /// "ETDT" Event Timer Description Table
2846 ///
2847 #define EFI_ACPI_6_2_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
2848 
2849 ///
2850 /// "HPET" IA-PC High Precision Event Timer Table
2851 ///
2852 #define EFI_ACPI_6_2_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
2853 
2854 ///
2855 /// "iBFT" iSCSI Boot Firmware Table
2856 ///
2857 #define EFI_ACPI_6_2_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
2858 
2859 ///
2860 /// "IORT" I/O Remapping Table
2861 ///
2862 #define EFI_ACPI_6_2_IO_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('I', 'O', 'R', 'T')
2863 
2864 ///
2865 /// "IVRS" I/O Virtualization Reporting Structure
2866 ///
2867 #define EFI_ACPI_6_2_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
2868 
2869 ///
2870 /// "LPIT" Low Power Idle Table
2871 ///
2872 #define EFI_ACPI_6_2_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('L', 'P', 'I', 'T')
2873 
2874 ///
2875 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
2876 ///
2877 #define EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
2878 
2879 ///
2880 /// "MCHI" Management Controller Host Interface Table
2881 ///
2882 #define EFI_ACPI_6_2_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
2883 
2884 ///
2885 /// "MSDM" MS Data Management Table
2886 ///
2887 #define EFI_ACPI_6_2_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
2888 
2889 ///
2890 /// "PCCT" Platform Communications Channel Table
2891 ///
2892 #define EFI_ACPI_6_2_PLATFORM_COMMUNICATIONS_CHANNEL_TABLE_SIGNATURE  SIGNATURE_32('P', 'C', 'C', 'T')
2893 
2894 ///
2895 /// "SDEI" Software Delegated Exceptions Interface Table
2896 ///
2897 #define EFI_ACPI_6_2_SOFTWARE_DELEGATED_EXCEPTIONS_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'D', 'E', 'I')
2898 
2899 ///
2900 /// "SLIC" MS Software Licensing Table Specification
2901 ///
2902 #define EFI_ACPI_6_2_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
2903 
2904 ///
2905 /// "SPCR" Serial Port Console Redirection Table
2906 ///
2907 #define EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
2908 
2909 ///
2910 /// "SPMI" Server Platform Management Interface Table
2911 ///
2912 #define EFI_ACPI_6_2_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
2913 
2914 ///
2915 /// "STAO" _STA Override Table
2916 ///
2917 #define EFI_ACPI_6_2_STA_OVERRIDE_TABLE_SIGNATURE  SIGNATURE_32('S', 'T', 'A', 'O')
2918 
2919 ///
2920 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
2921 ///
2922 #define EFI_ACPI_6_2_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
2923 
2924 ///
2925 /// "TPM2" Trusted Computing Platform 1 Table
2926 ///
2927 #define EFI_ACPI_6_2_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
2928 
2929 ///
2930 /// "UEFI" UEFI ACPI Data Table
2931 ///
2932 #define EFI_ACPI_6_2_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
2933 
2934 ///
2935 /// "WAET" Windows ACPI Emulated Devices Table
2936 ///
2937 #define EFI_ACPI_6_2_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
2938 
2939 ///
2940 /// "WDAT" Watchdog Action Table
2941 ///
2942 #define EFI_ACPI_6_2_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
2943 
2944 ///
2945 /// "WDRT" Watchdog Resource Table
2946 ///
2947 #define EFI_ACPI_6_2_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
2948 
2949 ///
2950 /// "WPBT" MS Platform Binary Table
2951 ///
2952 #define EFI_ACPI_6_2_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
2953 
2954 ///
2955 /// "WSMT" Windows SMM Security Mitigation Table
2956 ///
2957 #define EFI_ACPI_6_2_WINDOWS_SMM_SECURITY_MITIGATION_TABLE_SIGNATURE  SIGNATURE_32('W', 'S', 'M', 'T')
2958 
2959 ///
2960 /// "XENV" Xen Project Table
2961 ///
2962 #define EFI_ACPI_6_2_XEN_PROJECT_TABLE_SIGNATURE  SIGNATURE_32('X', 'E', 'N', 'V')
2963 
2964 #pragma pack()
2965 
2966 #endif
2967