blob: b4e19ae56ea605ba359168c06785a844d57dfc75 [file] [log] [blame]
Jonathan Zhang6d277782020-06-09 17:56:53 -07001/** @file
2 ACPI 2.0 definitions from the ACPI Specification, revision 2.0
3
4 Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6**/
7
8#ifndef _ACPI_2_0_H_
9#define _ACPI_2_0_H_
10
11#include <IndustryStandard/Acpi10.h>
12
13//
14// Define for Descriptor
15//
16#define ACPI_LARGE_GENERIC_REGISTER_DESCRIPTOR_NAME 0x02
17
18#define ACPI_GENERIC_REGISTER_DESCRIPTOR 0x82
19
20//
21// Ensure proper structure formats
22//
23#pragma pack(1)
24
25///
26/// Generic Register Descriptor
27///
28typedef PACKED struct {
29 ACPI_LARGE_RESOURCE_HEADER Header;
30 UINT8 AddressSpaceId;
31 UINT8 RegisterBitWidth;
32 UINT8 RegisterBitOffset;
33 UINT8 AddressSize;
34 UINT64 RegisterAddress;
35} EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR;
36
37#pragma pack()
38
39//
40// Ensure proper structure formats
41//
42#pragma pack(1)
43
44///
45/// ACPI 2.0 Generic Address Space definition
46///
47typedef struct {
48 UINT8 AddressSpaceId;
49 UINT8 RegisterBitWidth;
50 UINT8 RegisterBitOffset;
51 UINT8 Reserved;
52 UINT64 Address;
53} EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE;
54
55//
56// Generic Address Space Address IDs
57//
58#define EFI_ACPI_2_0_SYSTEM_MEMORY 0
59#define EFI_ACPI_2_0_SYSTEM_IO 1
60#define EFI_ACPI_2_0_PCI_CONFIGURATION_SPACE 2
61#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER 3
62#define EFI_ACPI_2_0_SMBUS 4
63#define EFI_ACPI_2_0_FUNCTIONAL_FIXED_HARDWARE 0x7F
64
65//
66// ACPI 2.0 table structures
67//
68
69///
70/// Root System Description Pointer Structure
71///
72typedef struct {
73 UINT64 Signature;
74 UINT8 Checksum;
75 UINT8 OemId[6];
76 UINT8 Revision;
77 UINT32 RsdtAddress;
78 UINT32 Length;
79 UINT64 XsdtAddress;
80 UINT8 ExtendedChecksum;
81 UINT8 Reserved[3];
82} EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
83
84///
85/// RSD_PTR Revision (as defined in ACPI 2.0 spec.)
86///
87#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_REVISION 0x02
88
89///
90/// Common table header, this prefaces all ACPI tables, including FACS, but
91/// excluding the RSD PTR structure
92///
93typedef struct {
94 UINT32 Signature;
95 UINT32 Length;
96} EFI_ACPI_2_0_COMMON_HEADER;
97
98//
99// Root System Description Table
100// No definition needed as it is a common description table header, the same with
101// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
102//
103
104///
105/// RSDT Revision (as defined in ACPI 2.0 spec.)
106///
107#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
108
109//
110// Extended System Description Table
111// No definition needed as it is a common description table header, the same with
112// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT64 table pointers.
113//
114
115///
116/// XSDT Revision (as defined in ACPI 2.0 spec.)
117///
118#define EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
119
120///
121/// Fixed ACPI Description Table Structure (FADT)
122///
123typedef struct {
124 EFI_ACPI_DESCRIPTION_HEADER Header;
125 UINT32 FirmwareCtrl;
126 UINT32 Dsdt;
127 UINT8 Reserved0;
128 UINT8 PreferredPmProfile;
129 UINT16 SciInt;
130 UINT32 SmiCmd;
131 UINT8 AcpiEnable;
132 UINT8 AcpiDisable;
133 UINT8 S4BiosReq;
134 UINT8 PstateCnt;
135 UINT32 Pm1aEvtBlk;
136 UINT32 Pm1bEvtBlk;
137 UINT32 Pm1aCntBlk;
138 UINT32 Pm1bCntBlk;
139 UINT32 Pm2CntBlk;
140 UINT32 PmTmrBlk;
141 UINT32 Gpe0Blk;
142 UINT32 Gpe1Blk;
143 UINT8 Pm1EvtLen;
144 UINT8 Pm1CntLen;
145 UINT8 Pm2CntLen;
146 UINT8 PmTmrLen;
147 UINT8 Gpe0BlkLen;
148 UINT8 Gpe1BlkLen;
149 UINT8 Gpe1Base;
150 UINT8 CstCnt;
151 UINT16 PLvl2Lat;
152 UINT16 PLvl3Lat;
153 UINT16 FlushSize;
154 UINT16 FlushStride;
155 UINT8 DutyOffset;
156 UINT8 DutyWidth;
157 UINT8 DayAlrm;
158 UINT8 MonAlrm;
159 UINT8 Century;
160 UINT16 IaPcBootArch;
161 UINT8 Reserved1;
162 UINT32 Flags;
163 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE ResetReg;
164 UINT8 ResetValue;
165 UINT8 Reserved2[3];
166 UINT64 XFirmwareCtrl;
167 UINT64 XDsdt;
168 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1aEvtBlk;
169 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1bEvtBlk;
170 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1aCntBlk;
171 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm1bCntBlk;
172 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPm2CntBlk;
173 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XPmTmrBlk;
174 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XGpe0Blk;
175 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE XGpe1Blk;
176} EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE;
177
178///
179/// FADT Version (as defined in ACPI 2.0 spec.)
180///
181#define EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION 0x03
182
183//
184// Fixed ACPI Description Table Preferred Power Management Profile
185//
186#define EFI_ACPI_2_0_PM_PROFILE_UNSPECIFIED 0
187#define EFI_ACPI_2_0_PM_PROFILE_DESKTOP 1
188#define EFI_ACPI_2_0_PM_PROFILE_MOBILE 2
189#define EFI_ACPI_2_0_PM_PROFILE_WORKSTATION 3
190#define EFI_ACPI_2_0_PM_PROFILE_ENTERPRISE_SERVER 4
191#define EFI_ACPI_2_0_PM_PROFILE_SOHO_SERVER 5
192#define EFI_ACPI_2_0_PM_PROFILE_APPLIANCE_PC 6
193
194//
195// Fixed ACPI Description Table Boot Architecture Flags
196// All other bits are reserved and must be set to 0.
197//
198#define EFI_ACPI_2_0_LEGACY_DEVICES BIT0
199#define EFI_ACPI_2_0_8042 BIT1
200
201//
202// Fixed ACPI Description Table Fixed Feature Flags
203// All other bits are reserved and must be set to 0.
204//
205#define EFI_ACPI_2_0_WBINVD BIT0
206#define EFI_ACPI_2_0_WBINVD_FLUSH BIT1
207#define EFI_ACPI_2_0_PROC_C1 BIT2
208#define EFI_ACPI_2_0_P_LVL2_UP BIT3
209#define EFI_ACPI_2_0_PWR_BUTTON BIT4
210#define EFI_ACPI_2_0_SLP_BUTTON BIT5
211#define EFI_ACPI_2_0_FIX_RTC BIT6
212#define EFI_ACPI_2_0_RTC_S4 BIT7
213#define EFI_ACPI_2_0_TMR_VAL_EXT BIT8
214#define EFI_ACPI_2_0_DCK_CAP BIT9
215#define EFI_ACPI_2_0_RESET_REG_SUP BIT10
216#define EFI_ACPI_2_0_SEALED_CASE BIT11
217#define EFI_ACPI_2_0_HEADLESS BIT12
218#define EFI_ACPI_2_0_CPU_SW_SLP BIT13
219
220///
221/// Firmware ACPI Control Structure
222///
223typedef struct {
224 UINT32 Signature;
225 UINT32 Length;
226 UINT32 HardwareSignature;
227 UINT32 FirmwareWakingVector;
228 UINT32 GlobalLock;
229 UINT32 Flags;
230 UINT64 XFirmwareWakingVector;
231 UINT8 Version;
232 UINT8 Reserved[31];
233} EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
234
235///
236/// FACS Version (as defined in ACPI 2.0 spec.)
237///
238#define EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_VERSION 0x01
239
240///
241/// Firmware Control Structure Feature Flags
242/// All other bits are reserved and must be set to 0.
243///
244#define EFI_ACPI_2_0_S4BIOS_F BIT0
245
246///
247/// Multiple APIC Description Table header definition. The rest of the table
248/// must be defined in a platform specific manner.
249///
250typedef struct {
251 EFI_ACPI_DESCRIPTION_HEADER Header;
252 UINT32 LocalApicAddress;
253 UINT32 Flags;
254} EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
255
256///
257/// MADT Revision (as defined in ACPI 2.0 spec.)
258///
259#define EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x01
260
261///
262/// Multiple APIC Flags
263/// All other bits are reserved and must be set to 0.
264///
265#define EFI_ACPI_2_0_PCAT_COMPAT BIT0
266
267//
268// Multiple APIC Description Table APIC structure types
269// All other values between 0x09 an 0xFF are reserved and
270// will be ignored by OSPM.
271//
272#define EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC 0x00
273#define EFI_ACPI_2_0_IO_APIC 0x01
274#define EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE 0x02
275#define EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE 0x03
276#define EFI_ACPI_2_0_LOCAL_APIC_NMI 0x04
277#define EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE 0x05
278#define EFI_ACPI_2_0_IO_SAPIC 0x06
279#define EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC 0x07
280#define EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES 0x08
281
282//
283// APIC Structure Definitions
284//
285
286///
287/// Processor Local APIC Structure Definition
288///
289typedef struct {
290 UINT8 Type;
291 UINT8 Length;
292 UINT8 AcpiProcessorId;
293 UINT8 ApicId;
294 UINT32 Flags;
295} EFI_ACPI_2_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
296
297///
298/// Local APIC Flags. All other bits are reserved and must be 0.
299///
300#define EFI_ACPI_2_0_LOCAL_APIC_ENABLED BIT0
301
302///
303/// IO APIC Structure
304///
305typedef struct {
306 UINT8 Type;
307 UINT8 Length;
308 UINT8 IoApicId;
309 UINT8 Reserved;
310 UINT32 IoApicAddress;
311 UINT32 GlobalSystemInterruptBase;
312} EFI_ACPI_2_0_IO_APIC_STRUCTURE;
313
314///
315/// Interrupt Source Override Structure
316///
317typedef struct {
318 UINT8 Type;
319 UINT8 Length;
320 UINT8 Bus;
321 UINT8 Source;
322 UINT32 GlobalSystemInterrupt;
323 UINT16 Flags;
324} EFI_ACPI_2_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
325
326///
327/// Non-Maskable Interrupt Source Structure
328///
329typedef struct {
330 UINT8 Type;
331 UINT8 Length;
332 UINT16 Flags;
333 UINT32 GlobalSystemInterrupt;
334} EFI_ACPI_2_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
335
336///
337/// Local APIC NMI Structure
338///
339typedef struct {
340 UINT8 Type;
341 UINT8 Length;
342 UINT8 AcpiProcessorId;
343 UINT16 Flags;
344 UINT8 LocalApicLint;
345} EFI_ACPI_2_0_LOCAL_APIC_NMI_STRUCTURE;
346
347///
348/// Local APIC Address Override Structure
349///
350typedef struct {
351 UINT8 Type;
352 UINT8 Length;
353 UINT16 Reserved;
354 UINT64 LocalApicAddress;
355} EFI_ACPI_2_0_LOCAL_APIC_ADDRESS_OVERRIDE_STRUCTURE;
356
357///
358/// IO SAPIC Structure
359///
360typedef struct {
361 UINT8 Type;
362 UINT8 Length;
363 UINT8 IoApicId;
364 UINT8 Reserved;
365 UINT32 GlobalSystemInterruptBase;
366 UINT64 IoSapicAddress;
367} EFI_ACPI_2_0_IO_SAPIC_STRUCTURE;
368
369///
370/// Local SAPIC Structure
371///
372typedef struct {
373 UINT8 Type;
374 UINT8 Length;
375 UINT8 AcpiProcessorId;
376 UINT8 LocalSapicId;
377 UINT8 LocalSapicEid;
378 UINT8 Reserved[3];
379 UINT32 Flags;
380} EFI_ACPI_2_0_PROCESSOR_LOCAL_SAPIC_STRUCTURE;
381
382///
383/// Platform Interrupt Sources Structure
384///
385typedef struct {
386 UINT8 Type;
387 UINT8 Length;
388 UINT16 Flags;
389 UINT8 InterruptType;
390 UINT8 ProcessorId;
391 UINT8 ProcessorEid;
392 UINT8 IoSapicVector;
393 UINT32 GlobalSystemInterrupt;
394 UINT32 Reserved;
395} EFI_ACPI_2_0_PLATFORM_INTERRUPT_SOURCES_STRUCTURE;
396
397///
398/// Smart Battery Description Table (SBST)
399///
400typedef struct {
401 EFI_ACPI_DESCRIPTION_HEADER Header;
402 UINT32 WarningEnergyLevel;
403 UINT32 LowEnergyLevel;
404 UINT32 CriticalEnergyLevel;
405} EFI_ACPI_2_0_SMART_BATTERY_DESCRIPTION_TABLE;
406
407///
408/// SBST Version (as defined in ACPI 2.0 spec.)
409///
410#define EFI_ACPI_2_0_SMART_BATTERY_DESCRIPTION_TABLE_REVISION 0x01
411
412///
413/// Embedded Controller Boot Resources Table (ECDT)
414/// The table is followed by a null terminated ASCII string that contains
415/// a fully qualified reference to the name space object.
416///
417typedef struct {
418 EFI_ACPI_DESCRIPTION_HEADER Header;
419 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE EcControl;
420 EFI_ACPI_2_0_GENERIC_ADDRESS_STRUCTURE EcData;
421 UINT32 Uid;
422 UINT8 GpeBit;
423} EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE;
424
425///
426/// ECDT Version (as defined in ACPI 2.0 spec.)
427///
428#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_REVISION 0x01
429
430//
431// Known table signatures
432//
433
434///
435/// "RSD PTR " Root System Description Pointer
436///
437#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
438
439///
440/// "SPIC" Multiple SAPIC Description Table
441///
442/// BUGBUG: Don't know where this came from except SR870BN4 uses it.
443/// #define EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE 0x43495053
444///
445#define EFI_ACPI_2_0_MULTIPLE_SAPIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C')
446
447///
448/// "BOOT" MS Simple Boot Spec
449///
450#define EFI_ACPI_2_0_SIMPLE_BOOT_FLAG_TABLE_SIGNATURE SIGNATURE_32('B', 'O', 'O', 'T')
451
452///
453/// "DBGP" MS Bebug Port Spec
454///
455#define EFI_ACPI_2_0_DEBUG_PORT_TABLE_SIGNATURE SIGNATURE_32('D', 'B', 'G', 'P')
456
457///
458/// "DSDT" Differentiated System Description Table
459///
460#define EFI_ACPI_2_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('D', 'S', 'D', 'T')
461
462///
463/// "ECDT" Embedded Controller Boot Resources Table
464///
465#define EFI_ACPI_2_0_EMBEDDED_CONTROLLER_BOOT_RESOURCES_TABLE_SIGNATURE SIGNATURE_32('E', 'C', 'D', 'T')
466
467///
468/// "ETDT" Event Timer Description Table
469///
470#define EFI_ACPI_2_0_EVENT_TIMER_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('E', 'T', 'D', 'T')
471
472///
473/// "FACS" Firmware ACPI Control Structure
474///
475#define EFI_ACPI_2_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'S')
476
477///
478/// "FACP" Fixed ACPI Description Table
479///
480#define EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('F', 'A', 'C', 'P')
481
482///
483/// "APIC" Multiple APIC Description Table
484///
485#define EFI_ACPI_2_0_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('A', 'P', 'I', 'C')
486
487///
488/// "PSDT" Persistent System Description Table
489///
490#define EFI_ACPI_2_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('P', 'S', 'D', 'T')
491
492///
493/// "RSDT" Root System Description Table
494///
495#define EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('R', 'S', 'D', 'T')
496
497///
498/// "SBST" Smart Battery Specification Table
499///
500#define EFI_ACPI_2_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE SIGNATURE_32('S', 'B', 'S', 'T')
501
502///
503/// "SLIT" System Locality Information Table
504///
505#define EFI_ACPI_2_0_SYSTEM_LOCALITY_INFORMATION_TABLE_SIGNATURE SIGNATURE_32('S', 'L', 'I', 'T')
506
507///
508/// "SPCR" Serial Port Console Redirection Table
509///
510#define EFI_ACPI_2_0_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE SIGNATURE_32('S', 'P', 'C', 'R')
511
512///
513/// "SRAT" Static Resource Affinity Table
514///
515#define EFI_ACPI_2_0_STATIC_RESOURCE_AFFINITY_TABLE_SIGNATURE SIGNATURE_32('S', 'R', 'A', 'T')
516
517///
518/// "SSDT" Secondary System Description Table
519///
520#define EFI_ACPI_2_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('S', 'S', 'D', 'T')
521
522///
523/// "SPMI" Server Platform Management Interface Table
524///
525#define EFI_ACPI_2_0_SERVER_PLATFORM_MANAGEMENT_INTERFACE_SIGNATURE SIGNATURE_32('S', 'P', 'M', 'I')
526
527///
528/// "XSDT" Extended System Description Table
529///
530#define EFI_ACPI_2_0_EXTENDED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE SIGNATURE_32('X', 'S', 'D', 'T')
531
532///
533/// "MCFG" PCI Express Memory Mapped Configuration Space Base Address Description Table
534///
535#define EFI_ACPI_2_0_MEMORY_MAPPED_CONFIGURATION_BASE_ADDRESS_TABLE_SIGNATURE SIGNATURE_32('M', 'C', 'F', 'G')
536
537#pragma pack()
538
539#endif