1/** @file
2  ACPI 5.0 definitions from the ACPI Specification Revision 5.0a November 13, 2013.
3
4  Copyright (c) 2014 Hewlett-Packard Development Company, L.P.<BR>
5  Copyright (c) 2011 - 2014, Intel Corporation. All rights reserved.<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_5_0_H_
16#define _ACPI_5_0_H_
17
18#include <IndustryStandard/Acpi40.h>
19
20//
21// Define for Desriptor
22//
23#define ACPI_SMALL_FIXED_DMA_DESCRIPTOR_NAME                         0x0A
24#define ACPI_LARGE_GPIO_CONNECTION_DESCRIPTOR_NAME                   0x0C
25#define ACPI_LARGE_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR_NAME     0x0E
26
27#define ACPI_FIXED_DMA_DESCRIPTOR                         0x55
28#define ACPI_GPIO_CONNECTION_DESCRIPTOR                   0x8C
29#define ACPI_GENERIC_SERIAL_BUS_CONNECTION_DESCRIPTOR     0x8E
30
31#pragma pack(1)
32
33///
34/// Generic DMA Descriptor.
35///
36typedef PACKED struct {
37  ACPI_SMALL_RESOURCE_HEADER   Header;
38  UINT16                       DmaRequestLine;
39  UINT16                       DmaChannel;
40  UINT8                        DmaTransferWidth;
41} EFI_ACPI_FIXED_DMA_DESCRIPTOR;
42
43///
44/// GPIO Connection Descriptor
45///
46typedef PACKED struct {
47  ACPI_LARGE_RESOURCE_HEADER    Header;
48  UINT8                         RevisionId;
49  UINT8                         ConnectionType;
50  UINT16                        GeneralFlags;
51  UINT16                        InterruptFlags;
52  UINT8                         PinConfiguration;
53  UINT16                        OutputDriveStrength;
54  UINT16                        DebounceTimeout;
55  UINT16                        PinTableOffset;
56  UINT8                         ResourceSourceIndex;
57  UINT16                        ResourceSourceNameOffset;
58  UINT16                        VendorDataOffset;
59  UINT16                        VendorDataLength;
60} EFI_ACPI_GPIO_CONNECTION_DESCRIPTOR;
61
62#define EFI_ACPI_GPIO_CONNECTION_TYPE_INTERRUPT   0x0
63#define EFI_ACPI_GPIO_CONNECTION_TYPE_IO          0x1
64
65///
66/// Serial Bus Resource Descriptor (Generic)
67///
68typedef PACKED struct {
69  ACPI_LARGE_RESOURCE_HEADER    Header;
70  UINT8                         RevisionId;
71  UINT8                         ResourceSourceIndex;
72  UINT8                         SerialBusType;
73  UINT8                         GeneralFlags;
74  UINT16                        TypeSpecificFlags;
75  UINT8                         TypeSpecificRevisionId;
76  UINT16                        TypeDataLength;
77// Type specific data
78} EFI_ACPI_SERIAL_BUS_RESOURCE_DESCRIPTOR;
79
80#define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_I2C   0x1
81#define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_SPI   0x2
82#define EFI_ACPI_SERIAL_BUS_RESOURCE_TYPE_UART  0x3
83
84///
85/// Serial Bus Resource Descriptor (I2C)
86///
87typedef PACKED struct {
88  ACPI_LARGE_RESOURCE_HEADER    Header;
89  UINT8                         RevisionId;
90  UINT8                         ResourceSourceIndex;
91  UINT8                         SerialBusType;
92  UINT8                         GeneralFlags;
93  UINT16                        TypeSpecificFlags;
94  UINT8                         TypeSpecificRevisionId;
95  UINT16                        TypeDataLength;
96  UINT32                        ConnectionSpeed;
97  UINT16                        SlaveAddress;
98} EFI_ACPI_SERIAL_BUS_RESOURCE_I2C_DESCRIPTOR;
99
100///
101/// Serial Bus Resource Descriptor (SPI)
102///
103typedef PACKED struct {
104  ACPI_LARGE_RESOURCE_HEADER    Header;
105  UINT8                         RevisionId;
106  UINT8                         ResourceSourceIndex;
107  UINT8                         SerialBusType;
108  UINT8                         GeneralFlags;
109  UINT16                        TypeSpecificFlags;
110  UINT8                         TypeSpecificRevisionId;
111  UINT16                        TypeDataLength;
112  UINT32                        ConnectionSpeed;
113  UINT8                         DataBitLength;
114  UINT8                         Phase;
115  UINT8                         Polarity;
116  UINT16                        DeviceSelection;
117} EFI_ACPI_SERIAL_BUS_RESOURCE_SPI_DESCRIPTOR;
118
119///
120/// Serial Bus Resource Descriptor (UART)
121///
122typedef PACKED struct {
123  ACPI_LARGE_RESOURCE_HEADER    Header;
124  UINT8                         RevisionId;
125  UINT8                         ResourceSourceIndex;
126  UINT8                         SerialBusType;
127  UINT8                         GeneralFlags;
128  UINT16                        TypeSpecificFlags;
129  UINT8                         TypeSpecificRevisionId;
130  UINT16                        TypeDataLength;
131  UINT32                        DefaultBaudRate;
132  UINT16                        RxFIFO;
133  UINT16                        TxFIFO;
134  UINT8                         Parity;
135  UINT8                         SerialLinesEnabled;
136} EFI_ACPI_SERIAL_BUS_RESOURCE_UART_DESCRIPTOR;
137
138#pragma pack()
139
140//
141// Ensure proper structure formats
142//
143#pragma pack(1)
144
145///
146/// ACPI 5.0 Generic Address Space definition
147///
148typedef struct {
149  UINT8   AddressSpaceId;
150  UINT8   RegisterBitWidth;
151  UINT8   RegisterBitOffset;
152  UINT8   AccessSize;
153  UINT64  Address;
154} EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE;
155
156//
157// Generic Address Space Address IDs
158//
159#define EFI_ACPI_5_0_SYSTEM_MEMORY              0
160#define EFI_ACPI_5_0_SYSTEM_IO                  1
161#define EFI_ACPI_5_0_PCI_CONFIGURATION_SPACE    2
162#define EFI_ACPI_5_0_EMBEDDED_CONTROLLER        3
163#define EFI_ACPI_5_0_SMBUS                      4
164#define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL  0x0A
165#define EFI_ACPI_5_0_FUNCTIONAL_FIXED_HARDWARE       0x7F
166
167//
168// Generic Address Space Access Sizes
169//
170#define EFI_ACPI_5_0_UNDEFINED  0
171#define EFI_ACPI_5_0_BYTE       1
172#define EFI_ACPI_5_0_WORD       2
173#define EFI_ACPI_5_0_DWORD      3
174#define EFI_ACPI_5_0_QWORD      4
175
176//
177// ACPI 5.0 table structures
178//
179
180///
181/// Root System Description Pointer Structure
182///
183typedef struct {
184  UINT64  Signature;
185  UINT8   Checksum;
186  UINT8   OemId[6];
187  UINT8   Revision;
188  UINT32  RsdtAddress;
189  UINT32  Length;
190  UINT64  XsdtAddress;
191  UINT8   ExtendedChecksum;
192  UINT8   Reserved[3];
193} EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
194
195///
196/// RSD_PTR Revision (as defined in ACPI 5.0 spec.)
197///
198#define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 5.0) says current value is 2
199
200///
201/// Common table header, this prefaces all ACPI tables, including FACS, but
202/// excluding the RSD PTR structure
203///
204typedef struct {
205  UINT32  Signature;
206  UINT32  Length;
207} EFI_ACPI_5_0_COMMON_HEADER;
208
209//
210// Root System Description Table
211// No definition needed as it is a common description table header, the same with
212// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
213//
214
215///
216/// RSDT Revision (as defined in ACPI 5.0 spec.)
217///
218#define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
219
220//
221// Extended System Description Table
222// No definition needed as it is a common description table header, the same with
223// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
224//
225
226///
227/// XSDT Revision (as defined in ACPI 5.0 spec.)
228///
229#define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
230
231///
232/// Fixed ACPI Description Table Structure (FADT)
233///
234typedef struct {
235  EFI_ACPI_DESCRIPTION_HEADER             Header;
236  UINT32                                  FirmwareCtrl;
237  UINT32                                  Dsdt;
238  UINT8                                   Reserved0;
239  UINT8                                   PreferredPmProfile;
240  UINT16                                  SciInt;
241  UINT32                                  SmiCmd;
242  UINT8                                   AcpiEnable;
243  UINT8                                   AcpiDisable;
244  UINT8                                   S4BiosReq;
245  UINT8                                   PstateCnt;
246  UINT32                                  Pm1aEvtBlk;
247  UINT32                                  Pm1bEvtBlk;
248  UINT32                                  Pm1aCntBlk;
249  UINT32                                  Pm1bCntBlk;
250  UINT32                                  Pm2CntBlk;
251  UINT32                                  PmTmrBlk;
252  UINT32                                  Gpe0Blk;
253  UINT32                                  Gpe1Blk;
254  UINT8                                   Pm1EvtLen;
255  UINT8                                   Pm1CntLen;
256  UINT8                                   Pm2CntLen;
257  UINT8                                   PmTmrLen;
258  UINT8                                   Gpe0BlkLen;
259  UINT8                                   Gpe1BlkLen;
260  UINT8                                   Gpe1Base;
261  UINT8                                   CstCnt;
262  UINT16                                  PLvl2Lat;
263  UINT16                                  PLvl3Lat;
264  UINT16                                  FlushSize;
265  UINT16                                  FlushStride;
266  UINT8                                   DutyOffset;
267  UINT8                                   DutyWidth;
268  UINT8                                   DayAlrm;
269  UINT8                                   MonAlrm;
270  UINT8                                   Century;
271  UINT16                                  IaPcBootArch;
272  UINT8                                   Reserved1;
273  UINT32                                  Flags;
274  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  ResetReg;
275  UINT8                                   ResetValue;
276  UINT8                                   Reserved2[3];
277  UINT64                                  XFirmwareCtrl;
278  UINT64                                  XDsdt;
279  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
280  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
281  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
282  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
283  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
284  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
285  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
286  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
287  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepControlReg;
288  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg;
289} EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE;
290
291///
292/// FADT Version (as defined in ACPI 5.0 spec.)
293///
294#define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x05
295
296//
297// Fixed ACPI Description Table Preferred Power Management Profile
298//
299#define EFI_ACPI_5_0_PM_PROFILE_UNSPECIFIED         0
300#define EFI_ACPI_5_0_PM_PROFILE_DESKTOP             1
301#define EFI_ACPI_5_0_PM_PROFILE_MOBILE              2
302#define EFI_ACPI_5_0_PM_PROFILE_WORKSTATION         3
303#define EFI_ACPI_5_0_PM_PROFILE_ENTERPRISE_SERVER   4
304#define EFI_ACPI_5_0_PM_PROFILE_SOHO_SERVER         5
305#define EFI_ACPI_5_0_PM_PROFILE_APPLIANCE_PC        6
306#define EFI_ACPI_5_0_PM_PROFILE_PERFORMANCE_SERVER  7
307#define EFI_ACPI_5_0_PM_PROFILE_TABLET              8
308
309//
310// Fixed ACPI Description Table Boot Architecture Flags
311// All other bits are reserved and must be set to 0.
312//
313#define EFI_ACPI_5_0_LEGACY_DEVICES              BIT0
314#define EFI_ACPI_5_0_8042                        BIT1
315#define EFI_ACPI_5_0_VGA_NOT_PRESENT             BIT2
316#define EFI_ACPI_5_0_MSI_NOT_SUPPORTED           BIT3
317#define EFI_ACPI_5_0_PCIE_ASPM_CONTROLS          BIT4
318#define EFI_ACPI_5_0_CMOS_RTC_NOT_PRESENT        BIT5
319
320//
321// Fixed ACPI Description Table Fixed Feature Flags
322// All other bits are reserved and must be set to 0.
323//
324#define EFI_ACPI_5_0_WBINVD                                 BIT0
325#define EFI_ACPI_5_0_WBINVD_FLUSH                           BIT1
326#define EFI_ACPI_5_0_PROC_C1                                BIT2
327#define EFI_ACPI_5_0_P_LVL2_UP                              BIT3
328#define EFI_ACPI_5_0_PWR_BUTTON                             BIT4
329#define EFI_ACPI_5_0_SLP_BUTTON                             BIT5
330#define EFI_ACPI_5_0_FIX_RTC                                BIT6
331#define EFI_ACPI_5_0_RTC_S4                                 BIT7
332#define EFI_ACPI_5_0_TMR_VAL_EXT                            BIT8
333#define EFI_ACPI_5_0_DCK_CAP                                BIT9
334#define EFI_ACPI_5_0_RESET_REG_SUP                          BIT10
335#define EFI_ACPI_5_0_SEALED_CASE                            BIT11
336#define EFI_ACPI_5_0_HEADLESS                               BIT12
337#define EFI_ACPI_5_0_CPU_SW_SLP                             BIT13
338#define EFI_ACPI_5_0_PCI_EXP_WAK                            BIT14
339#define EFI_ACPI_5_0_USE_PLATFORM_CLOCK                     BIT15
340#define EFI_ACPI_5_0_S4_RTC_STS_VALID                       BIT16
341#define EFI_ACPI_5_0_REMOTE_POWER_ON_CAPABLE                BIT17
342#define EFI_ACPI_5_0_FORCE_APIC_CLUSTER_MODEL               BIT18
343#define EFI_ACPI_5_0_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
344#define EFI_ACPI_5_0_HW_REDUCED_ACPI                        BIT20
345#define EFI_ACPI_5_0_LOW_POWER_S0_IDLE_CAPABLE              BIT21
346
347///
348/// Firmware ACPI Control Structure
349///
350typedef struct {
351  UINT32  Signature;
352  UINT32  Length;
353  UINT32  HardwareSignature;
354  UINT32  FirmwareWakingVector;
355  UINT32  GlobalLock;
356  UINT32  Flags;
357  UINT64  XFirmwareWakingVector;
358  UINT8   Version;
359  UINT8   Reserved0[3];
360  UINT32  OspmFlags;
361  UINT8   Reserved1[24];
362} EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
363
364///
365/// FACS Version (as defined in ACPI 5.0 spec.)
366///
367#define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
368
369///
370/// Firmware Control Structure Feature Flags
371/// All other bits are reserved and must be set to 0.
372///
373#define EFI_ACPI_5_0_S4BIOS_F                     BIT0
374#define EFI_ACPI_5_0_64BIT_WAKE_SUPPORTED_F       BIT1
375
376///
377/// OSPM Enabled Firmware Control Structure Flags
378/// All other bits are reserved and must be set to 0.
379///
380#define EFI_ACPI_5_0_OSPM_64BIT_WAKE_F            BIT0
381
382//
383// Differentiated System Description Table,
384// Secondary System Description Table
385// and Persistent System Description Table,
386// no definition needed as they are common description table header, the same with
387// EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
388//
389#define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
390#define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
391
392///
393/// Multiple APIC Description Table header definition.  The rest of the table
394/// must be defined in a platform specific manner.
395///
396typedef struct {
397  EFI_ACPI_DESCRIPTION_HEADER Header;
398  UINT32                      LocalApicAddress;
399  UINT32                      Flags;
400} EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
401
402///
403/// MADT Revision (as defined in ACPI 5.0 spec.)
404///
405#define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03
406
407///
408/// Multiple APIC Flags
409/// All other bits are reserved and must be set to 0.
410///
411#define EFI_ACPI_5_0_PCAT_COMPAT         BIT0
412
413//
414// Multiple APIC Description Table APIC structure types
415// All other values between 0x0D and 0x7F are reserved and
416// will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
417//
418#define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC           0x00
419#define EFI_ACPI_5_0_IO_APIC                        0x01
420#define EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE      0x02
421#define EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
422#define EFI_ACPI_5_0_LOCAL_APIC_NMI                 0x04
423#define EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
424#define EFI_ACPI_5_0_IO_SAPIC                       0x06
425#define EFI_ACPI_5_0_LOCAL_SAPIC                    0x07
426#define EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES     0x08
427#define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC         0x09
428#define EFI_ACPI_5_0_LOCAL_X2APIC_NMI               0x0A
429#define EFI_ACPI_5_0_GIC                            0x0B
430#define EFI_ACPI_5_0_GICD                           0x0C
431
432//
433// APIC Structure Definitions
434//
435
436///
437/// Processor Local APIC Structure Definition
438///
439typedef struct {
440  UINT8   Type;
441  UINT8   Length;
442  UINT8   AcpiProcessorId;
443  UINT8   ApicId;
444  UINT32  Flags;
445} EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
446
447///
448/// Local APIC Flags.  All other bits are reserved and must be 0.
449///
450#define EFI_ACPI_5_0_LOCAL_APIC_ENABLED        BIT0
451
452///
453/// IO APIC Structure
454///
455typedef struct {
456  UINT8   Type;
457  UINT8   Length;
458  UINT8   IoApicId;
459  UINT8   Reserved;
460  UINT32  IoApicAddress;
461  UINT32  GlobalSystemInterruptBase;
462} EFI_ACPI_5_0_IO_APIC_STRUCTURE;
463
464///
465/// Interrupt Source Override Structure
466///
467typedef struct {
468  UINT8   Type;
469  UINT8   Length;
470  UINT8   Bus;
471  UINT8   Source;
472  UINT32  GlobalSystemInterrupt;
473  UINT16  Flags;
474} EFI_ACPI_5_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
475
476///
477/// Platform Interrupt Sources Structure Definition
478///
479typedef struct {
480  UINT8   Type;
481  UINT8   Length;
482  UINT16  Flags;
483  UINT8   InterruptType;
484  UINT8   ProcessorId;
485  UINT8   ProcessorEid;
486  UINT8   IoSapicVector;
487  UINT32  GlobalSystemInterrupt;
488  UINT32  PlatformInterruptSourceFlags;
489  UINT8   CpeiProcessorOverride;
490  UINT8   Reserved[31];
491} EFI_ACPI_5_0_PLATFORM_INTERRUPT_APIC_STRUCTURE;
492
493//
494// MPS INTI flags.
495// All other bits are reserved and must be set to 0.
496//
497#define EFI_ACPI_5_0_POLARITY      (3 << 0)
498#define EFI_ACPI_5_0_TRIGGER_MODE  (3 << 2)
499
500///
501/// Non-Maskable Interrupt Source Structure
502///
503typedef struct {
504  UINT8   Type;
505  UINT8   Length;
506  UINT16  Flags;
507  UINT32  GlobalSystemInterrupt;
508} EFI_ACPI_5_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
509
510///
511/// Local APIC NMI Structure
512///
513typedef struct {
514  UINT8   Type;
515  UINT8   Length;
516  UINT8   AcpiProcessorId;
517  UINT16  Flags;
518  UINT8   LocalApicLint;
519} EFI_ACPI_5_0_LOCAL_APIC_NMI_STRUCTURE;
520
521///
522/// Local APIC Address Override Structure
523///
524typedef struct {
525  UINT8   Type;
526  UINT8   Length;
527  UINT16  Reserved;
528  UINT64  LocalApicAddress;
529} EFI_ACPI_5_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
530
531///
532/// IO SAPIC Structure
533///
534typedef struct {
535  UINT8   Type;
536  UINT8   Length;
537  UINT8   IoApicId;
538  UINT8   Reserved;
539  UINT32  GlobalSystemInterruptBase;
540  UINT64  IoSapicAddress;
541} EFI_ACPI_5_0_IO_SAPIC_STRUCTURE;
542
543///
544/// Local SAPIC Structure
545/// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
546///
547typedef struct {
548  UINT8   Type;
549  UINT8   Length;
550  UINT8   AcpiProcessorId;
551  UINT8   LocalSapicId;
552  UINT8   LocalSapicEid;
553  UINT8   Reserved[3];
554  UINT32  Flags;
555  UINT32  ACPIProcessorUIDValue;
556} EFI_ACPI_5_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
557
558///
559/// Platform Interrupt Sources Structure
560///
561typedef struct {
562  UINT8   Type;
563  UINT8   Length;
564  UINT16  Flags;
565  UINT8   InterruptType;
566  UINT8   ProcessorId;
567  UINT8   ProcessorEid;
568  UINT8   IoSapicVector;
569  UINT32  GlobalSystemInterrupt;
570  UINT32  PlatformInterruptSourceFlags;
571} EFI_ACPI_5_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
572
573///
574/// Platform Interrupt Source Flags.
575/// All other bits are reserved and must be set to 0.
576///
577#define EFI_ACPI_5_0_CPEI_PROCESSOR_OVERRIDE          BIT0
578
579///
580/// Processor Local x2APIC Structure Definition
581///
582typedef struct {
583  UINT8   Type;
584  UINT8   Length;
585  UINT8   Reserved[2];
586  UINT32  X2ApicId;
587  UINT32  Flags;
588  UINT32  AcpiProcessorUid;
589} EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
590
591///
592/// Local x2APIC NMI Structure
593///
594typedef struct {
595  UINT8   Type;
596  UINT8   Length;
597  UINT16  Flags;
598  UINT32  AcpiProcessorUid;
599  UINT8   LocalX2ApicLint;
600  UINT8   Reserved[3];
601} EFI_ACPI_5_0_LOCAL_X2APIC_NMI_STRUCTURE;
602
603///
604/// GIC Structure
605///
606typedef struct {
607  UINT8   Type;
608  UINT8   Length;
609  UINT16  Reserved;
610  UINT32  GicId;
611  UINT32  AcpiProcessorUid;
612  UINT32  Flags;
613  UINT32  ParkingProtocolVersion;
614  UINT32  PerformanceInterruptGsiv;
615  UINT64  ParkedAddress;
616  UINT64  PhysicalBaseAddress;
617} EFI_ACPI_5_0_GIC_STRUCTURE;
618
619///
620/// GIC Flags.  All other bits are reserved and must be 0.
621///
622#define EFI_ACPI_5_0_GIC_ENABLED                     BIT0
623#define EFI_ACPI_5_0_PERFORMANCE_INTERRUPT_MODEL     BIT1
624
625///
626/// GIC Distributor Structure
627///
628typedef struct {
629  UINT8   Type;
630  UINT8   Length;
631  UINT16  Reserved1;
632  UINT32  GicId;
633  UINT64  PhysicalBaseAddress;
634  UINT32  SystemVectorBase;
635  UINT32  Reserved2;
636} EFI_ACPI_5_0_GIC_DISTRIBUTOR_STRUCTURE;
637
638///
639/// Smart Battery Description Table (SBST)
640///
641typedef struct {
642  EFI_ACPI_DESCRIPTION_HEADER Header;
643  UINT32                      WarningEnergyLevel;
644  UINT32                      LowEnergyLevel;
645  UINT32                      CriticalEnergyLevel;
646} EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE;
647
648///
649/// SBST Version (as defined in ACPI 5.0 spec.)
650///
651#define EFI_ACPI_5_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
652
653///
654/// Embedded Controller Boot Resources Table (ECDT)
655/// The table is followed by a null terminated ASCII string that contains
656/// a fully qualified reference to the name space object.
657///
658typedef struct {
659  EFI_ACPI_DESCRIPTION_HEADER             Header;
660  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcControl;
661  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE  EcData;
662  UINT32                                  Uid;
663  UINT8                                   GpeBit;
664} EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
665
666///
667/// ECDT Version (as defined in ACPI 5.0 spec.)
668///
669#define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
670
671///
672/// System Resource Affinity Table (SRAT).  The rest of the table
673/// must be defined in a platform specific manner.
674///
675typedef struct {
676  EFI_ACPI_DESCRIPTION_HEADER Header;
677  UINT32                      Reserved1;  ///< Must be set to 1
678  UINT64                      Reserved2;
679} EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
680
681///
682/// SRAT Version (as defined in ACPI 5.0 spec.)
683///
684#define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
685
686//
687// SRAT structure types.
688// All other values between 0x03 an 0xFF are reserved and
689// will be ignored by OSPM.
690//
691#define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
692#define EFI_ACPI_5_0_MEMORY_AFFINITY                      0x01
693#define EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
694
695///
696/// Processor Local APIC/SAPIC Affinity Structure Definition
697///
698typedef struct {
699  UINT8   Type;
700  UINT8   Length;
701  UINT8   ProximityDomain7To0;
702  UINT8   ApicId;
703  UINT32  Flags;
704  UINT8   LocalSapicEid;
705  UINT8   ProximityDomain31To8[3];
706  UINT32  ClockDomain;
707} EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
708
709///
710/// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
711///
712#define EFI_ACPI_5_0_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
713
714///
715/// Memory Affinity Structure Definition
716///
717typedef struct {
718  UINT8   Type;
719  UINT8   Length;
720  UINT32  ProximityDomain;
721  UINT16  Reserved1;
722  UINT32  AddressBaseLow;
723  UINT32  AddressBaseHigh;
724  UINT32  LengthLow;
725  UINT32  LengthHigh;
726  UINT32  Reserved2;
727  UINT32  Flags;
728  UINT64  Reserved3;
729} EFI_ACPI_5_0_MEMORY_AFFINITY_STRUCTURE;
730
731//
732// Memory Flags.  All other bits are reserved and must be 0.
733//
734#define EFI_ACPI_5_0_MEMORY_ENABLED       (1 << 0)
735#define EFI_ACPI_5_0_MEMORY_HOT_PLUGGABLE (1 << 1)
736#define EFI_ACPI_5_0_MEMORY_NONVOLATILE   (1 << 2)
737
738///
739/// Processor Local x2APIC Affinity Structure Definition
740///
741typedef struct {
742  UINT8   Type;
743  UINT8   Length;
744  UINT8   Reserved1[2];
745  UINT32  ProximityDomain;
746  UINT32  X2ApicId;
747  UINT32  Flags;
748  UINT32  ClockDomain;
749  UINT8   Reserved2[4];
750} EFI_ACPI_5_0_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
751
752///
753/// System Locality Distance Information Table (SLIT).
754/// The rest of the table is a matrix.
755///
756typedef struct {
757  EFI_ACPI_DESCRIPTION_HEADER Header;
758  UINT64                      NumberOfSystemLocalities;
759} EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
760
761///
762/// SLIT Version (as defined in ACPI 5.0 spec.)
763///
764#define EFI_ACPI_5_0_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
765
766///
767/// Corrected Platform Error Polling Table (CPEP)
768///
769typedef struct {
770  EFI_ACPI_DESCRIPTION_HEADER Header;
771  UINT8                       Reserved[8];
772} EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
773
774///
775/// CPEP Version (as defined in ACPI 5.0 spec.)
776///
777#define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
778
779//
780// CPEP processor structure types.
781//
782#define EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC  0x00
783
784///
785/// Corrected Platform Error Polling Processor Structure Definition
786///
787typedef struct {
788  UINT8   Type;
789  UINT8   Length;
790  UINT8   ProcessorId;
791  UINT8   ProcessorEid;
792  UINT32  PollingInterval;
793} EFI_ACPI_5_0_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
794
795///
796/// Maximum System Characteristics Table (MSCT)
797///
798typedef struct {
799  EFI_ACPI_DESCRIPTION_HEADER Header;
800  UINT32                      OffsetProxDomInfo;
801  UINT32                      MaximumNumberOfProximityDomains;
802  UINT32                      MaximumNumberOfClockDomains;
803  UINT64                      MaximumPhysicalAddress;
804} EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
805
806///
807/// MSCT Version (as defined in ACPI 5.0 spec.)
808///
809#define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
810
811///
812/// Maximum Proximity Domain Information Structure Definition
813///
814typedef struct {
815  UINT8   Revision;
816  UINT8   Length;
817  UINT32  ProximityDomainRangeLow;
818  UINT32  ProximityDomainRangeHigh;
819  UINT32  MaximumProcessorCapacity;
820  UINT64  MaximumMemoryCapacity;
821} EFI_ACPI_5_0_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
822
823///
824/// ACPI RAS Feature Table definition.
825///
826typedef struct {
827  EFI_ACPI_DESCRIPTION_HEADER Header;
828  UINT8                       PlatformCommunicationChannelIdentifier[12];
829} EFI_ACPI_5_0_RAS_FEATURE_TABLE;
830
831///
832/// RASF Version (as defined in ACPI 5.0 spec.)
833///
834#define EFI_ACPI_5_0_RAS_FEATURE_TABLE_REVISION 0x01
835
836///
837/// ACPI RASF Platform Communication Channel Shared Memory Region definition.
838///
839typedef struct {
840  UINT32                      Signature;
841  UINT16                      Command;
842  UINT16                      Status;
843  UINT16                      Version;
844  UINT8                       RASCapabilities[16];
845  UINT8                       SetRASCapabilities[16];
846  UINT16                      NumberOfRASFParameterBlocks;
847  UINT32                      SetRASCapabilitiesStatus;
848} EFI_ACPI_5_0_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
849
850///
851/// ACPI RASF PCC command code
852///
853#define EFI_ACPI_5_0_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
854
855///
856/// ACPI RASF Platform RAS Capabilities
857///
858#define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED                          0x01
859#define EFI_ACPI_5_0_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE  0x02
860
861///
862/// ACPI RASF Parameter Block structure for PATROL_SCRUB
863///
864typedef struct {
865  UINT16                      Type;
866  UINT16                      Version;
867  UINT16                      Length;
868  UINT16                      PatrolScrubCommand;
869  UINT64                      RequestedAddressRange[2];
870  UINT64                      ActualAddressRange[2];
871  UINT16                      Flags;
872  UINT8                       RequestedSpeed;
873} EFI_ACPI_5_0_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
874
875///
876/// ACPI RASF Patrol Scrub command
877///
878#define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS   0x01
879#define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER   0x02
880#define EFI_ACPI_5_0_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER    0x03
881
882///
883/// Memory Power State Table definition.
884///
885typedef struct {
886  EFI_ACPI_DESCRIPTION_HEADER Header;
887  UINT8                       PlatformCommunicationChannelIdentifier;
888  UINT8                       Reserved[3];
889// Memory Power Node Structure
890// Memory Power State Characteristics
891} EFI_ACPI_5_0_MEMORY_POWER_STATUS_TABLE;
892
893///
894/// MPST Version (as defined in ACPI 5.0 spec.)
895///
896#define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_REVISION 0x01
897
898///
899/// MPST Platform Communication Channel Shared Memory Region definition.
900///
901typedef struct {
902  UINT32                      Signature;
903  UINT16                      Command;
904  UINT16                      Status;
905  UINT32                      MemoryPowerCommandRegister;
906  UINT32                      MemoryPowerStatusRegister;
907  UINT32                      PowerStateId;
908  UINT32                      MemoryPowerNodeId;
909  UINT64                      MemoryEnergyConsumed;
910  UINT64                      ExpectedAveragePowerComsuned;
911} EFI_ACPI_5_0_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
912
913///
914/// ACPI MPST PCC command code
915///
916#define EFI_ACPI_5_0_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
917
918///
919/// ACPI MPST Memory Power command
920///
921#define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE       0x01
922#define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE       0x02
923#define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED   0x03
924#define EFI_ACPI_5_0_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED   0x04
925
926///
927/// MPST Memory Power Node Table
928///
929typedef struct {
930  UINT8                                             PowerStateValue;
931  UINT8                                             PowerStateInformationIndex;
932} EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE;
933
934typedef struct {
935  UINT8                                             Flag;
936  UINT8                                             Reserved;
937  UINT16                                            MemoryPowerNodeId;
938  UINT32                                            Length;
939  UINT64                                            AddressBase;
940  UINT64                                            AddressLength;
941  UINT32                                            NumberOfPowerStates;
942  UINT32                                            NumberOfPhysicalComponents;
943//EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
944//UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
945} EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE;
946
947#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE          0x01
948#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED   0x02
949#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE   0x04
950
951typedef struct {
952  UINT16                      MemoryPowerNodeCount;
953  UINT8                       Reserved[2];
954} EFI_ACPI_5_0_MPST_MEMORY_POWER_NODE_TABLE;
955
956///
957/// MPST Memory Power State Characteristics Table
958///
959typedef struct {
960  UINT8                                             PowerStateStructureID;
961  UINT8                                             Flag;
962  UINT16                                            Reserved;
963  UINT32                                            AveragePowerConsumedInMPS0;
964  UINT32                                            RelativePowerSavingToMPS0;
965  UINT64                                            ExitLatencyToMPS0;
966} EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
967
968#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED              0x01
969#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY   0x02
970#define EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT    0x04
971
972typedef struct {
973  UINT16                      MemoryPowerStateCharacteristicsCount;
974  UINT8                       Reserved[2];
975} EFI_ACPI_5_0_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
976
977///
978/// Memory Topology Table definition.
979///
980typedef struct {
981  EFI_ACPI_DESCRIPTION_HEADER Header;
982  UINT32                      Reserved;
983} EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE;
984
985///
986/// PMTT Version (as defined in ACPI 5.0 spec.)
987///
988#define EFI_ACPI_5_0_MEMORY_TOPOLOGY_TABLE_REVISION 0x01
989
990///
991/// Common Memory Aggregator Device Structure.
992///
993typedef struct {
994  UINT8                       Type;
995  UINT8                       Reserved;
996  UINT16                      Length;
997  UINT16                      Flags;
998  UINT16                      Reserved1;
999} EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1000
1001///
1002/// Memory Aggregator Device Type
1003///
1004#define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET            0x1
1005#define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2
1006#define EFI_ACPI_5_0_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM              0x3
1007
1008///
1009/// Socket Memory Aggregator Device Structure.
1010///
1011typedef struct {
1012  EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
1013  UINT16                                                       SocketIdentifier;
1014  UINT16                                                       Reserved;
1015//EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
1016} EFI_ACPI_5_0_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1017
1018///
1019/// MemoryController Memory Aggregator Device Structure.
1020///
1021typedef struct {
1022  EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
1023  UINT32                                                       ReadLatency;
1024  UINT32                                                       WriteLatency;
1025  UINT32                                                       ReadBandwidth;
1026  UINT32                                                       WriteBandwidth;
1027  UINT16                                                       OptimalAccessUnit;
1028  UINT16                                                       OptimalAccessAlignment;
1029  UINT16                                                       Reserved;
1030  UINT16                                                       NumberOfProximityDomains;
1031//UINT32                                                       ProximityDomain[NumberOfProximityDomains];
1032//EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
1033} EFI_ACPI_5_0_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1034
1035///
1036/// DIMM Memory Aggregator Device Structure.
1037///
1038typedef struct {
1039  EFI_ACPI_5_0_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
1040  UINT16                                                       PhysicalComponentIdentifier;
1041  UINT16                                                       Reserved;
1042  UINT32                                                       SizeOfDimm;
1043  UINT32                                                       SmbiosHandle;
1044} EFI_ACPI_5_0_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
1045
1046///
1047/// Boot Graphics Resource Table definition.
1048///
1049typedef struct {
1050  EFI_ACPI_DESCRIPTION_HEADER Header;
1051  ///
1052  /// 2-bytes (16 bit) version ID. This value must be 1.
1053  ///
1054  UINT16                      Version;
1055  ///
1056  /// 1-byte status field indicating current status about the table.
1057  ///     Bits[7:1] = Reserved (must be zero)
1058  ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
1059  ///
1060  UINT8                       Status;
1061  ///
1062  /// 1-byte enumerated type field indicating format of the image.
1063  ///     0 = Bitmap
1064  ///     1 - 255  Reserved (for future use)
1065  ///
1066  UINT8                       ImageType;
1067  ///
1068  /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
1069  /// of the image bitmap.
1070  ///
1071  UINT64                      ImageAddress;
1072  ///
1073  /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
1074  /// (X, Y) display offset of the top left corner of the boot image.
1075  /// The top left corner of the display is at offset (0, 0).
1076  ///
1077  UINT32                      ImageOffsetX;
1078  ///
1079  /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
1080  /// (X, Y) display offset of the top left corner of the boot image.
1081  /// The top left corner of the display is at offset (0, 0).
1082  ///
1083  UINT32                      ImageOffsetY;
1084} EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE;
1085
1086///
1087/// BGRT Revision
1088///
1089#define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1
1090
1091///
1092/// BGRT Version
1093///
1094#define EFI_ACPI_5_0_BGRT_VERSION         0x01
1095
1096///
1097/// BGRT Status
1098///
1099#define EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED 0x00
1100#define EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED     0x01
1101#define EFI_ACPI_5_0_BGRT_STATUS_INVALID       EFI_ACPI_5_0_BGRT_STATUS_NOT_DISPLAYED
1102#define EFI_ACPI_5_0_BGRT_STATUS_VALID         EFI_ACPI_5_0_BGRT_STATUS_DISPLAYED
1103
1104///
1105/// BGRT Image Type
1106///
1107#define EFI_ACPI_5_0_BGRT_IMAGE_TYPE_BMP  0x00
1108
1109///
1110/// FPDT Version (as defined in ACPI 5.0 spec.)
1111///
1112#define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01
1113
1114///
1115/// FPDT Performance Record Types
1116///
1117#define EFI_ACPI_5_0_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER      0x0000
1118#define EFI_ACPI_5_0_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER     0x0001
1119
1120///
1121/// FPDT Performance Record Revision
1122///
1123#define EFI_ACPI_5_0_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER  0x01
1124#define EFI_ACPI_5_0_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01
1125
1126///
1127/// FPDT Runtime Performance Record Types
1128///
1129#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME                0x0000
1130#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND               0x0001
1131#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT      0x0002
1132
1133///
1134/// FPDT Runtime Performance Record Revision
1135///
1136#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
1137#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
1138#define EFI_ACPI_5_0_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
1139
1140///
1141/// FPDT Performance Record header
1142///
1143typedef struct {
1144  UINT16           Type;
1145  UINT8            Length;
1146  UINT8            Revision;
1147} EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER;
1148
1149///
1150/// FPDT Performance Table header
1151///
1152typedef struct {
1153  UINT32  Signature;
1154  UINT32  Length;
1155} EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER;
1156
1157///
1158/// FPDT Firmware Basic Boot Performance Pointer Record Structure
1159///
1160typedef struct {
1161  EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1162  UINT32                                          Reserved;
1163  ///
1164  /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
1165  ///
1166  UINT64                                          BootPerformanceTablePointer;
1167} EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
1168
1169///
1170/// FPDT S3 Performance Table Pointer Record Structure
1171///
1172typedef struct {
1173  EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1174  UINT32                                          Reserved;
1175  ///
1176  /// 64-bit processor-relative physical address of the S3 Performance Table.
1177  ///
1178  UINT64                                          S3PerformanceTablePointer;
1179} EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
1180
1181///
1182/// FPDT Firmware Basic Boot Performance Record Structure
1183///
1184typedef struct {
1185  EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1186  UINT32                                          Reserved;
1187  ///
1188  /// Timer value logged at the beginning of firmware image execution.
1189  /// This may not always be zero or near zero.
1190  ///
1191  UINT64                                          ResetEnd;
1192  ///
1193  /// Timer value logged just prior to loading the OS boot loader into memory.
1194  /// For non-UEFI compatible boots, this field must be zero.
1195  ///
1196  UINT64                                          OsLoaderLoadImageStart;
1197  ///
1198  /// Timer value logged just prior to launching the previously loaded OS boot loader image.
1199  /// For non-UEFI compatible boots, the timer value logged will be just prior
1200  /// to the INT 19h handler invocation.
1201  ///
1202  UINT64                                          OsLoaderStartImageStart;
1203  ///
1204  /// Timer value logged at the point when the OS loader calls the
1205  /// ExitBootServices function for UEFI compatible firmware.
1206  /// For non-UEFI compatible boots, this field must be zero.
1207  ///
1208  UINT64                                          ExitBootServicesEntry;
1209  ///
1210  /// Timer value logged at the point just prior towhen the OS loader gaining
1211  /// control back from calls the ExitBootServices function for UEFI compatible firmware.
1212  /// For non-UEFI compatible boots, this field must be zero.
1213  ///
1214  UINT64                                          ExitBootServicesExit;
1215} EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
1216
1217///
1218/// FPDT Firmware Basic Boot Performance Table signature
1219///
1220#define EFI_ACPI_5_0_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
1221
1222//
1223// FPDT Firmware Basic Boot Performance Table
1224//
1225typedef struct {
1226  EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
1227  //
1228  // one or more Performance Records.
1229  //
1230} EFI_ACPI_5_0_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
1231
1232///
1233/// FPDT "S3PT" S3 Performance Table
1234///
1235#define EFI_ACPI_5_0_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
1236
1237//
1238// FPDT Firmware S3 Boot Performance Table
1239//
1240typedef struct {
1241  EFI_ACPI_5_0_FPDT_PERFORMANCE_TABLE_HEADER      Header;
1242  //
1243  // one or more Performance Records.
1244  //
1245} EFI_ACPI_5_0_FPDT_FIRMWARE_S3_BOOT_TABLE;
1246
1247///
1248/// FPDT Basic S3 Resume Performance Record
1249///
1250typedef struct {
1251  EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1252  ///
1253  /// A count of the number of S3 resume cycles since the last full boot sequence.
1254  ///
1255  UINT32                                          ResumeCount;
1256  ///
1257  /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
1258  /// OS waking vector. Only the most recent resume cycle's time is retained.
1259  ///
1260  UINT64                                          FullResume;
1261  ///
1262  /// Average timer value of all resume cycles logged since the last full boot
1263  /// sequence, including the most recent resume.  Note that the entire log of
1264  /// timer values does not need to be retained in order to calculate this average.
1265  ///
1266  UINT64                                          AverageResume;
1267} EFI_ACPI_5_0_FPDT_S3_RESUME_RECORD;
1268
1269///
1270/// FPDT Basic S3 Suspend Performance Record
1271///
1272typedef struct {
1273  EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1274  ///
1275  /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
1276  /// Only the most recent suspend cycle's timer value is retained.
1277  ///
1278  UINT64                                          SuspendStart;
1279  ///
1280  /// Timer value recorded at the final firmware write to SLP_TYP (or other
1281  /// mechanism) used to trigger hardware entry to S3.
1282  /// Only the most recent suspend cycle's timer value is retained.
1283  ///
1284  UINT64                                          SuspendEnd;
1285} EFI_ACPI_5_0_FPDT_S3_SUSPEND_RECORD;
1286
1287///
1288/// Firmware Performance Record Table definition.
1289///
1290typedef struct {
1291  EFI_ACPI_DESCRIPTION_HEADER Header;
1292} EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_RECORD_TABLE;
1293
1294///
1295/// Generic Timer Description Table definition.
1296///
1297typedef struct {
1298  EFI_ACPI_DESCRIPTION_HEADER Header;
1299  UINT64                      PhysicalAddress;
1300  UINT32                      GlobalFlags;
1301  UINT32                      SecurePL1TimerGSIV;
1302  UINT32                      SecurePL1TimerFlags;
1303  UINT32                      NonSecurePL1TimerGSIV;
1304  UINT32                      NonSecurePL1TimerFlags;
1305  UINT32                      VirtualTimerGSIV;
1306  UINT32                      VirtualTimerFlags;
1307  UINT32                      NonSecurePL2TimerGSIV;
1308  UINT32                      NonSecurePL2TimerFlags;
1309} EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE;
1310
1311///
1312/// GTDT Version (as defined in ACPI 5.0 spec.)
1313///
1314#define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x01
1315
1316///
1317/// Global Flags.  All other bits are reserved and must be 0.
1318///
1319#define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_MEMORY_MAPPED_BLOCK_PRESENT   BIT0
1320#define EFI_ACPI_5_0_GTDT_GLOBAL_FLAG_INTERRUPT_MODE                BIT1
1321
1322///
1323/// Timer Flags.  All other bits are reserved and must be 0.
1324///
1325#define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
1326#define EFI_ACPI_5_0_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
1327
1328///
1329/// Boot Error Record Table (BERT)
1330///
1331typedef struct {
1332  EFI_ACPI_DESCRIPTION_HEADER Header;
1333  UINT32                      BootErrorRegionLength;
1334  UINT64                      BootErrorRegion;
1335} EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_HEADER;
1336
1337///
1338/// BERT Version (as defined in ACPI 5.0 spec.)
1339///
1340#define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
1341
1342///
1343/// Boot Error Region Block Status Definition
1344///
1345typedef struct {
1346  UINT32       UncorrectableErrorValid:1;
1347  UINT32       CorrectableErrorValid:1;
1348  UINT32       MultipleUncorrectableErrors:1;
1349  UINT32       MultipleCorrectableErrors:1;
1350  UINT32       ErrorDataEntryCount:10;
1351  UINT32       Reserved:18;
1352} EFI_ACPI_5_0_ERROR_BLOCK_STATUS;
1353
1354///
1355/// Boot Error Region Definition
1356///
1357typedef struct {
1358  EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
1359  UINT32                                       RawDataOffset;
1360  UINT32                                       RawDataLength;
1361  UINT32                                       DataLength;
1362  UINT32                                       ErrorSeverity;
1363} EFI_ACPI_5_0_BOOT_ERROR_REGION_STRUCTURE;
1364
1365//
1366// Boot Error Severity types
1367//
1368#define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTABLE  0x00
1369#define EFI_ACPI_5_0_ERROR_SEVERITY_FATAL        0x01
1370#define EFI_ACPI_5_0_ERROR_SEVERITY_CORRECTED    0x02
1371#define EFI_ACPI_5_0_ERROR_SEVERITY_NONE         0x03
1372
1373///
1374/// Generic Error Data Entry Definition
1375///
1376typedef struct {
1377  UINT8    SectionType[16];
1378  UINT32   ErrorSeverity;
1379  UINT16   Revision;
1380  UINT8    ValidationBits;
1381  UINT8    Flags;
1382  UINT32   ErrorDataLength;
1383  UINT8    FruId[16];
1384  UINT8    FruText[20];
1385} EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
1386
1387///
1388/// Generic Error Data Entry Version (as defined in ACPI 5.0 spec.)
1389///
1390#define EFI_ACPI_5_0_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
1391
1392///
1393/// HEST - Hardware Error Source Table
1394///
1395typedef struct {
1396  EFI_ACPI_DESCRIPTION_HEADER Header;
1397  UINT32                      ErrorSourceCount;
1398} EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
1399
1400///
1401/// HEST Version (as defined in ACPI 5.0 spec.)
1402///
1403#define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
1404
1405//
1406// Error Source structure types.
1407//
1408#define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
1409#define EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
1410#define EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR                0x02
1411#define EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER                  0x06
1412#define EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER                     0x07
1413#define EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER                     0x08
1414#define EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR                     0x09
1415
1416//
1417// Error Source structure flags.
1418//
1419#define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
1420#define EFI_ACPI_5_0_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
1421
1422///
1423/// IA-32 Architecture Machine Check Exception Structure Definition
1424///
1425typedef struct {
1426  UINT16  Type;
1427  UINT16  SourceId;
1428  UINT8   Reserved0[2];
1429  UINT8   Flags;
1430  UINT8   Enabled;
1431  UINT32  NumberOfRecordsToPreAllocate;
1432  UINT32  MaxSectionsPerRecord;
1433  UINT64  GlobalCapabilityInitData;
1434  UINT64  GlobalControlInitData;
1435  UINT8   NumberOfHardwareBanks;
1436  UINT8   Reserved1[7];
1437} EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
1438
1439///
1440/// IA-32 Architecture Machine Check Bank Structure Definition
1441///
1442typedef struct {
1443  UINT8   BankNumber;
1444  UINT8   ClearStatusOnInitialization;
1445  UINT8   StatusDataFormat;
1446  UINT8   Reserved0;
1447  UINT32  ControlRegisterMsrAddress;
1448  UINT64  ControlInitData;
1449  UINT32  StatusRegisterMsrAddress;
1450  UINT32  AddressRegisterMsrAddress;
1451  UINT32  MiscRegisterMsrAddress;
1452} EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
1453
1454///
1455/// IA-32 Architecture Machine Check Bank Structure MCA data format
1456///
1457#define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
1458#define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
1459#define EFI_ACPI_5_0_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
1460
1461//
1462// Hardware Error Notification types. All other values are reserved
1463//
1464#define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
1465#define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
1466#define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
1467#define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
1468#define EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
1469
1470///
1471/// Hardware Error Notification Configuration Write Enable Structure Definition
1472///
1473typedef struct {
1474  UINT16    Type:1;
1475  UINT16    PollInterval:1;
1476  UINT16    SwitchToPollingThresholdValue:1;
1477  UINT16    SwitchToPollingThresholdWindow:1;
1478  UINT16    ErrorThresholdValue:1;
1479  UINT16    ErrorThresholdWindow:1;
1480  UINT16    Reserved:10;
1481} EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
1482
1483///
1484/// Hardware Error Notification Structure Definition
1485///
1486typedef struct {
1487  UINT8                                                                          Type;
1488  UINT8                                                                          Length;
1489  EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
1490  UINT32                                                                         PollInterval;
1491  UINT32                                                                         Vector;
1492  UINT32                                                                         SwitchToPollingThresholdValue;
1493  UINT32                                                                         SwitchToPollingThresholdWindow;
1494  UINT32                                                                         ErrorThresholdValue;
1495  UINT32                                                                         ErrorThresholdWindow;
1496} EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
1497
1498///
1499/// IA-32 Architecture Corrected Machine Check Structure Definition
1500///
1501typedef struct {
1502  UINT16                                                 Type;
1503  UINT16                                                 SourceId;
1504  UINT8                                                  Reserved0[2];
1505  UINT8                                                  Flags;
1506  UINT8                                                  Enabled;
1507  UINT32                                                 NumberOfRecordsToPreAllocate;
1508  UINT32                                                 MaxSectionsPerRecord;
1509  EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
1510  UINT8                                                  NumberOfHardwareBanks;
1511  UINT8                                                  Reserved1[3];
1512} EFI_ACPI_5_0_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
1513
1514///
1515/// IA-32 Architecture NMI Error Structure Definition
1516///
1517typedef struct {
1518  UINT16  Type;
1519  UINT16  SourceId;
1520  UINT8   Reserved0[2];
1521  UINT32  NumberOfRecordsToPreAllocate;
1522  UINT32  MaxSectionsPerRecord;
1523  UINT32  MaxRawDataLength;
1524} EFI_ACPI_5_0_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
1525
1526///
1527/// PCI Express Root Port AER Structure Definition
1528///
1529typedef struct {
1530  UINT16  Type;
1531  UINT16  SourceId;
1532  UINT8   Reserved0[2];
1533  UINT8   Flags;
1534  UINT8   Enabled;
1535  UINT32  NumberOfRecordsToPreAllocate;
1536  UINT32  MaxSectionsPerRecord;
1537  UINT32  Bus;
1538  UINT16  Device;
1539  UINT16  Function;
1540  UINT16  DeviceControl;
1541  UINT8   Reserved1[2];
1542  UINT32  UncorrectableErrorMask;
1543  UINT32  UncorrectableErrorSeverity;
1544  UINT32  CorrectableErrorMask;
1545  UINT32  AdvancedErrorCapabilitiesAndControl;
1546  UINT32  RootErrorCommand;
1547} EFI_ACPI_5_0_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
1548
1549///
1550/// PCI Express Device AER Structure Definition
1551///
1552typedef struct {
1553  UINT16  Type;
1554  UINT16  SourceId;
1555  UINT8   Reserved0[2];
1556  UINT8   Flags;
1557  UINT8   Enabled;
1558  UINT32  NumberOfRecordsToPreAllocate;
1559  UINT32  MaxSectionsPerRecord;
1560  UINT32  Bus;
1561  UINT16  Device;
1562  UINT16  Function;
1563  UINT16  DeviceControl;
1564  UINT8   Reserved1[2];
1565  UINT32  UncorrectableErrorMask;
1566  UINT32  UncorrectableErrorSeverity;
1567  UINT32  CorrectableErrorMask;
1568  UINT32  AdvancedErrorCapabilitiesAndControl;
1569} EFI_ACPI_5_0_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
1570
1571///
1572/// PCI Express Bridge AER Structure Definition
1573///
1574typedef struct {
1575  UINT16  Type;
1576  UINT16  SourceId;
1577  UINT8   Reserved0[2];
1578  UINT8   Flags;
1579  UINT8   Enabled;
1580  UINT32  NumberOfRecordsToPreAllocate;
1581  UINT32  MaxSectionsPerRecord;
1582  UINT32  Bus;
1583  UINT16  Device;
1584  UINT16  Function;
1585  UINT16  DeviceControl;
1586  UINT8   Reserved1[2];
1587  UINT32  UncorrectableErrorMask;
1588  UINT32  UncorrectableErrorSeverity;
1589  UINT32  CorrectableErrorMask;
1590  UINT32  AdvancedErrorCapabilitiesAndControl;
1591  UINT32  SecondaryUncorrectableErrorMask;
1592  UINT32  SecondaryUncorrectableErrorSeverity;
1593  UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
1594} EFI_ACPI_5_0_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
1595
1596///
1597/// Generic Hardware Error Source Structure Definition
1598///
1599typedef struct {
1600  UINT16                                                 Type;
1601  UINT16                                                 SourceId;
1602  UINT16                                                 RelatedSourceId;
1603  UINT8                                                  Flags;
1604  UINT8                                                  Enabled;
1605  UINT32                                                 NumberOfRecordsToPreAllocate;
1606  UINT32                                                 MaxSectionsPerRecord;
1607  UINT32                                                 MaxRawDataLength;
1608  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
1609  EFI_ACPI_5_0_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
1610  UINT32                                                 ErrorStatusBlockLength;
1611} EFI_ACPI_5_0_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
1612
1613///
1614/// Generic Error Status Definition
1615///
1616typedef struct {
1617  EFI_ACPI_5_0_ERROR_BLOCK_STATUS              BlockStatus;
1618  UINT32                                       RawDataOffset;
1619  UINT32                                       RawDataLength;
1620  UINT32                                       DataLength;
1621  UINT32                                       ErrorSeverity;
1622} EFI_ACPI_5_0_GENERIC_ERROR_STATUS_STRUCTURE;
1623
1624///
1625/// ERST - Error Record Serialization Table
1626///
1627typedef struct {
1628  EFI_ACPI_DESCRIPTION_HEADER Header;
1629  UINT32                      SerializationHeaderSize;
1630  UINT8                       Reserved0[4];
1631  UINT32                      InstructionEntryCount;
1632} EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
1633
1634///
1635/// ERST Version (as defined in ACPI 5.0 spec.)
1636///
1637#define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
1638
1639///
1640/// ERST Serialization Actions
1641///
1642#define EFI_ACPI_5_0_ERST_BEGIN_WRITE_OPERATION                    0x00
1643#define EFI_ACPI_5_0_ERST_BEGIN_READ_OPERATION                     0x01
1644#define EFI_ACPI_5_0_ERST_BEGIN_CLEAR_OPERATION                    0x02
1645#define EFI_ACPI_5_0_ERST_END_OPERATION                            0x03
1646#define EFI_ACPI_5_0_ERST_SET_RECORD_OFFSET                        0x04
1647#define EFI_ACPI_5_0_ERST_EXECUTE_OPERATION                        0x05
1648#define EFI_ACPI_5_0_ERST_CHECK_BUSY_STATUS                        0x06
1649#define EFI_ACPI_5_0_ERST_GET_COMMAND_STATUS                       0x07
1650#define EFI_ACPI_5_0_ERST_GET_RECORD_IDENTIFIER                    0x08
1651#define EFI_ACPI_5_0_ERST_SET_RECORD_IDENTIFIER                    0x09
1652#define EFI_ACPI_5_0_ERST_GET_RECORD_COUNT                         0x0A
1653#define EFI_ACPI_5_0_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
1654#define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
1655#define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
1656#define EFI_ACPI_5_0_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
1657
1658///
1659/// ERST Action Command Status
1660///
1661#define EFI_ACPI_5_0_ERST_STATUS_SUCCESS                           0x00
1662#define EFI_ACPI_5_0_ERST_STATUS_NOT_ENOUGH_SPACE                  0x01
1663#define EFI_ACPI_5_0_ERST_STATUS_HARDWARE_NOT_AVAILABLE            0x02
1664#define EFI_ACPI_5_0_ERST_STATUS_FAILED                            0x03
1665#define EFI_ACPI_5_0_ERST_STATUS_RECORD_STORE_EMPTY                0x04
1666#define EFI_ACPI_5_0_ERST_STATUS_RECORD_NOT_FOUND                  0x05
1667
1668///
1669/// ERST Serialization Instructions
1670///
1671#define EFI_ACPI_5_0_ERST_READ_REGISTER                            0x00
1672#define EFI_ACPI_5_0_ERST_READ_REGISTER_VALUE                      0x01
1673#define EFI_ACPI_5_0_ERST_WRITE_REGISTER                           0x02
1674#define EFI_ACPI_5_0_ERST_WRITE_REGISTER_VALUE                     0x03
1675#define EFI_ACPI_5_0_ERST_NOOP                                     0x04
1676#define EFI_ACPI_5_0_ERST_LOAD_VAR1                                0x05
1677#define EFI_ACPI_5_0_ERST_LOAD_VAR2                                0x06
1678#define EFI_ACPI_5_0_ERST_STORE_VAR1                               0x07
1679#define EFI_ACPI_5_0_ERST_ADD                                      0x08
1680#define EFI_ACPI_5_0_ERST_SUBTRACT                                 0x09
1681#define EFI_ACPI_5_0_ERST_ADD_VALUE                                0x0A
1682#define EFI_ACPI_5_0_ERST_SUBTRACT_VALUE                           0x0B
1683#define EFI_ACPI_5_0_ERST_STALL                                    0x0C
1684#define EFI_ACPI_5_0_ERST_STALL_WHILE_TRUE                         0x0D
1685#define EFI_ACPI_5_0_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
1686#define EFI_ACPI_5_0_ERST_GOTO                                     0x0F
1687#define EFI_ACPI_5_0_ERST_SET_SRC_ADDRESS_BASE                     0x10
1688#define EFI_ACPI_5_0_ERST_SET_DST_ADDRESS_BASE                     0x11
1689#define EFI_ACPI_5_0_ERST_MOVE_DATA                                0x12
1690
1691///
1692/// ERST Instruction Flags
1693///
1694#define EFI_ACPI_5_0_ERST_PRESERVE_REGISTER                        0x01
1695
1696///
1697/// ERST Serialization Instruction Entry
1698///
1699typedef struct {
1700  UINT8                                    SerializationAction;
1701  UINT8                                    Instruction;
1702  UINT8                                    Flags;
1703  UINT8                                    Reserved0;
1704  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
1705  UINT64                                   Value;
1706  UINT64                                   Mask;
1707} EFI_ACPI_5_0_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
1708
1709///
1710/// EINJ - Error Injection Table
1711///
1712typedef struct {
1713  EFI_ACPI_DESCRIPTION_HEADER Header;
1714  UINT32                      InjectionHeaderSize;
1715  UINT8                       InjectionFlags;
1716  UINT8                       Reserved0[3];
1717  UINT32                      InjectionEntryCount;
1718} EFI_ACPI_5_0_ERROR_INJECTION_TABLE_HEADER;
1719
1720///
1721/// EINJ Version (as defined in ACPI 5.0 spec.)
1722///
1723#define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_REVISION 0x01
1724
1725///
1726/// EINJ Error Injection Actions
1727///
1728#define EFI_ACPI_5_0_EINJ_BEGIN_INJECTION_OPERATION                0x00
1729#define EFI_ACPI_5_0_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
1730#define EFI_ACPI_5_0_EINJ_SET_ERROR_TYPE                           0x02
1731#define EFI_ACPI_5_0_EINJ_GET_ERROR_TYPE                           0x03
1732#define EFI_ACPI_5_0_EINJ_END_OPERATION                            0x04
1733#define EFI_ACPI_5_0_EINJ_EXECUTE_OPERATION                        0x05
1734#define EFI_ACPI_5_0_EINJ_CHECK_BUSY_STATUS                        0x06
1735#define EFI_ACPI_5_0_EINJ_GET_COMMAND_STATUS                       0x07
1736#define EFI_ACPI_5_0_EINJ_TRIGGER_ERROR                            0xFF
1737
1738///
1739/// EINJ Action Command Status
1740///
1741#define EFI_ACPI_5_0_EINJ_STATUS_SUCCESS                           0x00
1742#define EFI_ACPI_5_0_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
1743#define EFI_ACPI_5_0_EINJ_STATUS_INVALID_ACCESS                    0x02
1744
1745///
1746/// EINJ Error Type Definition
1747///
1748#define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
1749#define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
1750#define EFI_ACPI_5_0_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
1751#define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
1752#define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
1753#define EFI_ACPI_5_0_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
1754#define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
1755#define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
1756#define EFI_ACPI_5_0_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
1757#define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
1758#define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
1759#define EFI_ACPI_5_0_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
1760
1761///
1762/// EINJ Injection Instructions
1763///
1764#define EFI_ACPI_5_0_EINJ_READ_REGISTER                            0x00
1765#define EFI_ACPI_5_0_EINJ_READ_REGISTER_VALUE                      0x01
1766#define EFI_ACPI_5_0_EINJ_WRITE_REGISTER                           0x02
1767#define EFI_ACPI_5_0_EINJ_WRITE_REGISTER_VALUE                     0x03
1768#define EFI_ACPI_5_0_EINJ_NOOP                                     0x04
1769
1770///
1771/// EINJ Instruction Flags
1772///
1773#define EFI_ACPI_5_0_EINJ_PRESERVE_REGISTER                        0x01
1774
1775///
1776/// EINJ Injection Instruction Entry
1777///
1778typedef struct {
1779  UINT8                                    InjectionAction;
1780  UINT8                                    Instruction;
1781  UINT8                                    Flags;
1782  UINT8                                    Reserved0;
1783  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
1784  UINT64                                   Value;
1785  UINT64                                   Mask;
1786} EFI_ACPI_5_0_EINJ_INJECTION_INSTRUCTION_ENTRY;
1787
1788///
1789/// EINJ Trigger Action Table
1790///
1791typedef struct {
1792  UINT32  HeaderSize;
1793  UINT32  Revision;
1794  UINT32  TableSize;
1795  UINT32  EntryCount;
1796} EFI_ACPI_5_0_EINJ_TRIGGER_ACTION_TABLE;
1797
1798///
1799/// Platform Communications Channel Table (PCCT)
1800///
1801typedef struct {
1802  EFI_ACPI_DESCRIPTION_HEADER Header;
1803  UINT32                      Flags;
1804  UINT64                      Reserved;
1805} EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
1806
1807///
1808/// PCCT Version (as defined in ACPI 5.0 spec.)
1809///
1810#define EFI_ACPI_5_0_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01
1811
1812///
1813/// PCCT Global Flags
1814///
1815#define EFI_ACPI_5_0_PCCT_FLAGS_SCI_DOORBELL                      BIT0
1816
1817//
1818// PCCT Subspace type
1819//
1820#define EFI_ACPI_5_0_PCCT_SUBSPACE_TYPE_GENERIC  0x00
1821
1822///
1823/// PCC Subspace Structure Header
1824///
1825typedef struct {
1826  UINT8        Type;
1827  UINT8        Length;
1828} EFI_ACPI_5_0_PCCT_SUBSPACE_HEADER;
1829
1830///
1831/// Generic Communications Subspace Structure
1832///
1833typedef struct {
1834  UINT8                                    Type;
1835  UINT8                                    Length;
1836  UINT8                                    Reserved[6];
1837  UINT64                                   BaseAddress;
1838  UINT64                                   AddressLength;
1839  EFI_ACPI_5_0_GENERIC_ADDRESS_STRUCTURE   DoorbellRegister;
1840  UINT64                                   DoorbellPreserve;
1841  UINT64                                   DoorbellWrite;
1842  UINT32                                   NominalLatency;
1843  UINT32                                   MaximumPeriodicAccessRate;
1844  UINT16                                   MinimumRequestTurnaroundTime;
1845} EFI_ACPI_5_0_PCCT_SUBSPACE_GENERIC;
1846
1847///
1848/// Generic Communications Channel Shared Memory Region
1849///
1850
1851typedef struct {
1852  UINT8                                    Command;
1853  UINT8                                    Reserved:7;
1854  UINT8                                    GenerateSci:1;
1855} EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
1856
1857typedef struct {
1858  UINT8                                    CommandComplete:1;
1859  UINT8                                    SciDoorbell:1;
1860  UINT8                                    Error:1;
1861  UINT8                                    PlatformNotification:1;
1862  UINT8                                    Reserved:4;
1863  UINT8                                    Reserved1;
1864} EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
1865
1866typedef struct {
1867  UINT32                                                    Signature;
1868  EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
1869  EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
1870} EFI_ACPI_5_0_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
1871
1872//
1873// Known table signatures
1874//
1875
1876///
1877/// "RSD PTR " Root System Description Pointer
1878///
1879#define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
1880
1881///
1882/// "APIC" Multiple APIC Description Table
1883///
1884#define EFI_ACPI_5_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
1885
1886///
1887/// "BERT" Boot Error Record Table
1888///
1889#define EFI_ACPI_5_0_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
1890
1891///
1892/// "BGRT" Boot Graphics Resource Table
1893///
1894#define EFI_ACPI_5_0_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
1895
1896///
1897/// "CPEP" Corrected Platform Error Polling Table
1898///
1899#define EFI_ACPI_5_0_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
1900
1901///
1902/// "DSDT" Differentiated System Description Table
1903///
1904#define EFI_ACPI_5_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
1905
1906///
1907/// "ECDT" Embedded Controller Boot Resources Table
1908///
1909#define EFI_ACPI_5_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
1910
1911///
1912/// "EINJ" Error Injection Table
1913///
1914#define EFI_ACPI_5_0_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
1915
1916///
1917/// "ERST" Error Record Serialization Table
1918///
1919#define EFI_ACPI_5_0_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
1920
1921///
1922/// "FACP" Fixed ACPI Description Table
1923///
1924#define EFI_ACPI_5_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
1925
1926///
1927/// "FACS" Firmware ACPI Control Structure
1928///
1929#define EFI_ACPI_5_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
1930
1931///
1932/// "FPDT" Firmware Performance Data Table
1933///
1934#define EFI_ACPI_5_0_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
1935
1936///
1937/// "GTDT" Generic Timer Description Table
1938///
1939#define EFI_ACPI_5_0_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
1940
1941///
1942/// "HEST" Hardware Error Source Table
1943///
1944#define EFI_ACPI_5_0_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
1945
1946///
1947/// "MPST" Memory Power State Table
1948///
1949#define EFI_ACPI_5_0_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
1950
1951///
1952/// "MSCT" Maximum System Characteristics Table
1953///
1954#define EFI_ACPI_5_0_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
1955
1956///
1957/// "PMTT" Platform Memory Topology Table
1958///
1959#define EFI_ACPI_5_0_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
1960
1961///
1962/// "PSDT" Persistent System Description Table
1963///
1964#define EFI_ACPI_5_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
1965
1966///
1967/// "RASF" ACPI RAS Feature Table
1968///
1969#define EFI_ACPI_5_0_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
1970
1971///
1972/// "RSDT" Root System Description Table
1973///
1974#define EFI_ACPI_5_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
1975
1976///
1977/// "SBST" Smart Battery Specification Table
1978///
1979#define EFI_ACPI_5_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
1980
1981///
1982/// "SLIT" System Locality Information Table
1983///
1984#define EFI_ACPI_5_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
1985
1986///
1987/// "SRAT" System Resource Affinity Table
1988///
1989#define EFI_ACPI_5_0_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
1990
1991///
1992/// "SSDT" Secondary System Description Table
1993///
1994#define EFI_ACPI_5_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
1995
1996///
1997/// "XSDT" Extended System Description Table
1998///
1999#define EFI_ACPI_5_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
2000
2001///
2002/// "BOOT" MS Simple Boot Spec
2003///
2004#define EFI_ACPI_5_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
2005
2006///
2007/// "CSRT" MS Core System Resource Table
2008///
2009#define EFI_ACPI_5_0_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
2010
2011///
2012/// "DBG2" MS Debug Port 2 Spec
2013///
2014#define EFI_ACPI_5_0_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
2015
2016///
2017/// "DBGP" MS Debug Port Spec
2018///
2019#define EFI_ACPI_5_0_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
2020
2021///
2022/// "DMAR" DMA Remapping Table
2023///
2024#define EFI_ACPI_5_0_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
2025
2026///
2027/// "DRTM" Dynamic Root of Trust for Measurement Table
2028///
2029#define EFI_ACPI_5_0_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
2030
2031///
2032/// "ETDT" Event Timer Description Table
2033///
2034#define EFI_ACPI_5_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
2035
2036///
2037/// "HPET" IA-PC High Precision Event Timer Table
2038///
2039#define EFI_ACPI_5_0_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
2040
2041///
2042/// "iBFT" iSCSI Boot Firmware Table
2043///
2044#define EFI_ACPI_5_0_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
2045
2046///
2047/// "IVRS" I/O Virtualization Reporting Structure
2048///
2049#define EFI_ACPI_5_0_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
2050
2051///
2052/// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
2053///
2054#define EFI_ACPI_5_0_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
2055
2056///
2057/// "MCHI" Management Controller Host Interface Table
2058///
2059#define EFI_ACPI_5_0_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
2060
2061///
2062/// "MSDM" MS Data Management Table
2063///
2064#define EFI_ACPI_5_0_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
2065
2066///
2067/// "SLIC" MS Software Licensing Table Specification
2068///
2069#define EFI_ACPI_5_0_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
2070
2071///
2072/// "SPCR" Serial Port Concole Redirection Table
2073///
2074#define EFI_ACPI_5_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
2075
2076///
2077/// "SPMI" Server Platform Management Interface Table
2078///
2079#define EFI_ACPI_5_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
2080
2081///
2082/// "TCPA" Trusted Computing Platform Alliance Capabilities Table
2083///
2084#define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
2085
2086///
2087/// "TPM2" Trusted Computing Platform 1 Table
2088///
2089#define EFI_ACPI_5_0_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
2090
2091///
2092/// "UEFI" UEFI ACPI Data Table
2093///
2094#define EFI_ACPI_5_0_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
2095
2096///
2097/// "WAET" Windows ACPI Emulated Devices Table
2098///
2099#define EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
2100#define EFI_ACPI_5_0_WINDOWS_ACPI_ENLIGHTENMENT_TABLE_SIGNATURE  EFI_ACPI_5_0_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE
2101
2102///
2103/// "WDAT" Watchdog Action Table
2104///
2105#define EFI_ACPI_5_0_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
2106
2107///
2108/// "WDRT" Watchdog Resource Table
2109///
2110#define EFI_ACPI_5_0_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
2111
2112///
2113/// "WPBT" MS Platform Binary Table
2114///
2115#define EFI_ACPI_5_0_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
2116
2117#pragma pack()
2118
2119#endif
2120