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