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