blob: 072603e87b591c8cbdd97df1f35a4d3601cdac3e [file] [log] [blame]
Vishal Bhoj82c80712015-12-15 21:13:33 +05301/** @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, 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///
28typedef 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///
63typedef struct {
64 UINT64 Signature;
65 UINT8 Checksum;
66 UINT8 OemId[6];
67 UINT8 Revision;
68 UINT32 RsdtAddress;
69 UINT32 Length;
70 UINT64 XsdtAddress;
71 UINT8 ExtendedChecksum;
72 UINT8 Reserved[3];
73} EFI_ACPI_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///
84typedef 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///
114typedef struct {
115 EFI_ACPI_DESCRIPTION_HEADER Header;
116 UINT32 FirmwareCtrl;
117 UINT32 Dsdt;
118 UINT8 Reserved0;
119 UINT8 PreferredPmProfile;
120 UINT16 SciInt;
121 UINT32 SmiCmd;
122 UINT8 AcpiEnable;
123 UINT8 AcpiDisable;
124 UINT8 S4BiosReq;
125 UINT8 PstateCnt;
126 UINT32 Pm1aEvtBlk;
127 UINT32 Pm1bEvtBlk;
128 UINT32 Pm1aCntBlk;
129 UINT32 Pm1bCntBlk;
130 UINT32 Pm2CntBlk;
131 UINT32 PmTmrBlk;
132 UINT32 Gpe0Blk;
133 UINT32 Gpe1Blk;
134 UINT8 Pm1EvtLen;
135 UINT8 Pm1CntLen;
136 UINT8 Pm2CntLen;
137 UINT8 PmTmrLen;
138 UINT8 Gpe0BlkLen;
139 UINT8 Gpe1BlkLen;
140 UINT8 Gpe1Base;
141 UINT8 CstCnt;
142 UINT16 PLvl2Lat;
143 UINT16 PLvl3Lat;
144 UINT16 FlushSize;
145 UINT16 FlushStride;
146 UINT8 DutyOffset;
147 UINT8 DutyWidth;
148 UINT8 DayAlrm;
149 UINT8 MonAlrm;
150 UINT8 Century;
151 UINT16 IaPcBootArch;
152 UINT8 Reserved1;
153 UINT32 Flags;
154 EFI_ACPI_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///
239typedef 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///
285typedef 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///
330typedef 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///
346typedef 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///
358typedef 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///
370typedef 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///
394typedef 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///
404typedef 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///
415typedef 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///
425typedef 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///
438typedef 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///
452typedef 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///
473typedef 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///
485typedef 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///
497typedef 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///
525typedef 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///
538typedef 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///
557typedef 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///
568typedef 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///
585typedef 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///
602typedef 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///
626typedef 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///
645typedef 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///
669typedef 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///
683typedef 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///
701typedef 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///
714typedef 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///
732typedef 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///
743typedef 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///
759typedef 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///
771typedef 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///
784typedef 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///
809typedef 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///
830typedef 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///
846typedef 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///
874typedef struct {
875 UINT8 PowerStateValue;
876 UINT8 PowerStateInformationIndex;
877} EFI_ACPI_5_1_MPST_MEMORY_POWER_STATE;
878
879typedef 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
896typedef 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///
904typedef 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
917typedef 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///
925typedef 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///
938typedef 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///
956typedef 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///
966typedef 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///
983typedef 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///
994typedef 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///
1086typedef 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///
1095typedef 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///
1103typedef 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///
1115typedef 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///
1127typedef 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//
1168typedef 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//
1183typedef 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///
1193typedef 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///
1215typedef 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///
1233typedef 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///
1240typedef 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 0x01
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///
1278typedef 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///
1290typedef 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///
1317typedef 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///
1337typedef 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///
1351typedef 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///
1363typedef 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///
1382typedef 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///
1401typedef 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///
1431typedef 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///
1448typedef 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///
1479typedef 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///
1492typedef 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///
1507typedef 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///
1523typedef 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///
1535typedef 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///
1558typedef 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///
1580typedef 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///
1605typedef 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///
1622typedef 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///
1633typedef 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///
1705typedef 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///
1718typedef 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///
1784typedef 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///
1797typedef 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///
1807typedef 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///
1831typedef struct {
1832 UINT8 Type;
1833 UINT8 Length;
1834} EFI_ACPI_5_1_PCCT_SUBSPACE_HEADER;
1835
1836///
1837/// Generic Communications Subspace Structure
1838///
1839typedef 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
1857typedef struct {
1858 UINT8 Command;
1859 UINT8 Reserved:7;
1860 UINT8 GenerateSci:1;
1861} EFI_ACPI_5_1_PCCT_GENERIC_SHARED_MEMORY_REGION_COMMAND;
1862
1863typedef 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
1872typedef 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