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