1 /** @file
2   ACPI 2.0 definitions from the ACPI Specification, revision 2.0
3 
4   Copyright (c) 2006 - 2011, 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
546