1 /** @file
2   ACPI 5.1 definitions from the ACPI Specification Revision 5.1 July, 2014.
3 
4   Copyright (c) 2014 Hewlett-Packard Development Company, L.P.<BR>
5   Copyright (c) 2014 - 2015, 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_1_H_
16 #define _ACPI_5_1_H_
17 
18 #include <IndustryStandard/Acpi50.h>
19 
20 //
21 // Ensure proper structure formats
22 //
23 #pragma pack(1)
24 
25 ///
26 /// ACPI 5.1 Generic Address Space definition
27 ///
28 typedef struct {
29   UINT8   AddressSpaceId;
30   UINT8   RegisterBitWidth;
31   UINT8   RegisterBitOffset;
32   UINT8   AccessSize;
33   UINT64  Address;
34 } EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE;
35 
36 //
37 // Generic Address Space Address IDs
38 //
39 #define EFI_ACPI_5_1_SYSTEM_MEMORY              0
40 #define EFI_ACPI_5_1_SYSTEM_IO                  1
41 #define EFI_ACPI_5_1_PCI_CONFIGURATION_SPACE    2
42 #define EFI_ACPI_5_1_EMBEDDED_CONTROLLER        3
43 #define EFI_ACPI_5_1_SMBUS                      4
44 #define EFI_ACPI_5_1_PLATFORM_COMMUNICATION_CHANNEL  0x0A
45 #define EFI_ACPI_5_1_FUNCTIONAL_FIXED_HARDWARE       0x7F
46 
47 //
48 // Generic Address Space Access Sizes
49 //
50 #define EFI_ACPI_5_1_UNDEFINED  0
51 #define EFI_ACPI_5_1_BYTE       1
52 #define EFI_ACPI_5_1_WORD       2
53 #define EFI_ACPI_5_1_DWORD      3
54 #define EFI_ACPI_5_1_QWORD      4
55 
56 //
57 // ACPI 5.1 table structures
58 //
59 
60 ///
61 /// Root System Description Pointer Structure
62 ///
63 typedef 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_5_1_ROOT_SYSTEM_DESCRIPTION_POINTER;
74 
75 ///
76 /// RSD_PTR Revision (as defined in ACPI 5.1 spec.)
77 ///
78 #define EFI_ACPI_5_1_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02  ///< ACPISpec (Revision 5.1) 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 ///
84 typedef struct {
85   UINT32  Signature;
86   UINT32  Length;
87 } EFI_ACPI_5_1_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 5.1 spec.)
97 ///
98 #define EFI_ACPI_5_1_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 5.1 spec.)
108 ///
109 #define EFI_ACPI_5_1_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
110 
111 ///
112 /// Fixed ACPI Description Table Structure (FADT)
113 ///
114 typedef 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_5_1_GENERIC_ADDRESS_STRUCTURE  ResetReg;
155   UINT8                                   ResetValue;
156   UINT16                                  ArmBootArch;
157   UINT8                                   MinorVersion;
158   UINT64                                  XFirmwareCtrl;
159   UINT64                                  XDsdt;
160   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPm1aEvtBlk;
161   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPm1bEvtBlk;
162   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPm1aCntBlk;
163   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPm1bCntBlk;
164   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPm2CntBlk;
165   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XPmTmrBlk;
166   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XGpe0Blk;
167   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  XGpe1Blk;
168   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  SleepControlReg;
169   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  SleepStatusReg;
170 } EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE;
171 
172 ///
173 /// FADT Version (as defined in ACPI 5.1 spec.)
174 ///
175 #define EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x05
176 #define EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION  0x01
177 
178 //
179 // Fixed ACPI Description Table Preferred Power Management Profile
180 //
181 #define EFI_ACPI_5_1_PM_PROFILE_UNSPECIFIED         0
182 #define EFI_ACPI_5_1_PM_PROFILE_DESKTOP             1
183 #define EFI_ACPI_5_1_PM_PROFILE_MOBILE              2
184 #define EFI_ACPI_5_1_PM_PROFILE_WORKSTATION         3
185 #define EFI_ACPI_5_1_PM_PROFILE_ENTERPRISE_SERVER   4
186 #define EFI_ACPI_5_1_PM_PROFILE_SOHO_SERVER         5
187 #define EFI_ACPI_5_1_PM_PROFILE_APPLIANCE_PC        6
188 #define EFI_ACPI_5_1_PM_PROFILE_PERFORMANCE_SERVER  7
189 #define EFI_ACPI_5_1_PM_PROFILE_TABLET              8
190 
191 //
192 // Fixed ACPI Description Table Boot Architecture Flags
193 // All other bits are reserved and must be set to 0.
194 //
195 #define EFI_ACPI_5_1_LEGACY_DEVICES              BIT0
196 #define EFI_ACPI_5_1_8042                        BIT1
197 #define EFI_ACPI_5_1_VGA_NOT_PRESENT             BIT2
198 #define EFI_ACPI_5_1_MSI_NOT_SUPPORTED           BIT3
199 #define EFI_ACPI_5_1_PCIE_ASPM_CONTROLS          BIT4
200 #define EFI_ACPI_5_1_CMOS_RTC_NOT_PRESENT        BIT5
201 
202 //
203 // Fixed ACPI Description Table Arm Boot Architecture Flags
204 // All other bits are reserved and must be set to 0.
205 //
206 #define EFI_ACPI_5_1_ARM_PSCI_COMPLIANT              BIT0
207 #define EFI_ACPI_5_1_ARM_PSCI_USE_HVC                BIT1
208 
209 //
210 // Fixed ACPI Description Table Fixed Feature Flags
211 // All other bits are reserved and must be set to 0.
212 //
213 #define EFI_ACPI_5_1_WBINVD                                 BIT0
214 #define EFI_ACPI_5_1_WBINVD_FLUSH                           BIT1
215 #define EFI_ACPI_5_1_PROC_C1                                BIT2
216 #define EFI_ACPI_5_1_P_LVL2_UP                              BIT3
217 #define EFI_ACPI_5_1_PWR_BUTTON                             BIT4
218 #define EFI_ACPI_5_1_SLP_BUTTON                             BIT5
219 #define EFI_ACPI_5_1_FIX_RTC                                BIT6
220 #define EFI_ACPI_5_1_RTC_S4                                 BIT7
221 #define EFI_ACPI_5_1_TMR_VAL_EXT                            BIT8
222 #define EFI_ACPI_5_1_DCK_CAP                                BIT9
223 #define EFI_ACPI_5_1_RESET_REG_SUP                          BIT10
224 #define EFI_ACPI_5_1_SEALED_CASE                            BIT11
225 #define EFI_ACPI_5_1_HEADLESS                               BIT12
226 #define EFI_ACPI_5_1_CPU_SW_SLP                             BIT13
227 #define EFI_ACPI_5_1_PCI_EXP_WAK                            BIT14
228 #define EFI_ACPI_5_1_USE_PLATFORM_CLOCK                     BIT15
229 #define EFI_ACPI_5_1_S4_RTC_STS_VALID                       BIT16
230 #define EFI_ACPI_5_1_REMOTE_POWER_ON_CAPABLE                BIT17
231 #define EFI_ACPI_5_1_FORCE_APIC_CLUSTER_MODEL               BIT18
232 #define EFI_ACPI_5_1_FORCE_APIC_PHYSICAL_DESTINATION_MODE   BIT19
233 #define EFI_ACPI_5_1_HW_REDUCED_ACPI                        BIT20
234 #define EFI_ACPI_5_1_LOW_POWER_S0_IDLE_CAPABLE              BIT21
235 
236 ///
237 /// Firmware ACPI Control Structure
238 ///
239 typedef struct {
240   UINT32  Signature;
241   UINT32  Length;
242   UINT32  HardwareSignature;
243   UINT32  FirmwareWakingVector;
244   UINT32  GlobalLock;
245   UINT32  Flags;
246   UINT64  XFirmwareWakingVector;
247   UINT8   Version;
248   UINT8   Reserved0[3];
249   UINT32  OspmFlags;
250   UINT8   Reserved1[24];
251 } EFI_ACPI_5_1_FIRMWARE_ACPI_CONTROL_STRUCTURE;
252 
253 ///
254 /// FACS Version (as defined in ACPI 5.1 spec.)
255 ///
256 #define EFI_ACPI_5_1_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION  0x02
257 
258 ///
259 /// Firmware Control Structure Feature Flags
260 /// All other bits are reserved and must be set to 0.
261 ///
262 #define EFI_ACPI_5_1_S4BIOS_F                     BIT0
263 #define EFI_ACPI_5_1_64BIT_WAKE_SUPPORTED_F       BIT1
264 
265 ///
266 /// OSPM Enabled Firmware Control Structure Flags
267 /// All other bits are reserved and must be set to 0.
268 ///
269 #define EFI_ACPI_5_1_OSPM_64BIT_WAKE_F            BIT0
270 
271 //
272 // Differentiated System Description Table,
273 // Secondary System Description Table
274 // and Persistent System Description Table,
275 // no definition needed as they are common description table header, the same with
276 // EFI_ACPI_DESCRIPTION_HEADER, followed by a definition block.
277 //
278 #define EFI_ACPI_5_1_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_REVISION   0x02
279 #define EFI_ACPI_5_1_SECONDARY_SYSTEM_DESCRIPTION_TABLE_REVISION        0x02
280 
281 ///
282 /// Multiple APIC Description Table header definition.  The rest of the table
283 /// must be defined in a platform specific manner.
284 ///
285 typedef struct {
286   EFI_ACPI_DESCRIPTION_HEADER Header;
287   UINT32                      LocalApicAddress;
288   UINT32                      Flags;
289 } EFI_ACPI_5_1_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
290 
291 ///
292 /// MADT Revision (as defined in ACPI 5.1 spec.)
293 ///
294 #define EFI_ACPI_5_1_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x03
295 
296 ///
297 /// Multiple APIC Flags
298 /// All other bits are reserved and must be set to 0.
299 ///
300 #define EFI_ACPI_5_1_PCAT_COMPAT         BIT0
301 
302 //
303 // Multiple APIC Description Table APIC structure types
304 // All other values between 0x0D and 0x7F are reserved and
305 // will be ignored by OSPM. 0x80 ~ 0xFF are reserved for OEM.
306 //
307 #define EFI_ACPI_5_1_PROCESSOR_LOCAL_APIC           0x00
308 #define EFI_ACPI_5_1_IO_APIC                        0x01
309 #define EFI_ACPI_5_1_INTERRUPT_SOURCE_OVERRIDE      0x02
310 #define EFI_ACPI_5_1_NON_MASKABLE_INTERRUPT_SOURCE  0x03
311 #define EFI_ACPI_5_1_LOCAL_APIC_NMI                 0x04
312 #define EFI_ACPI_5_1_LOCAL_APIC_ADDRESS_OVERRIDE    0x05
313 #define EFI_ACPI_5_1_IO_SAPIC                       0x06
314 #define EFI_ACPI_5_1_LOCAL_SAPIC                    0x07
315 #define EFI_ACPI_5_1_PLATFORM_INTERRUPT_SOURCES     0x08
316 #define EFI_ACPI_5_1_PROCESSOR_LOCAL_X2APIC         0x09
317 #define EFI_ACPI_5_1_LOCAL_X2APIC_NMI               0x0A
318 #define EFI_ACPI_5_1_GIC                            0x0B
319 #define EFI_ACPI_5_1_GICD                           0x0C
320 #define EFI_ACPI_5_1_GIC_MSI_FRAME                  0x0D
321 #define EFI_ACPI_5_1_GICR                           0x0E
322 
323 //
324 // APIC Structure Definitions
325 //
326 
327 ///
328 /// Processor Local APIC Structure Definition
329 ///
330 typedef struct {
331   UINT8   Type;
332   UINT8   Length;
333   UINT8   AcpiProcessorId;
334   UINT8   ApicId;
335   UINT32  Flags;
336 } EFI_ACPI_5_1_PROCESSOR_LOCAL_APIC_STRUCTURE;
337 
338 ///
339 /// Local APIC Flags.  All other bits are reserved and must be 0.
340 ///
341 #define EFI_ACPI_5_1_LOCAL_APIC_ENABLED        BIT0
342 
343 ///
344 /// IO APIC Structure
345 ///
346 typedef struct {
347   UINT8   Type;
348   UINT8   Length;
349   UINT8   IoApicId;
350   UINT8   Reserved;
351   UINT32  IoApicAddress;
352   UINT32  GlobalSystemInterruptBase;
353 } EFI_ACPI_5_1_IO_APIC_STRUCTURE;
354 
355 ///
356 /// Interrupt Source Override Structure
357 ///
358 typedef struct {
359   UINT8   Type;
360   UINT8   Length;
361   UINT8   Bus;
362   UINT8   Source;
363   UINT32  GlobalSystemInterrupt;
364   UINT16  Flags;
365 } EFI_ACPI_5_1_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
366 
367 ///
368 /// Platform Interrupt Sources Structure Definition
369 ///
370 typedef struct {
371   UINT8   Type;
372   UINT8   Length;
373   UINT16  Flags;
374   UINT8   InterruptType;
375   UINT8   ProcessorId;
376   UINT8   ProcessorEid;
377   UINT8   IoSapicVector;
378   UINT32  GlobalSystemInterrupt;
379   UINT32  PlatformInterruptSourceFlags;
380   UINT8   CpeiProcessorOverride;
381   UINT8   Reserved[31];
382 } EFI_ACPI_5_1_PLATFORM_INTERRUPT_APIC_STRUCTURE;
383 
384 //
385 // MPS INTI flags.
386 // All other bits are reserved and must be set to 0.
387 //
388 #define EFI_ACPI_5_1_POLARITY      (3 << 0)
389 #define EFI_ACPI_5_1_TRIGGER_MODE  (3 << 2)
390 
391 ///
392 /// Non-Maskable Interrupt Source Structure
393 ///
394 typedef struct {
395   UINT8   Type;
396   UINT8   Length;
397   UINT16  Flags;
398   UINT32  GlobalSystemInterrupt;
399 } EFI_ACPI_5_1_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
400 
401 ///
402 /// Local APIC NMI Structure
403 ///
404 typedef struct {
405   UINT8   Type;
406   UINT8   Length;
407   UINT8   AcpiProcessorId;
408   UINT16  Flags;
409   UINT8   LocalApicLint;
410 } EFI_ACPI_5_1_LOCAL_APIC_NMI_STRUCTURE;
411 
412 ///
413 /// Local APIC Address Override Structure
414 ///
415 typedef struct {
416   UINT8   Type;
417   UINT8   Length;
418   UINT16  Reserved;
419   UINT64  LocalApicAddress;
420 } EFI_ACPI_5_1_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
421 
422 ///
423 /// IO SAPIC Structure
424 ///
425 typedef struct {
426   UINT8   Type;
427   UINT8   Length;
428   UINT8   IoApicId;
429   UINT8   Reserved;
430   UINT32  GlobalSystemInterruptBase;
431   UINT64  IoSapicAddress;
432 } EFI_ACPI_5_1_IO_SAPIC_STRUCTURE;
433 
434 ///
435 /// Local SAPIC Structure
436 /// This struct followed by a null-terminated ASCII string - ACPI Processor UID String
437 ///
438 typedef struct {
439   UINT8   Type;
440   UINT8   Length;
441   UINT8   AcpiProcessorId;
442   UINT8   LocalSapicId;
443   UINT8   LocalSapicEid;
444   UINT8   Reserved[3];
445   UINT32  Flags;
446   UINT32  ACPIProcessorUIDValue;
447 } EFI_ACPI_5_1_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
448 
449 ///
450 /// Platform Interrupt Sources Structure
451 ///
452 typedef struct {
453   UINT8   Type;
454   UINT8   Length;
455   UINT16  Flags;
456   UINT8   InterruptType;
457   UINT8   ProcessorId;
458   UINT8   ProcessorEid;
459   UINT8   IoSapicVector;
460   UINT32  GlobalSystemInterrupt;
461   UINT32  PlatformInterruptSourceFlags;
462 } EFI_ACPI_5_1_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
463 
464 ///
465 /// Platform Interrupt Source Flags.
466 /// All other bits are reserved and must be set to 0.
467 ///
468 #define EFI_ACPI_5_1_CPEI_PROCESSOR_OVERRIDE          BIT0
469 
470 ///
471 /// Processor Local x2APIC Structure Definition
472 ///
473 typedef struct {
474   UINT8   Type;
475   UINT8   Length;
476   UINT8   Reserved[2];
477   UINT32  X2ApicId;
478   UINT32  Flags;
479   UINT32  AcpiProcessorUid;
480 } EFI_ACPI_5_1_PROCESSOR_LOCAL_X2APIC_STRUCTURE;
481 
482 ///
483 /// Local x2APIC NMI Structure
484 ///
485 typedef struct {
486   UINT8   Type;
487   UINT8   Length;
488   UINT16  Flags;
489   UINT32  AcpiProcessorUid;
490   UINT8   LocalX2ApicLint;
491   UINT8   Reserved[3];
492 } EFI_ACPI_5_1_LOCAL_X2APIC_NMI_STRUCTURE;
493 
494 ///
495 /// GIC Structure
496 ///
497 typedef struct {
498   UINT8   Type;
499   UINT8   Length;
500   UINT16  Reserved;
501   UINT32  CPUInterfaceNumber;
502   UINT32  AcpiProcessorUid;
503   UINT32  Flags;
504   UINT32  ParkingProtocolVersion;
505   UINT32  PerformanceInterruptGsiv;
506   UINT64  ParkedAddress;
507   UINT64  PhysicalBaseAddress;
508   UINT64  GICV;
509   UINT64  GICH;
510   UINT32  VGICMaintenanceInterrupt;
511   UINT64  GICRBaseAddress;
512   UINT64  MPIDR;
513 } EFI_ACPI_5_1_GIC_STRUCTURE;
514 
515 ///
516 /// GIC Flags.  All other bits are reserved and must be 0.
517 ///
518 #define EFI_ACPI_5_1_GIC_ENABLED                              BIT0
519 #define EFI_ACPI_5_1_PERFORMANCE_INTERRUPT_MODEL              BIT1
520 #define EFI_ACPI_5_1_VGIC_MAINTENANCE_INTERRUPT_MODE_FLAGS    BIT2
521 
522 ///
523 /// GIC Distributor Structure
524 ///
525 typedef struct {
526   UINT8   Type;
527   UINT8   Length;
528   UINT16  Reserved1;
529   UINT32  GicId;
530   UINT64  PhysicalBaseAddress;
531   UINT32  SystemVectorBase;
532   UINT32  Reserved2;
533 } EFI_ACPI_5_1_GIC_DISTRIBUTOR_STRUCTURE;
534 
535 ///
536 /// GIC MSI Frame Structure
537 ///
538 typedef struct {
539   UINT8   Type;
540   UINT8   Length;
541   UINT16  Reserved1;
542   UINT32  GicMsiFrameId;
543   UINT64  PhysicalBaseAddress;
544   UINT32  Flags;
545   UINT16  SPICount;
546   UINT16  SPIBase;
547 } EFI_ACPI_5_1_GIC_MSI_FRAME_STRUCTURE;
548 
549 ///
550 /// GIC MSI Frame Flags.  All other bits are reserved and must be 0.
551 ///
552 #define EFI_ACPI_5_1_SPI_COUNT_BASE_SELECT                    BIT0
553 
554 ///
555 /// GICR Structure
556 ///
557 typedef struct {
558   UINT8   Type;
559   UINT8   Length;
560   UINT16  Reserved;
561   UINT64  DiscoveryRangeBaseAddress;
562   UINT32  DiscoveryRangeLength;
563 } EFI_ACPI_5_1_GICR_STRUCTURE;
564 
565 ///
566 /// Smart Battery Description Table (SBST)
567 ///
568 typedef struct {
569   EFI_ACPI_DESCRIPTION_HEADER Header;
570   UINT32                      WarningEnergyLevel;
571   UINT32                      LowEnergyLevel;
572   UINT32                      CriticalEnergyLevel;
573 } EFI_ACPI_5_1_SMART_BATTERY_DESCRIPTION_TABLE;
574 
575 ///
576 /// SBST Version (as defined in ACPI 5.1 spec.)
577 ///
578 #define EFI_ACPI_5_1_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
579 
580 ///
581 /// Embedded Controller Boot Resources Table (ECDT)
582 /// The table is followed by a null terminated ASCII string that contains
583 /// a fully qualified reference to the name space object.
584 ///
585 typedef struct {
586   EFI_ACPI_DESCRIPTION_HEADER             Header;
587   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  EcControl;
588   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE  EcData;
589   UINT32                                  Uid;
590   UINT8                                   GpeBit;
591 } EFI_ACPI_5_1_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
592 
593 ///
594 /// ECDT Version (as defined in ACPI 5.1 spec.)
595 ///
596 #define EFI_ACPI_5_1_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION  0x01
597 
598 ///
599 /// System Resource Affinity Table (SRAT).  The rest of the table
600 /// must be defined in a platform specific manner.
601 ///
602 typedef struct {
603   EFI_ACPI_DESCRIPTION_HEADER Header;
604   UINT32                      Reserved1;  ///< Must be set to 1
605   UINT64                      Reserved2;
606 } EFI_ACPI_5_1_SYSTEM_RESOURCE_AFFINITY_TABLE_HEADER;
607 
608 ///
609 /// SRAT Version (as defined in ACPI 5.1 spec.)
610 ///
611 #define EFI_ACPI_5_1_SYSTEM_RESOURCE_AFFINITY_TABLE_REVISION  0x03
612 
613 //
614 // SRAT structure types.
615 // All other values between 0x04 an 0xFF are reserved and
616 // will be ignored by OSPM.
617 //
618 #define EFI_ACPI_5_1_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY  0x00
619 #define EFI_ACPI_5_1_MEMORY_AFFINITY                      0x01
620 #define EFI_ACPI_5_1_PROCESSOR_LOCAL_X2APIC_AFFINITY      0x02
621 #define EFI_ACPI_5_1_GICC_AFFINITY                        0x03
622 
623 ///
624 /// Processor Local APIC/SAPIC Affinity Structure Definition
625 ///
626 typedef struct {
627   UINT8   Type;
628   UINT8   Length;
629   UINT8   ProximityDomain7To0;
630   UINT8   ApicId;
631   UINT32  Flags;
632   UINT8   LocalSapicEid;
633   UINT8   ProximityDomain31To8[3];
634   UINT32  ClockDomain;
635 } EFI_ACPI_5_1_PROCESSOR_LOCAL_APIC_SAPIC_AFFINITY_STRUCTURE;
636 
637 ///
638 /// Local APIC/SAPIC Flags.  All other bits are reserved and must be 0.
639 ///
640 #define EFI_ACPI_5_1_PROCESSOR_LOCAL_APIC_SAPIC_ENABLED (1 << 0)
641 
642 ///
643 /// Memory Affinity Structure Definition
644 ///
645 typedef struct {
646   UINT8   Type;
647   UINT8   Length;
648   UINT32  ProximityDomain;
649   UINT16  Reserved1;
650   UINT32  AddressBaseLow;
651   UINT32  AddressBaseHigh;
652   UINT32  LengthLow;
653   UINT32  LengthHigh;
654   UINT32  Reserved2;
655   UINT32  Flags;
656   UINT64  Reserved3;
657 } EFI_ACPI_5_1_MEMORY_AFFINITY_STRUCTURE;
658 
659 //
660 // Memory Flags.  All other bits are reserved and must be 0.
661 //
662 #define EFI_ACPI_5_1_MEMORY_ENABLED       (1 << 0)
663 #define EFI_ACPI_5_1_MEMORY_HOT_PLUGGABLE (1 << 1)
664 #define EFI_ACPI_5_1_MEMORY_NONVOLATILE   (1 << 2)
665 
666 ///
667 /// Processor Local x2APIC Affinity Structure Definition
668 ///
669 typedef struct {
670   UINT8   Type;
671   UINT8   Length;
672   UINT8   Reserved1[2];
673   UINT32  ProximityDomain;
674   UINT32  X2ApicId;
675   UINT32  Flags;
676   UINT32  ClockDomain;
677   UINT8   Reserved2[4];
678 } EFI_ACPI_5_1_PROCESSOR_LOCAL_X2APIC_AFFINITY_STRUCTURE;
679 
680 ///
681 /// GICC Affinity Structure Definition
682 ///
683 typedef struct {
684   UINT8   Type;
685   UINT8   Length;
686   UINT32  ProximityDomain;
687   UINT32  AcpiProcessorUid;
688   UINT32  Flags;
689   UINT32  ClockDomain;
690 } EFI_ACPI_5_1_GICC_AFFINITY_STRUCTURE;
691 
692 ///
693 /// GICC Flags.  All other bits are reserved and must be 0.
694 ///
695 #define EFI_ACPI_5_1_GICC_ENABLED (1 << 0)
696 
697 ///
698 /// System Locality Distance Information Table (SLIT).
699 /// The rest of the table is a matrix.
700 ///
701 typedef struct {
702   EFI_ACPI_DESCRIPTION_HEADER Header;
703   UINT64                      NumberOfSystemLocalities;
704 } EFI_ACPI_5_1_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_HEADER;
705 
706 ///
707 /// SLIT Version (as defined in ACPI 5.1 spec.)
708 ///
709 #define EFI_ACPI_5_1_SYSTEM_LOCALITY_DISTANCE_INFORMATION_TABLE_REVISION  0x01
710 
711 ///
712 /// Corrected Platform Error Polling Table (CPEP)
713 ///
714 typedef struct {
715   EFI_ACPI_DESCRIPTION_HEADER Header;
716   UINT8                       Reserved[8];
717 } EFI_ACPI_5_1_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_HEADER;
718 
719 ///
720 /// CPEP Version (as defined in ACPI 5.1 spec.)
721 ///
722 #define EFI_ACPI_5_1_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_REVISION 0x01
723 
724 //
725 // CPEP processor structure types.
726 //
727 #define EFI_ACPI_5_1_CPEP_PROCESSOR_APIC_SAPIC  0x00
728 
729 ///
730 /// Corrected Platform Error Polling Processor Structure Definition
731 ///
732 typedef struct {
733   UINT8   Type;
734   UINT8   Length;
735   UINT8   ProcessorId;
736   UINT8   ProcessorEid;
737   UINT32  PollingInterval;
738 } EFI_ACPI_5_1_CPEP_PROCESSOR_APIC_SAPIC_STRUCTURE;
739 
740 ///
741 /// Maximum System Characteristics Table (MSCT)
742 ///
743 typedef struct {
744   EFI_ACPI_DESCRIPTION_HEADER Header;
745   UINT32                      OffsetProxDomInfo;
746   UINT32                      MaximumNumberOfProximityDomains;
747   UINT32                      MaximumNumberOfClockDomains;
748   UINT64                      MaximumPhysicalAddress;
749 } EFI_ACPI_5_1_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_HEADER;
750 
751 ///
752 /// MSCT Version (as defined in ACPI 5.1 spec.)
753 ///
754 #define EFI_ACPI_5_1_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_REVISION 0x01
755 
756 ///
757 /// Maximum Proximity Domain Information Structure Definition
758 ///
759 typedef struct {
760   UINT8   Revision;
761   UINT8   Length;
762   UINT32  ProximityDomainRangeLow;
763   UINT32  ProximityDomainRangeHigh;
764   UINT32  MaximumProcessorCapacity;
765   UINT64  MaximumMemoryCapacity;
766 } EFI_ACPI_5_1_MAXIMUM_PROXIMITY_DOMAIN_INFORMATION_STRUCTURE;
767 
768 ///
769 /// ACPI RAS Feature Table definition.
770 ///
771 typedef struct {
772   EFI_ACPI_DESCRIPTION_HEADER Header;
773   UINT8                       PlatformCommunicationChannelIdentifier[12];
774 } EFI_ACPI_5_1_RAS_FEATURE_TABLE;
775 
776 ///
777 /// RASF Version (as defined in ACPI 5.1 spec.)
778 ///
779 #define EFI_ACPI_5_1_RAS_FEATURE_TABLE_REVISION 0x01
780 
781 ///
782 /// ACPI RASF Platform Communication Channel Shared Memory Region definition.
783 ///
784 typedef struct {
785   UINT32                      Signature;
786   UINT16                      Command;
787   UINT16                      Status;
788   UINT16                      Version;
789   UINT8                       RASCapabilities[16];
790   UINT8                       SetRASCapabilities[16];
791   UINT16                      NumberOfRASFParameterBlocks;
792   UINT32                      SetRASCapabilitiesStatus;
793 } EFI_ACPI_5_1_RASF_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
794 
795 ///
796 /// ACPI RASF PCC command code
797 ///
798 #define EFI_ACPI_5_1_RASF_PCC_COMMAND_CODE_EXECUTE_RASF_COMMAND  0x01
799 
800 ///
801 /// ACPI RASF Platform RAS Capabilities
802 ///
803 #define EFI_ACPI_5_1_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED                          0x01
804 #define EFI_ACPI_5_1_RASF_PLATFORM_RAS_CAPABILITY_HARDWARE_BASED_PATROL_SCRUB_SUPPOTED_AND_EXPOSED_TO_SOFTWARE  0x02
805 
806 ///
807 /// ACPI RASF Parameter Block structure for PATROL_SCRUB
808 ///
809 typedef struct {
810   UINT16                      Type;
811   UINT16                      Version;
812   UINT16                      Length;
813   UINT16                      PatrolScrubCommand;
814   UINT64                      RequestedAddressRange[2];
815   UINT64                      ActualAddressRange[2];
816   UINT16                      Flags;
817   UINT8                       RequestedSpeed;
818 } EFI_ACPI_5_1_RASF_PATROL_SCRUB_PLATFORM_BLOCK_STRUCTURE;
819 
820 ///
821 /// ACPI RASF Patrol Scrub command
822 ///
823 #define EFI_ACPI_5_1_RASF_PATROL_SCRUB_COMMAND_GET_PATROL_PARAMETERS   0x01
824 #define EFI_ACPI_5_1_RASF_PATROL_SCRUB_COMMAND_START_PATROL_SCRUBBER   0x02
825 #define EFI_ACPI_5_1_RASF_PATROL_SCRUB_COMMAND_STOP_PATROL_SCRUBBER    0x03
826 
827 ///
828 /// Memory Power State Table definition.
829 ///
830 typedef struct {
831   EFI_ACPI_DESCRIPTION_HEADER Header;
832   UINT8                       PlatformCommunicationChannelIdentifier;
833   UINT8                       Reserved[3];
834 // Memory Power Node Structure
835 // Memory Power State Characteristics
836 } EFI_ACPI_5_1_MEMORY_POWER_STATUS_TABLE;
837 
838 ///
839 /// MPST Version (as defined in ACPI 5.1 spec.)
840 ///
841 #define EFI_ACPI_5_1_MEMORY_POWER_STATE_TABLE_REVISION 0x01
842 
843 ///
844 /// MPST Platform Communication Channel Shared Memory Region definition.
845 ///
846 typedef struct {
847   UINT32                      Signature;
848   UINT16                      Command;
849   UINT16                      Status;
850   UINT32                      MemoryPowerCommandRegister;
851   UINT32                      MemoryPowerStatusRegister;
852   UINT32                      PowerStateId;
853   UINT32                      MemoryPowerNodeId;
854   UINT64                      MemoryEnergyConsumed;
855   UINT64                      ExpectedAveragePowerComsuned;
856 } EFI_ACPI_5_1_MPST_PLATFORM_COMMUNICATION_CHANNEL_SHARED_MEMORY_REGION;
857 
858 ///
859 /// ACPI MPST PCC command code
860 ///
861 #define EFI_ACPI_5_1_MPST_PCC_COMMAND_CODE_EXECUTE_MPST_COMMAND  0x03
862 
863 ///
864 /// ACPI MPST Memory Power command
865 ///
866 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_POWER_STATE       0x01
867 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_COMMAND_SET_MEMORY_POWER_STATE       0x02
868 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_COMMAND_GET_AVERAGE_POWER_CONSUMED   0x03
869 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_COMMAND_GET_MEMORY_ENERGY_CONSUMED   0x04
870 
871 ///
872 /// MPST Memory Power Node Table
873 ///
874 typedef struct {
875   UINT8                                             PowerStateValue;
876   UINT8                                             PowerStateInformationIndex;
877 } EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE;
878 
879 typedef struct {
880   UINT8                                             Flag;
881   UINT8                                             Reserved;
882   UINT16                                            MemoryPowerNodeId;
883   UINT32                                            Length;
884   UINT64                                            AddressBase;
885   UINT64                                            AddressLength;
886   UINT32                                            NumberOfPowerStates;
887   UINT32                                            NumberOfPhysicalComponents;
888 //EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE              MemoryPowerState[NumberOfPowerStates];
889 //UINT16                                            PhysicalComponentIdentifier[NumberOfPhysicalComponents];
890 } EFI_ACPI_5_1_MPST_MEMORY_POWER_STRUCTURE;
891 
892 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STRUCTURE_FLAG_ENABLE          0x01
893 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STRUCTURE_FLAG_POWER_MANAGED   0x02
894 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STRUCTURE_FLAG_HOT_PLUGGABLE   0x04
895 
896 typedef struct {
897   UINT16                      MemoryPowerNodeCount;
898   UINT8                       Reserved[2];
899 } EFI_ACPI_5_1_MPST_MEMORY_POWER_NODE_TABLE;
900 
901 ///
902 /// MPST Memory Power State Characteristics Table
903 ///
904 typedef struct {
905   UINT8                                             PowerStateStructureID;
906   UINT8                                             Flag;
907   UINT16                                            Reserved;
908   UINT32                                            AveragePowerConsumedInMPS0;
909   UINT32                                            RelativePowerSavingToMPS0;
910   UINT64                                            ExitLatencyToMPS0;
911 } EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE;
912 
913 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_MEMORY_CONTENT_PRESERVED              0x01
914 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_ENTRY   0x02
915 #define EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_STRUCTURE_FLAG_AUTONOMOUS_MEMORY_POWER_STATE_EXIT    0x04
916 
917 typedef struct {
918   UINT16                      MemoryPowerStateCharacteristicsCount;
919   UINT8                       Reserved[2];
920 } EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE_CHARACTERISTICS_TABLE;
921 
922 ///
923 /// Memory Topology Table definition.
924 ///
925 typedef struct {
926   EFI_ACPI_DESCRIPTION_HEADER Header;
927   UINT32                      Reserved;
928 } EFI_ACPI_5_1_MEMORY_TOPOLOGY_TABLE;
929 
930 ///
931 /// PMTT Version (as defined in ACPI 5.1 spec.)
932 ///
933 #define EFI_ACPI_5_1_MEMORY_TOPOLOGY_TABLE_REVISION 0x01
934 
935 ///
936 /// Common Memory Aggregator Device Structure.
937 ///
938 typedef struct {
939   UINT8                       Type;
940   UINT8                       Reserved;
941   UINT16                      Length;
942   UINT16                      Flags;
943   UINT16                      Reserved1;
944 } EFI_ACPI_5_1_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
945 
946 ///
947 /// Memory Aggregator Device Type
948 ///
949 #define EFI_ACPI_5_1_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_SOCKET            0x1
950 #define EFI_ACPI_5_1_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_MEMORY_CONTROLLER 0x2
951 #define EFI_ACPI_5_1_PMMT_MEMORY_AGGREGATOR_DEVICE_TYPE_DIMM              0x3
952 
953 ///
954 /// Socket Memory Aggregator Device Structure.
955 ///
956 typedef struct {
957   EFI_ACPI_5_1_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
958   UINT16                                                       SocketIdentifier;
959   UINT16                                                       Reserved;
960 //EFI_ACPI_5_1_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  MemoryController[];
961 } EFI_ACPI_5_1_PMMT_SOCKET_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
962 
963 ///
964 /// MemoryController Memory Aggregator Device Structure.
965 ///
966 typedef struct {
967   EFI_ACPI_5_1_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
968   UINT32                                                       ReadLatency;
969   UINT32                                                       WriteLatency;
970   UINT32                                                       ReadBandwidth;
971   UINT32                                                       WriteBandwidth;
972   UINT16                                                       OptimalAccessUnit;
973   UINT16                                                       OptimalAccessAlignment;
974   UINT16                                                       Reserved;
975   UINT16                                                       NumberOfProximityDomains;
976 //UINT32                                                       ProximityDomain[NumberOfProximityDomains];
977 //EFI_ACPI_5_1_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE    PhysicalComponent[];
978 } EFI_ACPI_5_1_PMMT_MEMORY_CONTROLLER_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
979 
980 ///
981 /// DIMM Memory Aggregator Device Structure.
982 ///
983 typedef struct {
984   EFI_ACPI_5_1_PMMT_COMMON_MEMORY_AGGREGATOR_DEVICE_STRUCTURE  Header;
985   UINT16                                                       PhysicalComponentIdentifier;
986   UINT16                                                       Reserved;
987   UINT32                                                       SizeOfDimm;
988   UINT32                                                       SmbiosHandle;
989 } EFI_ACPI_5_1_PMMT_DIMM_MEMORY_AGGREGATOR_DEVICE_STRUCTURE;
990 
991 ///
992 /// Boot Graphics Resource Table definition.
993 ///
994 typedef struct {
995   EFI_ACPI_DESCRIPTION_HEADER Header;
996   ///
997   /// 2-bytes (16 bit) version ID. This value must be 1.
998   ///
999   UINT16                      Version;
1000   ///
1001   /// 1-byte status field indicating current status about the table.
1002   ///     Bits[7:1] = Reserved (must be zero)
1003   ///     Bit [0] = Valid. A one indicates the boot image graphic is valid.
1004   ///
1005   UINT8                       Status;
1006   ///
1007   /// 1-byte enumerated type field indicating format of the image.
1008   ///     0 = Bitmap
1009   ///     1 - 255  Reserved (for future use)
1010   ///
1011   UINT8                       ImageType;
1012   ///
1013   /// 8-byte (64 bit) physical address pointing to the firmware's in-memory copy
1014   /// of the image bitmap.
1015   ///
1016   UINT64                      ImageAddress;
1017   ///
1018   /// A 4-byte (32-bit) unsigned long describing the display X-offset of the boot image.
1019   /// (X, Y) display offset of the top left corner of the boot image.
1020   /// The top left corner of the display is at offset (0, 0).
1021   ///
1022   UINT32                      ImageOffsetX;
1023   ///
1024   /// A 4-byte (32-bit) unsigned long describing the display Y-offset of the boot image.
1025   /// (X, Y) display offset of the top left corner of the boot image.
1026   /// The top left corner of the display is at offset (0, 0).
1027   ///
1028   UINT32                      ImageOffsetY;
1029 } EFI_ACPI_5_1_BOOT_GRAPHICS_RESOURCE_TABLE;
1030 
1031 ///
1032 /// BGRT Revision
1033 ///
1034 #define EFI_ACPI_5_1_BOOT_GRAPHICS_RESOURCE_TABLE_REVISION 1
1035 
1036 ///
1037 /// BGRT Version
1038 ///
1039 #define EFI_ACPI_5_1_BGRT_VERSION         0x01
1040 
1041 ///
1042 /// BGRT Status
1043 ///
1044 #define EFI_ACPI_5_1_BGRT_STATUS_NOT_DISPLAYED 0x00
1045 #define EFI_ACPI_5_1_BGRT_STATUS_DISPLAYED     0x01
1046 
1047 ///
1048 /// BGRT Image Type
1049 ///
1050 #define EFI_ACPI_5_1_BGRT_IMAGE_TYPE_BMP  0x00
1051 
1052 ///
1053 /// FPDT Version (as defined in ACPI 5.1 spec.)
1054 ///
1055 #define EFI_ACPI_5_1_FIRMWARE_PERFORMANCE_DATA_TABLE_REVISION 0x01
1056 
1057 ///
1058 /// FPDT Performance Record Types
1059 ///
1060 #define EFI_ACPI_5_1_FPDT_RECORD_TYPE_FIRMWARE_BASIC_BOOT_POINTER      0x0000
1061 #define EFI_ACPI_5_1_FPDT_RECORD_TYPE_S3_PERFORMANCE_TABLE_POINTER     0x0001
1062 
1063 ///
1064 /// FPDT Performance Record Revision
1065 ///
1066 #define EFI_ACPI_5_1_FPDT_RECORD_REVISION_FIRMWARE_BASIC_BOOT_POINTER  0x01
1067 #define EFI_ACPI_5_1_FPDT_RECORD_REVISION_S3_PERFORMANCE_TABLE_POINTER 0x01
1068 
1069 ///
1070 /// FPDT Runtime Performance Record Types
1071 ///
1072 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_TYPE_S3_RESUME                0x0000
1073 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_TYPE_S3_SUSPEND               0x0001
1074 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_TYPE_FIRMWARE_BASIC_BOOT      0x0002
1075 
1076 ///
1077 /// FPDT Runtime Performance Record Revision
1078 ///
1079 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_REVISION_S3_RESUME            0x01
1080 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_REVISION_S3_SUSPEND           0x01
1081 #define EFI_ACPI_5_1_FPDT_RUNTIME_RECORD_REVISION_FIRMWARE_BASIC_BOOT  0x02
1082 
1083 ///
1084 /// FPDT Performance Record header
1085 ///
1086 typedef struct {
1087   UINT16           Type;
1088   UINT8            Length;
1089   UINT8            Revision;
1090 } EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER;
1091 
1092 ///
1093 /// FPDT Performance Table header
1094 ///
1095 typedef struct {
1096   UINT32  Signature;
1097   UINT32  Length;
1098 } EFI_ACPI_5_1_FPDT_PERFORMANCE_TABLE_HEADER;
1099 
1100 ///
1101 /// FPDT Firmware Basic Boot Performance Pointer Record Structure
1102 ///
1103 typedef struct {
1104   EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1105   UINT32                                          Reserved;
1106   ///
1107   /// 64-bit processor-relative physical address of the Basic Boot Performance Table.
1108   ///
1109   UINT64                                          BootPerformanceTablePointer;
1110 } EFI_ACPI_5_1_FPDT_BOOT_PERFORMANCE_TABLE_POINTER_RECORD;
1111 
1112 ///
1113 /// FPDT S3 Performance Table Pointer Record Structure
1114 ///
1115 typedef struct {
1116   EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1117   UINT32                                          Reserved;
1118   ///
1119   /// 64-bit processor-relative physical address of the S3 Performance Table.
1120   ///
1121   UINT64                                          S3PerformanceTablePointer;
1122 } EFI_ACPI_5_1_FPDT_S3_PERFORMANCE_TABLE_POINTER_RECORD;
1123 
1124 ///
1125 /// FPDT Firmware Basic Boot Performance Record Structure
1126 ///
1127 typedef struct {
1128   EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1129   UINT32                                          Reserved;
1130   ///
1131   /// Timer value logged at the beginning of firmware image execution.
1132   /// This may not always be zero or near zero.
1133   ///
1134   UINT64                                          ResetEnd;
1135   ///
1136   /// Timer value logged just prior to loading the OS boot loader into memory.
1137   /// For non-UEFI compatible boots, this field must be zero.
1138   ///
1139   UINT64                                          OsLoaderLoadImageStart;
1140   ///
1141   /// Timer value logged just prior to launching the previously loaded OS boot loader image.
1142   /// For non-UEFI compatible boots, the timer value logged will be just prior
1143   /// to the INT 19h handler invocation.
1144   ///
1145   UINT64                                          OsLoaderStartImageStart;
1146   ///
1147   /// Timer value logged at the point when the OS loader calls the
1148   /// ExitBootServices function for UEFI compatible firmware.
1149   /// For non-UEFI compatible boots, this field must be zero.
1150   ///
1151   UINT64                                          ExitBootServicesEntry;
1152   ///
1153   /// Timer value logged at the point just prior towhen the OS loader gaining
1154   /// control back from calls the ExitBootServices function for UEFI compatible firmware.
1155   /// For non-UEFI compatible boots, this field must be zero.
1156   ///
1157   UINT64                                          ExitBootServicesExit;
1158 } EFI_ACPI_5_1_FPDT_FIRMWARE_BASIC_BOOT_RECORD;
1159 
1160 ///
1161 /// FPDT Firmware Basic Boot Performance Table signature
1162 ///
1163 #define EFI_ACPI_5_1_FPDT_BOOT_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('F', 'B', 'P', 'T')
1164 
1165 //
1166 // FPDT Firmware Basic Boot Performance Table
1167 //
1168 typedef struct {
1169   EFI_ACPI_5_1_FPDT_PERFORMANCE_TABLE_HEADER      Header;
1170   //
1171   // one or more Performance Records.
1172   //
1173 } EFI_ACPI_5_1_FPDT_FIRMWARE_BASIC_BOOT_TABLE;
1174 
1175 ///
1176 /// FPDT "S3PT" S3 Performance Table
1177 ///
1178 #define EFI_ACPI_5_1_FPDT_S3_PERFORMANCE_TABLE_SIGNATURE  SIGNATURE_32('S', '3', 'P', 'T')
1179 
1180 //
1181 // FPDT Firmware S3 Boot Performance Table
1182 //
1183 typedef struct {
1184   EFI_ACPI_5_1_FPDT_PERFORMANCE_TABLE_HEADER      Header;
1185   //
1186   // one or more Performance Records.
1187   //
1188 } EFI_ACPI_5_1_FPDT_FIRMWARE_S3_BOOT_TABLE;
1189 
1190 ///
1191 /// FPDT Basic S3 Resume Performance Record
1192 ///
1193 typedef struct {
1194   EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1195   ///
1196   /// A count of the number of S3 resume cycles since the last full boot sequence.
1197   ///
1198   UINT32                                          ResumeCount;
1199   ///
1200   /// Timer recorded at the end of BIOS S3 resume, just prior to handoff to the
1201   /// OS waking vector. Only the most recent resume cycle's time is retained.
1202   ///
1203   UINT64                                          FullResume;
1204   ///
1205   /// Average timer value of all resume cycles logged since the last full boot
1206   /// sequence, including the most recent resume.  Note that the entire log of
1207   /// timer values does not need to be retained in order to calculate this average.
1208   ///
1209   UINT64                                          AverageResume;
1210 } EFI_ACPI_5_1_FPDT_S3_RESUME_RECORD;
1211 
1212 ///
1213 /// FPDT Basic S3 Suspend Performance Record
1214 ///
1215 typedef struct {
1216   EFI_ACPI_5_1_FPDT_PERFORMANCE_RECORD_HEADER     Header;
1217   ///
1218   /// Timer value recorded at the OS write to SLP_TYP upon entry to S3.
1219   /// Only the most recent suspend cycle's timer value is retained.
1220   ///
1221   UINT64                                          SuspendStart;
1222   ///
1223   /// Timer value recorded at the final firmware write to SLP_TYP (or other
1224   /// mechanism) used to trigger hardware entry to S3.
1225   /// Only the most recent suspend cycle's timer value is retained.
1226   ///
1227   UINT64                                          SuspendEnd;
1228 } EFI_ACPI_5_1_FPDT_S3_SUSPEND_RECORD;
1229 
1230 ///
1231 /// Firmware Performance Record Table definition.
1232 ///
1233 typedef struct {
1234   EFI_ACPI_DESCRIPTION_HEADER Header;
1235 } EFI_ACPI_5_1_FIRMWARE_PERFORMANCE_RECORD_TABLE;
1236 
1237 ///
1238 /// Generic Timer Description Table definition.
1239 ///
1240 typedef struct {
1241   EFI_ACPI_DESCRIPTION_HEADER Header;
1242   UINT64                      CntControlBasePhysicalAddress;
1243   UINT32                      Reserved;
1244   UINT32                      SecurePL1TimerGSIV;
1245   UINT32                      SecurePL1TimerFlags;
1246   UINT32                      NonSecurePL1TimerGSIV;
1247   UINT32                      NonSecurePL1TimerFlags;
1248   UINT32                      VirtualTimerGSIV;
1249   UINT32                      VirtualTimerFlags;
1250   UINT32                      NonSecurePL2TimerGSIV;
1251   UINT32                      NonSecurePL2TimerFlags;
1252   UINT64                      CntReadBasePhysicalAddress;
1253   UINT32                      PlatformTimerCount;
1254   UINT32                      PlatformTimerOffset;
1255 } EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE;
1256 
1257 ///
1258 /// GTDT Version (as defined in ACPI 5.1 spec.)
1259 ///
1260 #define EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION 0x02
1261 
1262 ///
1263 /// Timer Flags.  All other bits are reserved and must be 0.
1264 ///
1265 #define EFI_ACPI_5_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
1266 #define EFI_ACPI_5_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
1267 #define EFI_ACPI_5_1_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY          BIT2
1268 
1269 ///
1270 /// Platform Timer Type
1271 ///
1272 #define EFI_ACPI_5_1_GTDT_GT_BLOCK                       0
1273 #define EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG          1
1274 
1275 ///
1276 /// GT Block Structure
1277 ///
1278 typedef struct {
1279   UINT8   Type;
1280   UINT16  Length;
1281   UINT8   Reserved;
1282   UINT64  CntCtlBase;
1283   UINT32  GTBlockTimerCount;
1284   UINT32  GTBlockTimerOffset;
1285 } EFI_ACPI_5_1_GTDT_GT_BLOCK_STRUCTURE;
1286 
1287 ///
1288 /// GT Block Timer Structure
1289 ///
1290 typedef struct {
1291   UINT8   GTFrameNumber;
1292   UINT8   Reserved[3];
1293   UINT64  CntBaseX;
1294   UINT64  CntEL0BaseX;
1295   UINT32  GTxPhysicalTimerGSIV;
1296   UINT32  GTxPhysicalTimerFlags;
1297   UINT32  GTxVirtualTimerGSIV;
1298   UINT32  GTxVirtualTimerFlags;
1299   UINT32  GTxCommonFlags;
1300 } EFI_ACPI_5_1_GTDT_GT_BLOCK_TIMER_STRUCTURE;
1301 
1302 ///
1303 /// GT Block Physical Timers and Virtual Timers Flags.  All other bits are reserved and must be 0.
1304 ///
1305 #define EFI_ACPI_5_1_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE          BIT0
1306 #define EFI_ACPI_5_1_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
1307 
1308 ///
1309 /// Common Flags Flags.  All other bits are reserved and must be 0.
1310 ///
1311 #define EFI_ACPI_5_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER              BIT0
1312 #define EFI_ACPI_5_1_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILITY      BIT1
1313 
1314 ///
1315 /// SBSA Generic Watchdog Structure
1316 ///
1317 typedef struct {
1318   UINT8   Type;
1319   UINT16  Length;
1320   UINT8   Reserved;
1321   UINT64  RefreshFramePhysicalAddress;
1322   UINT64  WatchdogControlFramePhysicalAddress;
1323   UINT32  WatchdogTimerGSIV;
1324   UINT32  WatchdogTimerFlags;
1325 } EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_STRUCTURE;
1326 
1327 ///
1328 /// SBSA Generic Watchdog Timer Flags.  All other bits are reserved and must be 0.
1329 ///
1330 #define EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_MODE          BIT0
1331 #define EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUPT_POLARITY      BIT1
1332 #define EFI_ACPI_5_1_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER                  BIT2
1333 
1334 ///
1335 /// Boot Error Record Table (BERT)
1336 ///
1337 typedef struct {
1338   EFI_ACPI_DESCRIPTION_HEADER Header;
1339   UINT32                      BootErrorRegionLength;
1340   UINT64                      BootErrorRegion;
1341 } EFI_ACPI_5_1_BOOT_ERROR_RECORD_TABLE_HEADER;
1342 
1343 ///
1344 /// BERT Version (as defined in ACPI 5.1 spec.)
1345 ///
1346 #define EFI_ACPI_5_1_BOOT_ERROR_RECORD_TABLE_REVISION 0x01
1347 
1348 ///
1349 /// Boot Error Region Block Status Definition
1350 ///
1351 typedef struct {
1352   UINT32       UncorrectableErrorValid:1;
1353   UINT32       CorrectableErrorValid:1;
1354   UINT32       MultipleUncorrectableErrors:1;
1355   UINT32       MultipleCorrectableErrors:1;
1356   UINT32       ErrorDataEntryCount:10;
1357   UINT32       Reserved:18;
1358 } EFI_ACPI_5_1_ERROR_BLOCK_STATUS;
1359 
1360 ///
1361 /// Boot Error Region Definition
1362 ///
1363 typedef struct {
1364   EFI_ACPI_5_1_ERROR_BLOCK_STATUS              BlockStatus;
1365   UINT32                                       RawDataOffset;
1366   UINT32                                       RawDataLength;
1367   UINT32                                       DataLength;
1368   UINT32                                       ErrorSeverity;
1369 } EFI_ACPI_5_1_BOOT_ERROR_REGION_STRUCTURE;
1370 
1371 //
1372 // Boot Error Severity types
1373 //
1374 #define EFI_ACPI_5_1_ERROR_SEVERITY_CORRECTABLE  0x00
1375 #define EFI_ACPI_5_1_ERROR_SEVERITY_FATAL        0x01
1376 #define EFI_ACPI_5_1_ERROR_SEVERITY_CORRECTED    0x02
1377 #define EFI_ACPI_5_1_ERROR_SEVERITY_NONE         0x03
1378 
1379 ///
1380 /// Generic Error Data Entry Definition
1381 ///
1382 typedef struct {
1383   UINT8    SectionType[16];
1384   UINT32   ErrorSeverity;
1385   UINT16   Revision;
1386   UINT8    ValidationBits;
1387   UINT8    Flags;
1388   UINT32   ErrorDataLength;
1389   UINT8    FruId[16];
1390   UINT8    FruText[20];
1391 } EFI_ACPI_5_1_GENERIC_ERROR_DATA_ENTRY_STRUCTURE;
1392 
1393 ///
1394 /// Generic Error Data Entry Version (as defined in ACPI 5.1 spec.)
1395 ///
1396 #define EFI_ACPI_5_1_GENERIC_ERROR_DATA_ENTRY_REVISION  0x0201
1397 
1398 ///
1399 /// HEST - Hardware Error Source Table
1400 ///
1401 typedef struct {
1402   EFI_ACPI_DESCRIPTION_HEADER Header;
1403   UINT32                      ErrorSourceCount;
1404 } EFI_ACPI_5_1_HARDWARE_ERROR_SOURCE_TABLE_HEADER;
1405 
1406 ///
1407 /// HEST Version (as defined in ACPI 5.1 spec.)
1408 ///
1409 #define EFI_ACPI_5_1_HARDWARE_ERROR_SOURCE_TABLE_REVISION 0x01
1410 
1411 //
1412 // Error Source structure types.
1413 //
1414 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION  0x00
1415 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK  0x01
1416 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_NMI_ERROR                0x02
1417 #define EFI_ACPI_5_1_PCI_EXPRESS_ROOT_PORT_AER                  0x06
1418 #define EFI_ACPI_5_1_PCI_EXPRESS_DEVICE_AER                     0x07
1419 #define EFI_ACPI_5_1_PCI_EXPRESS_BRIDGE_AER                     0x08
1420 #define EFI_ACPI_5_1_GENERIC_HARDWARE_ERROR                     0x09
1421 
1422 //
1423 // Error Source structure flags.
1424 //
1425 #define EFI_ACPI_5_1_ERROR_SOURCE_FLAG_FIRMWARE_FIRST       (1 << 0)
1426 #define EFI_ACPI_5_1_ERROR_SOURCE_FLAG_GLOBAL               (1 << 1)
1427 
1428 ///
1429 /// IA-32 Architecture Machine Check Exception Structure Definition
1430 ///
1431 typedef struct {
1432   UINT16  Type;
1433   UINT16  SourceId;
1434   UINT8   Reserved0[2];
1435   UINT8   Flags;
1436   UINT8   Enabled;
1437   UINT32  NumberOfRecordsToPreAllocate;
1438   UINT32  MaxSectionsPerRecord;
1439   UINT64  GlobalCapabilityInitData;
1440   UINT64  GlobalControlInitData;
1441   UINT8   NumberOfHardwareBanks;
1442   UINT8   Reserved1[7];
1443 } EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_EXCEPTION_STRUCTURE;
1444 
1445 ///
1446 /// IA-32 Architecture Machine Check Bank Structure Definition
1447 ///
1448 typedef struct {
1449   UINT8   BankNumber;
1450   UINT8   ClearStatusOnInitialization;
1451   UINT8   StatusDataFormat;
1452   UINT8   Reserved0;
1453   UINT32  ControlRegisterMsrAddress;
1454   UINT64  ControlInitData;
1455   UINT32  StatusRegisterMsrAddress;
1456   UINT32  AddressRegisterMsrAddress;
1457   UINT32  MiscRegisterMsrAddress;
1458 } EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_BANK_STRUCTURE;
1459 
1460 ///
1461 /// IA-32 Architecture Machine Check Bank Structure MCA data format
1462 ///
1463 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_IA32      0x00
1464 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_INTEL64   0x01
1465 #define EFI_ACPI_5_1_IA32_ARCHITECTURE_MACHINE_CHECK_ERROR_DATA_FORMAT_AMD64     0x02
1466 
1467 //
1468 // Hardware Error Notification types. All other values are reserved
1469 //
1470 #define EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_POLLED                0x00
1471 #define EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_EXTERNAL_INTERRUPT    0x01
1472 #define EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_LOCAL_INTERRUPT       0x02
1473 #define EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_SCI                   0x03
1474 #define EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_NMI                   0x04
1475 
1476 ///
1477 /// Hardware Error Notification Configuration Write Enable Structure Definition
1478 ///
1479 typedef struct {
1480   UINT16    Type:1;
1481   UINT16    PollInterval:1;
1482   UINT16    SwitchToPollingThresholdValue:1;
1483   UINT16    SwitchToPollingThresholdWindow:1;
1484   UINT16    ErrorThresholdValue:1;
1485   UINT16    ErrorThresholdWindow:1;
1486   UINT16    Reserved:10;
1487 } EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE;
1488 
1489 ///
1490 /// Hardware Error Notification Structure Definition
1491 ///
1492 typedef struct {
1493   UINT8                                                                          Type;
1494   UINT8                                                                          Length;
1495   EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_CONFIGURATION_WRITE_ENABLE_STRUCTURE  ConfigurationWriteEnable;
1496   UINT32                                                                         PollInterval;
1497   UINT32                                                                         Vector;
1498   UINT32                                                                         SwitchToPollingThresholdValue;
1499   UINT32                                                                         SwitchToPollingThresholdWindow;
1500   UINT32                                                                         ErrorThresholdValue;
1501   UINT32                                                                         ErrorThresholdWindow;
1502 } EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_STRUCTURE;
1503 
1504 ///
1505 /// IA-32 Architecture Corrected Machine Check Structure Definition
1506 ///
1507 typedef struct {
1508   UINT16                                                 Type;
1509   UINT16                                                 SourceId;
1510   UINT8                                                  Reserved0[2];
1511   UINT8                                                  Flags;
1512   UINT8                                                  Enabled;
1513   UINT32                                                 NumberOfRecordsToPreAllocate;
1514   UINT32                                                 MaxSectionsPerRecord;
1515   EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
1516   UINT8                                                  NumberOfHardwareBanks;
1517   UINT8                                                  Reserved1[3];
1518 } EFI_ACPI_5_1_IA32_ARCHITECTURE_CORRECTED_MACHINE_CHECK_STRUCTURE;
1519 
1520 ///
1521 /// IA-32 Architecture NMI Error Structure Definition
1522 ///
1523 typedef struct {
1524   UINT16  Type;
1525   UINT16  SourceId;
1526   UINT8   Reserved0[2];
1527   UINT32  NumberOfRecordsToPreAllocate;
1528   UINT32  MaxSectionsPerRecord;
1529   UINT32  MaxRawDataLength;
1530 } EFI_ACPI_5_1_IA32_ARCHITECTURE_NMI_ERROR_STRUCTURE;
1531 
1532 ///
1533 /// PCI Express Root Port AER Structure Definition
1534 ///
1535 typedef struct {
1536   UINT16  Type;
1537   UINT16  SourceId;
1538   UINT8   Reserved0[2];
1539   UINT8   Flags;
1540   UINT8   Enabled;
1541   UINT32  NumberOfRecordsToPreAllocate;
1542   UINT32  MaxSectionsPerRecord;
1543   UINT32  Bus;
1544   UINT16  Device;
1545   UINT16  Function;
1546   UINT16  DeviceControl;
1547   UINT8   Reserved1[2];
1548   UINT32  UncorrectableErrorMask;
1549   UINT32  UncorrectableErrorSeverity;
1550   UINT32  CorrectableErrorMask;
1551   UINT32  AdvancedErrorCapabilitiesAndControl;
1552   UINT32  RootErrorCommand;
1553 } EFI_ACPI_5_1_PCI_EXPRESS_ROOT_PORT_AER_STRUCTURE;
1554 
1555 ///
1556 /// PCI Express Device AER Structure Definition
1557 ///
1558 typedef struct {
1559   UINT16  Type;
1560   UINT16  SourceId;
1561   UINT8   Reserved0[2];
1562   UINT8   Flags;
1563   UINT8   Enabled;
1564   UINT32  NumberOfRecordsToPreAllocate;
1565   UINT32  MaxSectionsPerRecord;
1566   UINT32  Bus;
1567   UINT16  Device;
1568   UINT16  Function;
1569   UINT16  DeviceControl;
1570   UINT8   Reserved1[2];
1571   UINT32  UncorrectableErrorMask;
1572   UINT32  UncorrectableErrorSeverity;
1573   UINT32  CorrectableErrorMask;
1574   UINT32  AdvancedErrorCapabilitiesAndControl;
1575 } EFI_ACPI_5_1_PCI_EXPRESS_DEVICE_AER_STRUCTURE;
1576 
1577 ///
1578 /// PCI Express Bridge AER Structure Definition
1579 ///
1580 typedef struct {
1581   UINT16  Type;
1582   UINT16  SourceId;
1583   UINT8   Reserved0[2];
1584   UINT8   Flags;
1585   UINT8   Enabled;
1586   UINT32  NumberOfRecordsToPreAllocate;
1587   UINT32  MaxSectionsPerRecord;
1588   UINT32  Bus;
1589   UINT16  Device;
1590   UINT16  Function;
1591   UINT16  DeviceControl;
1592   UINT8   Reserved1[2];
1593   UINT32  UncorrectableErrorMask;
1594   UINT32  UncorrectableErrorSeverity;
1595   UINT32  CorrectableErrorMask;
1596   UINT32  AdvancedErrorCapabilitiesAndControl;
1597   UINT32  SecondaryUncorrectableErrorMask;
1598   UINT32  SecondaryUncorrectableErrorSeverity;
1599   UINT32  SecondaryAdvancedErrorCapabilitiesAndControl;
1600 } EFI_ACPI_5_1_PCI_EXPRESS_BRIDGE_AER_STRUCTURE;
1601 
1602 ///
1603 /// Generic Hardware Error Source Structure Definition
1604 ///
1605 typedef struct {
1606   UINT16                                                 Type;
1607   UINT16                                                 SourceId;
1608   UINT16                                                 RelatedSourceId;
1609   UINT8                                                  Flags;
1610   UINT8                                                  Enabled;
1611   UINT32                                                 NumberOfRecordsToPreAllocate;
1612   UINT32                                                 MaxSectionsPerRecord;
1613   UINT32                                                 MaxRawDataLength;
1614   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE                 ErrorStatusAddress;
1615   EFI_ACPI_5_1_HARDWARE_ERROR_NOTIFICATION_STRUCTURE     NotificationStructure;
1616   UINT32                                                 ErrorStatusBlockLength;
1617 } EFI_ACPI_5_1_GENERIC_HARDWARE_ERROR_SOURCE_STRUCTURE;
1618 
1619 ///
1620 /// Generic Error Status Definition
1621 ///
1622 typedef struct {
1623   EFI_ACPI_5_1_ERROR_BLOCK_STATUS              BlockStatus;
1624   UINT32                                       RawDataOffset;
1625   UINT32                                       RawDataLength;
1626   UINT32                                       DataLength;
1627   UINT32                                       ErrorSeverity;
1628 } EFI_ACPI_5_1_GENERIC_ERROR_STATUS_STRUCTURE;
1629 
1630 ///
1631 /// ERST - Error Record Serialization Table
1632 ///
1633 typedef struct {
1634   EFI_ACPI_DESCRIPTION_HEADER Header;
1635   UINT32                      SerializationHeaderSize;
1636   UINT8                       Reserved0[4];
1637   UINT32                      InstructionEntryCount;
1638 } EFI_ACPI_5_1_ERROR_RECORD_SERIALIZATION_TABLE_HEADER;
1639 
1640 ///
1641 /// ERST Version (as defined in ACPI 5.1 spec.)
1642 ///
1643 #define EFI_ACPI_5_1_ERROR_RECORD_SERIALIZATION_TABLE_REVISION 0x01
1644 
1645 ///
1646 /// ERST Serialization Actions
1647 ///
1648 #define EFI_ACPI_5_1_ERST_BEGIN_WRITE_OPERATION                    0x00
1649 #define EFI_ACPI_5_1_ERST_BEGIN_READ_OPERATION                     0x01
1650 #define EFI_ACPI_5_1_ERST_BEGIN_CLEAR_OPERATION                    0x02
1651 #define EFI_ACPI_5_1_ERST_END_OPERATION                            0x03
1652 #define EFI_ACPI_5_1_ERST_SET_RECORD_OFFSET                        0x04
1653 #define EFI_ACPI_5_1_ERST_EXECUTE_OPERATION                        0x05
1654 #define EFI_ACPI_5_1_ERST_CHECK_BUSY_STATUS                        0x06
1655 #define EFI_ACPI_5_1_ERST_GET_COMMAND_STATUS                       0x07
1656 #define EFI_ACPI_5_1_ERST_GET_RECORD_IDENTIFIER                    0x08
1657 #define EFI_ACPI_5_1_ERST_SET_RECORD_IDENTIFIER                    0x09
1658 #define EFI_ACPI_5_1_ERST_GET_RECORD_COUNT                         0x0A
1659 #define EFI_ACPI_5_1_ERST_BEGIN_DUMMY_WRITE_OPERATION              0x0B
1660 #define EFI_ACPI_5_1_ERST_GET_ERROR_LOG_ADDRESS_RANGE              0x0D
1661 #define EFI_ACPI_5_1_ERST_GET_ERROR_LOG_ADDRESS_RANGE_LENGTH       0x0E
1662 #define EFI_ACPI_5_1_ERST_GET_ERROR_LOG_ADDRESS_RANGE_ATTRIBUTES   0x0F
1663 
1664 ///
1665 /// ERST Action Command Status
1666 ///
1667 #define EFI_ACPI_5_1_ERST_STATUS_SUCCESS                           0x00
1668 #define EFI_ACPI_5_1_ERST_STATUS_NOT_ENOUGH_SPACE                  0x01
1669 #define EFI_ACPI_5_1_ERST_STATUS_HARDWARE_NOT_AVAILABLE            0x02
1670 #define EFI_ACPI_5_1_ERST_STATUS_FAILED                            0x03
1671 #define EFI_ACPI_5_1_ERST_STATUS_RECORD_STORE_EMPTY                0x04
1672 #define EFI_ACPI_5_1_ERST_STATUS_RECORD_NOT_FOUND                  0x05
1673 
1674 ///
1675 /// ERST Serialization Instructions
1676 ///
1677 #define EFI_ACPI_5_1_ERST_READ_REGISTER                            0x00
1678 #define EFI_ACPI_5_1_ERST_READ_REGISTER_VALUE                      0x01
1679 #define EFI_ACPI_5_1_ERST_WRITE_REGISTER                           0x02
1680 #define EFI_ACPI_5_1_ERST_WRITE_REGISTER_VALUE                     0x03
1681 #define EFI_ACPI_5_1_ERST_NOOP                                     0x04
1682 #define EFI_ACPI_5_1_ERST_LOAD_VAR1                                0x05
1683 #define EFI_ACPI_5_1_ERST_LOAD_VAR2                                0x06
1684 #define EFI_ACPI_5_1_ERST_STORE_VAR1                               0x07
1685 #define EFI_ACPI_5_1_ERST_ADD                                      0x08
1686 #define EFI_ACPI_5_1_ERST_SUBTRACT                                 0x09
1687 #define EFI_ACPI_5_1_ERST_ADD_VALUE                                0x0A
1688 #define EFI_ACPI_5_1_ERST_SUBTRACT_VALUE                           0x0B
1689 #define EFI_ACPI_5_1_ERST_STALL                                    0x0C
1690 #define EFI_ACPI_5_1_ERST_STALL_WHILE_TRUE                         0x0D
1691 #define EFI_ACPI_5_1_ERST_SKIP_NEXT_INSTRUCTION_IF_TRUE            0x0E
1692 #define EFI_ACPI_5_1_ERST_GOTO                                     0x0F
1693 #define EFI_ACPI_5_1_ERST_SET_SRC_ADDRESS_BASE                     0x10
1694 #define EFI_ACPI_5_1_ERST_SET_DST_ADDRESS_BASE                     0x11
1695 #define EFI_ACPI_5_1_ERST_MOVE_DATA                                0x12
1696 
1697 ///
1698 /// ERST Instruction Flags
1699 ///
1700 #define EFI_ACPI_5_1_ERST_PRESERVE_REGISTER                        0x01
1701 
1702 ///
1703 /// ERST Serialization Instruction Entry
1704 ///
1705 typedef struct {
1706   UINT8                                    SerializationAction;
1707   UINT8                                    Instruction;
1708   UINT8                                    Flags;
1709   UINT8                                    Reserved0;
1710   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
1711   UINT64                                   Value;
1712   UINT64                                   Mask;
1713 } EFI_ACPI_5_1_ERST_SERIALIZATION_INSTRUCTION_ENTRY;
1714 
1715 ///
1716 /// EINJ - Error Injection Table
1717 ///
1718 typedef struct {
1719   EFI_ACPI_DESCRIPTION_HEADER Header;
1720   UINT32                      InjectionHeaderSize;
1721   UINT8                       InjectionFlags;
1722   UINT8                       Reserved0[3];
1723   UINT32                      InjectionEntryCount;
1724 } EFI_ACPI_5_1_ERROR_INJECTION_TABLE_HEADER;
1725 
1726 ///
1727 /// EINJ Version (as defined in ACPI 5.1 spec.)
1728 ///
1729 #define EFI_ACPI_5_1_ERROR_INJECTION_TABLE_REVISION 0x01
1730 
1731 ///
1732 /// EINJ Error Injection Actions
1733 ///
1734 #define EFI_ACPI_5_1_EINJ_BEGIN_INJECTION_OPERATION                0x00
1735 #define EFI_ACPI_5_1_EINJ_GET_TRIGGER_ERROR_ACTION_TABLE           0x01
1736 #define EFI_ACPI_5_1_EINJ_SET_ERROR_TYPE                           0x02
1737 #define EFI_ACPI_5_1_EINJ_GET_ERROR_TYPE                           0x03
1738 #define EFI_ACPI_5_1_EINJ_END_OPERATION                            0x04
1739 #define EFI_ACPI_5_1_EINJ_EXECUTE_OPERATION                        0x05
1740 #define EFI_ACPI_5_1_EINJ_CHECK_BUSY_STATUS                        0x06
1741 #define EFI_ACPI_5_1_EINJ_GET_COMMAND_STATUS                       0x07
1742 #define EFI_ACPI_5_1_EINJ_TRIGGER_ERROR                            0xFF
1743 
1744 ///
1745 /// EINJ Action Command Status
1746 ///
1747 #define EFI_ACPI_5_1_EINJ_STATUS_SUCCESS                           0x00
1748 #define EFI_ACPI_5_1_EINJ_STATUS_UNKNOWN_FAILURE                   0x01
1749 #define EFI_ACPI_5_1_EINJ_STATUS_INVALID_ACCESS                    0x02
1750 
1751 ///
1752 /// EINJ Error Type Definition
1753 ///
1754 #define EFI_ACPI_5_1_EINJ_ERROR_PROCESSOR_CORRECTABLE                 (1 << 0)
1755 #define EFI_ACPI_5_1_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_NONFATAL      (1 << 1)
1756 #define EFI_ACPI_5_1_EINJ_ERROR_PROCESSOR_UNCORRECTABLE_FATAL         (1 << 2)
1757 #define EFI_ACPI_5_1_EINJ_ERROR_MEMORY_CORRECTABLE                    (1 << 3)
1758 #define EFI_ACPI_5_1_EINJ_ERROR_MEMORY_UNCORRECTABLE_NONFATAL         (1 << 4)
1759 #define EFI_ACPI_5_1_EINJ_ERROR_MEMORY_UNCORRECTABLE_FATAL            (1 << 5)
1760 #define EFI_ACPI_5_1_EINJ_ERROR_PCI_EXPRESS_CORRECTABLE               (1 << 6)
1761 #define EFI_ACPI_5_1_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_NONFATAL    (1 << 7)
1762 #define EFI_ACPI_5_1_EINJ_ERROR_PCI_EXPRESS_UNCORRECTABLE_FATAL       (1 << 8)
1763 #define EFI_ACPI_5_1_EINJ_ERROR_PLATFORM_CORRECTABLE                  (1 << 9)
1764 #define EFI_ACPI_5_1_EINJ_ERROR_PLATFORM_UNCORRECTABLE_NONFATAL       (1 << 10)
1765 #define EFI_ACPI_5_1_EINJ_ERROR_PLATFORM_UNCORRECTABLE_FATAL          (1 << 11)
1766 
1767 ///
1768 /// EINJ Injection Instructions
1769 ///
1770 #define EFI_ACPI_5_1_EINJ_READ_REGISTER                            0x00
1771 #define EFI_ACPI_5_1_EINJ_READ_REGISTER_VALUE                      0x01
1772 #define EFI_ACPI_5_1_EINJ_WRITE_REGISTER                           0x02
1773 #define EFI_ACPI_5_1_EINJ_WRITE_REGISTER_VALUE                     0x03
1774 #define EFI_ACPI_5_1_EINJ_NOOP                                     0x04
1775 
1776 ///
1777 /// EINJ Instruction Flags
1778 ///
1779 #define EFI_ACPI_5_1_EINJ_PRESERVE_REGISTER                        0x01
1780 
1781 ///
1782 /// EINJ Injection Instruction Entry
1783 ///
1784 typedef struct {
1785   UINT8                                    InjectionAction;
1786   UINT8                                    Instruction;
1787   UINT8                                    Flags;
1788   UINT8                                    Reserved0;
1789   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE   RegisterRegion;
1790   UINT64                                   Value;
1791   UINT64                                   Mask;
1792 } EFI_ACPI_5_1_EINJ_INJECTION_INSTRUCTION_ENTRY;
1793 
1794 ///
1795 /// EINJ Trigger Action Table
1796 ///
1797 typedef struct {
1798   UINT32  HeaderSize;
1799   UINT32  Revision;
1800   UINT32  TableSize;
1801   UINT32  EntryCount;
1802 } EFI_ACPI_5_1_EINJ_TRIGGER_ACTION_TABLE;
1803 
1804 ///
1805 /// Platform Communications Channel Table (PCCT)
1806 ///
1807 typedef struct {
1808   EFI_ACPI_DESCRIPTION_HEADER Header;
1809   UINT32                      Flags;
1810   UINT64                      Reserved;
1811 } EFI_ACPI_5_1_PLATFORM_COMMUNICATION_CHANNEL_TABLE_HEADER;
1812 
1813 ///
1814 /// PCCT Version (as defined in ACPI 5.1 spec.)
1815 ///
1816 #define EFI_ACPI_5_1_PLATFORM_COMMUNICATION_CHANNEL_TABLE_REVISION 0x01
1817 
1818 ///
1819 /// PCCT Global Flags
1820 ///
1821 #define EFI_ACPI_5_1_PCCT_FLAGS_SCI_DOORBELL                      BIT0
1822 
1823 //
1824 // PCCT Subspace type
1825 //
1826 #define EFI_ACPI_5_1_PCCT_SUBSPACE_TYPE_GENERIC  0x00
1827 
1828 ///
1829 /// PCC Subspace Structure Header
1830 ///
1831 typedef struct {
1832   UINT8        Type;
1833   UINT8        Length;
1834 } EFI_ACPI_5_1_PCCT_SUBSPACE_HEADER;
1835 
1836 ///
1837 /// Generic Communications Subspace Structure
1838 ///
1839 typedef struct {
1840   UINT8                                    Type;
1841   UINT8                                    Length;
1842   UINT8                                    Reserved[6];
1843   UINT64                                   BaseAddress;
1844   UINT64                                   AddressLength;
1845   EFI_ACPI_5_1_GENERIC_ADDRESS_STRUCTURE   DoorbellRegister;
1846   UINT64                                   DoorbellPreserve;
1847   UINT64                                   DoorbellWrite;
1848   UINT32                                   NominalLatency;
1849   UINT32                                   MaximumPeriodicAccessRate;
1850   UINT16                                   MinimumRequestTurnaroundTime;
1851 } EFI_ACPI_5_1_PCCT_SUBSPACE_GENERIC;
1852 
1853 ///
1854 /// Generic Communications Channel Shared Memory Region
1855 ///
1856 
1857 typedef struct {
1858   UINT8                                    Command;
1859   UINT8                                    Reserved:7;
1860   UINT8                                    GenerateSci:1;
1861 } EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
1862 
1863 typedef struct {
1864   UINT8                                    CommandComplete:1;
1865   UINT8                                    SciDoorbell:1;
1866   UINT8                                    Error:1;
1867   UINT8                                    PlatformNotification:1;
1868   UINT8                                    Reserved:4;
1869   UINT8                                    Reserved1;
1870 } EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS;
1871 
1872 typedef struct {
1873   UINT32                                                    Signature;
1874   EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND    Command;
1875   EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_STATUS     Status;
1876 } EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_HEADER;
1877 
1878 //
1879 // Known table signatures
1880 //
1881 
1882 ///
1883 /// "RSD PTR " Root System Description Pointer
1884 ///
1885 #define EFI_ACPI_5_1_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
1886 
1887 ///
1888 /// "APIC" Multiple APIC Description Table
1889 ///
1890 #define EFI_ACPI_5_1_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
1891 
1892 ///
1893 /// "BERT" Boot Error Record Table
1894 ///
1895 #define EFI_ACPI_5_1_BOOT_ERROR_RECORD_TABLE_SIGNATURE  SIGNATURE_32('B', 'E', 'R', 'T')
1896 
1897 ///
1898 /// "BGRT" Boot Graphics Resource Table
1899 ///
1900 #define EFI_ACPI_5_1_BOOT_GRAPHICS_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('B', 'G', 'R', 'T')
1901 
1902 ///
1903 /// "CPEP" Corrected Platform Error Polling Table
1904 ///
1905 #define EFI_ACPI_5_1_CORRECTED_PLATFORM_ERROR_POLLING_TABLE_SIGNATURE  SIGNATURE_32('C', 'P', 'E', 'P')
1906 
1907 ///
1908 /// "DSDT" Differentiated System Description Table
1909 ///
1910 #define EFI_ACPI_5_1_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
1911 
1912 ///
1913 /// "ECDT" Embedded Controller Boot Resources Table
1914 ///
1915 #define EFI_ACPI_5_1_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE  SIGNATURE_32('E', 'C', 'D', 'T')
1916 
1917 ///
1918 /// "EINJ" Error Injection Table
1919 ///
1920 #define EFI_ACPI_5_1_ERROR_INJECTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'I', 'N', 'J')
1921 
1922 ///
1923 /// "ERST" Error Record Serialization Table
1924 ///
1925 #define EFI_ACPI_5_1_ERROR_RECORD_SERIALIZATION_TABLE_SIGNATURE  SIGNATURE_32('E', 'R', 'S', 'T')
1926 
1927 ///
1928 /// "FACP" Fixed ACPI Description Table
1929 ///
1930 #define EFI_ACPI_5_1_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
1931 
1932 ///
1933 /// "FACS" Firmware ACPI Control Structure
1934 ///
1935 #define EFI_ACPI_5_1_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
1936 
1937 ///
1938 /// "FPDT" Firmware Performance Data Table
1939 ///
1940 #define EFI_ACPI_5_1_FIRMWARE_PERFORMANCE_DATA_TABLE_SIGNATURE  SIGNATURE_32('F', 'P', 'D', 'T')
1941 
1942 ///
1943 /// "GTDT" Generic Timer Description Table
1944 ///
1945 #define EFI_ACPI_5_1_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('G', 'T', 'D', 'T')
1946 
1947 ///
1948 /// "HEST" Hardware Error Source Table
1949 ///
1950 #define EFI_ACPI_5_1_HARDWARE_ERROR_SOURCE_TABLE_SIGNATURE  SIGNATURE_32('H', 'E', 'S', 'T')
1951 
1952 ///
1953 /// "MPST" Memory Power State Table
1954 ///
1955 #define EFI_ACPI_5_1_MEMORY_POWER_STATE_TABLE_SIGNATURE  SIGNATURE_32('M', 'P', 'S', 'T')
1956 
1957 ///
1958 /// "MSCT" Maximum System Characteristics Table
1959 ///
1960 #define EFI_ACPI_5_1_MAXIMUM_SYSTEM_CHARACTERISTICS_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'C', 'T')
1961 
1962 ///
1963 /// "PMTT" Platform Memory Topology Table
1964 ///
1965 #define EFI_ACPI_5_1_PLATFORM_MEMORY_TOPOLOGY_TABLE_SIGNATURE  SIGNATURE_32('P', 'M', 'T', 'T')
1966 
1967 ///
1968 /// "PSDT" Persistent System Description Table
1969 ///
1970 #define EFI_ACPI_5_1_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
1971 
1972 ///
1973 /// "RASF" ACPI RAS Feature Table
1974 ///
1975 #define EFI_ACPI_5_1_ACPI_RAS_FEATURE_TABLE_SIGNATURE  SIGNATURE_32('R', 'A', 'S', 'F')
1976 
1977 ///
1978 /// "RSDT" Root System Description Table
1979 ///
1980 #define EFI_ACPI_5_1_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
1981 
1982 ///
1983 /// "SBST" Smart Battery Specification Table
1984 ///
1985 #define EFI_ACPI_5_1_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
1986 
1987 ///
1988 /// "SLIT" System Locality Information Table
1989 ///
1990 #define EFI_ACPI_5_1_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'T')
1991 
1992 ///
1993 /// "SRAT" System Resource Affinity Table
1994 ///
1995 #define EFI_ACPI_5_1_SYSTEM_RESOURCE_AFFINITY_TABLE_SIGNATURE  SIGNATURE_32('S', 'R', 'A', 'T')
1996 
1997 ///
1998 /// "SSDT" Secondary System Description Table
1999 ///
2000 #define EFI_ACPI_5_1_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
2001 
2002 ///
2003 /// "XSDT" Extended System Description Table
2004 ///
2005 #define EFI_ACPI_5_1_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('X', 'S', 'D', 'T')
2006 
2007 ///
2008 /// "BOOT" MS Simple Boot Spec
2009 ///
2010 #define EFI_ACPI_5_1_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE  SIGNATURE_32('B', 'O', 'O', 'T')
2011 
2012 ///
2013 /// "CSRT" MS Core System Resource Table
2014 ///
2015 #define EFI_ACPI_5_1_CORE_SYSTEM_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('C', 'S', 'R', 'T')
2016 
2017 ///
2018 /// "DBG2" MS Debug Port 2 Spec
2019 ///
2020 #define EFI_ACPI_5_1_DEBUG_PORT_2_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', '2')
2021 
2022 ///
2023 /// "DBGP" MS Debug Port Spec
2024 ///
2025 #define EFI_ACPI_5_1_DEBUG_PORT_TABLE_SIGNATURE  SIGNATURE_32('D', 'B', 'G', 'P')
2026 
2027 ///
2028 /// "DMAR" DMA Remapping Table
2029 ///
2030 #define EFI_ACPI_5_1_DMA_REMAPPING_TABLE_SIGNATURE  SIGNATURE_32('D', 'M', 'A', 'R')
2031 
2032 ///
2033 /// "DRTM" Dynamic Root of Trust for Measurement Table
2034 ///
2035 #define EFI_ACPI_5_1_DYNAMIC_ROOT_OF_TRUST_FOR_MEASUREMENT_TABLE_SIGNATURE  SIGNATURE_32('D', 'R', 'T', 'M')
2036 
2037 ///
2038 /// "ETDT" Event Timer Description Table
2039 ///
2040 #define EFI_ACPI_5_1_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('E', 'T', 'D', 'T')
2041 
2042 ///
2043 /// "HPET" IA-PC High Precision Event Timer Table
2044 ///
2045 #define EFI_ACPI_5_1_HIGH_PRECISION_EVENT_TIMER_TABLE_SIGNATURE  SIGNATURE_32('H', 'P', 'E', 'T')
2046 
2047 ///
2048 /// "iBFT" iSCSI Boot Firmware Table
2049 ///
2050 #define EFI_ACPI_5_1_ISCSI_BOOT_FIRMWARE_TABLE_SIGNATURE  SIGNATURE_32('i', 'B', 'F', 'T')
2051 
2052 ///
2053 /// "IVRS" I/O Virtualization Reporting Structure
2054 ///
2055 #define EFI_ACPI_5_1_IO_VIRTUALIZATION_REPORTING_STRUCTURE_SIGNATURE  SIGNATURE_32('I', 'V', 'R', 'S')
2056 
2057 ///
2058 /// "LPIT" Low Power Idle Table
2059 ///
2060 #define EFI_ACPI_5_1_IO_LOW_POWER_IDLE_TABLE_STRUCTURE_SIGNATURE  SIGNATURE_32('L', 'P', 'I', 'T')
2061 
2062 ///
2063 /// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
2064 ///
2065 #define EFI_ACPI_5_1_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'F', 'G')
2066 
2067 ///
2068 /// "MCHI" Management Controller Host Interface Table
2069 ///
2070 #define EFI_ACPI_5_1_MANAGEMENT_CONTROLLER_HOST_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('M', 'C', 'H', 'I')
2071 
2072 ///
2073 /// "MSDM" MS Data Management Table
2074 ///
2075 #define EFI_ACPI_5_1_DATA_MANAGEMENT_TABLE_SIGNATURE  SIGNATURE_32('M', 'S', 'D', 'M')
2076 
2077 ///
2078 /// "SLIC" MS Software Licensing Table Specification
2079 ///
2080 #define EFI_ACPI_5_1_SOFTWARE_LICENSING_TABLE_SIGNATURE  SIGNATURE_32('S', 'L', 'I', 'C')
2081 
2082 ///
2083 /// "SPCR" Serial Port Concole Redirection Table
2084 ///
2085 #define EFI_ACPI_5_1_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'C', 'R')
2086 
2087 ///
2088 /// "SPMI" Server Platform Management Interface Table
2089 ///
2090 #define EFI_ACPI_5_1_SERVER_PLATFORM_MANAGEMENT_INTERFACE_TABLE_SIGNATURE  SIGNATURE_32('S', 'P', 'M', 'I')
2091 
2092 ///
2093 /// "TCPA" Trusted Computing Platform Alliance Capabilities Table
2094 ///
2095 #define EFI_ACPI_5_1_TRUSTED_COMPUTING_PLATFORM_ALLIANCE_CAPABILITIES_TABLE_SIGNATURE  SIGNATURE_32('T', 'C', 'P', 'A')
2096 
2097 ///
2098 /// "TPM2" Trusted Computing Platform 1 Table
2099 ///
2100 #define EFI_ACPI_5_1_TRUSTED_COMPUTING_PLATFORM_2_TABLE_SIGNATURE  SIGNATURE_32('T', 'P', 'M', '2')
2101 
2102 ///
2103 /// "UEFI" UEFI ACPI Data Table
2104 ///
2105 #define EFI_ACPI_5_1_UEFI_ACPI_DATA_TABLE_SIGNATURE  SIGNATURE_32('U', 'E', 'F', 'I')
2106 
2107 ///
2108 /// "WAET" Windows ACPI Emulated Devices Table
2109 ///
2110 #define EFI_ACPI_5_1_WINDOWS_ACPI_EMULATED_DEVICES_TABLE_SIGNATURE  SIGNATURE_32('W', 'A', 'E', 'T')
2111 
2112 ///
2113 /// "WDAT" Watchdog Action Table
2114 ///
2115 #define EFI_ACPI_5_1_WATCHDOG_ACTION_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'A', 'T')
2116 
2117 ///
2118 /// "WDRT" Watchdog Resource Table
2119 ///
2120 #define EFI_ACPI_5_1_WATCHDOG_RESOURCE_TABLE_SIGNATURE  SIGNATURE_32('W', 'D', 'R', 'T')
2121 
2122 ///
2123 /// "WPBT" MS Platform Binary Table
2124 ///
2125 #define EFI_ACPI_5_1_PLATFORM_BINARY_TABLE_SIGNATURE  SIGNATURE_32('W', 'P', 'B', 'T')
2126 
2127 #pragma pack()
2128 
2129 #endif
2130