]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/IndustryStandard/Acpi20.h
MdePkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / MdePkg / Include / IndustryStandard / Acpi20.h
1 /** @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 Desriptor
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 ///
28 typedef 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 ///
47 typedef 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 ///
72 typedef 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 ///
93 typedef 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 ///
123 typedef 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 ///
223 typedef 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 ///
250 typedef 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 ///
289 typedef 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 ///
305 typedef 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 ///
317 typedef 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 ///
329 typedef 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 ///
339 typedef 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 ///
350 typedef 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 ///
360 typedef 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 ///
372 typedef 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 ///
385 typedef 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 ///
400 typedef 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 ///
417 typedef 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 Concole 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