xref: /freebsd/sys/contrib/edk2/Include/IndustryStandard/Acpi10.h (revision 4928135658a9d0eaee37003df6137ab363fcb0b4)
1 /** @file
2   ACPI 1.0b definitions from the ACPI Specification, revision 1.0b
3 
4 Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials are licensed and made available under
6 the terms and conditions of the BSD License that accompanies this distribution.
7 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_1_0_H_
15 #define _ACPI_1_0_H_
16 
17 #include <IndustryStandard/AcpiAml.h>
18 
19 ///
20 /// Common table header, this prefaces all ACPI tables, including FACS, but
21 /// excluding the RSD PTR structure.
22 ///
23 typedef struct {
24   UINT32  Signature;
25   UINT32  Length;
26 } EFI_ACPI_COMMON_HEADER;
27 
28 #pragma pack(1)
29 ///
30 /// The common ACPI description table header.  This structure prefaces most ACPI tables.
31 ///
32 typedef struct {
33   UINT32  Signature;
34   UINT32  Length;
35   UINT8   Revision;
36   UINT8   Checksum;
37   UINT8   OemId[6];
38   UINT64  OemTableId;
39   UINT32  OemRevision;
40   UINT32  CreatorId;
41   UINT32  CreatorRevision;
42 } EFI_ACPI_DESCRIPTION_HEADER;
43 #pragma pack()
44 
45 //
46 // Define for Desriptor
47 //
48 #define ACPI_SMALL_ITEM_FLAG                   0x00
49 #define ACPI_LARGE_ITEM_FLAG                   0x01
50 
51 //
52 // Small Item Descriptor Name
53 //
54 #define ACPI_SMALL_IRQ_DESCRIPTOR_NAME                       0x04
55 #define ACPI_SMALL_DMA_DESCRIPTOR_NAME                       0x05
56 #define ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME           0x06
57 #define ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME             0x07
58 #define ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME                   0x08
59 #define ACPI_SMALL_FIXED_IO_PORT_DESCRIPTOR_NAME             0x09
60 #define ACPI_SMALL_VENDOR_DEFINED_DESCRIPTOR_NAME            0x0E
61 #define ACPI_SMALL_END_TAG_DESCRIPTOR_NAME                   0x0F
62 
63 //
64 // Large Item Descriptor Name
65 //
66 #define ACPI_LARGE_24_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x01
67 #define ACPI_LARGE_VENDOR_DEFINED_DESCRIPTOR_NAME            0x04
68 #define ACPI_LARGE_32_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x05
69 #define ACPI_LARGE_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR_NAME 0x06
70 #define ACPI_LARGE_DWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x07
71 #define ACPI_LARGE_WORD_ADDRESS_SPACE_DESCRIPTOR_NAME        0x08
72 #define ACPI_LARGE_EXTENDED_IRQ_DESCRIPTOR_NAME              0x09
73 #define ACPI_LARGE_QWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x0A
74 
75 //
76 // Small Item Descriptor Value
77 //
78 #define ACPI_IRQ_NOFLAG_DESCRIPTOR                0x22
79 #define ACPI_IRQ_DESCRIPTOR                       0x23
80 #define ACPI_DMA_DESCRIPTOR                       0x2A
81 #define ACPI_START_DEPENDENT_DESCRIPTOR           0x30
82 #define ACPI_START_DEPENDENT_EX_DESCRIPTOR        0x31
83 #define ACPI_END_DEPENDENT_DESCRIPTOR             0x38
84 #define ACPI_IO_PORT_DESCRIPTOR                   0x47
85 #define ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR    0x4B
86 #define ACPI_END_TAG_DESCRIPTOR                   0x79
87 
88 //
89 // Large Item Descriptor Value
90 //
91 #define ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR       0x81
92 #define ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR       0x85
93 #define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR 0x86
94 #define ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR       0x87
95 #define ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR        0x88
96 #define ACPI_EXTENDED_INTERRUPT_DESCRIPTOR        0x89
97 #define ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR       0x8A
98 #define ACPI_ADDRESS_SPACE_DESCRIPTOR             0x8A
99 
100 //
101 // Resource Type
102 //
103 #define ACPI_ADDRESS_SPACE_TYPE_MEM   0x00
104 #define ACPI_ADDRESS_SPACE_TYPE_IO    0x01
105 #define ACPI_ADDRESS_SPACE_TYPE_BUS   0x02
106 
107 ///
108 /// Power Management Timer frequency is fixed at 3.579545MHz.
109 ///
110 #define ACPI_TIMER_FREQUENCY       3579545
111 
112 //
113 // Ensure proper structure formats
114 //
115 #pragma pack(1)
116 
117 ///
118 /// The commond definition of QWORD, DWORD, and WORD
119 /// Address Space Descriptors.
120 ///
121 typedef PACKED struct {
122   UINT8   Desc;
123   UINT16  Len;
124   UINT8   ResType;
125   UINT8   GenFlag;
126   UINT8   SpecificFlag;
127   UINT64  AddrSpaceGranularity;
128   UINT64  AddrRangeMin;
129   UINT64  AddrRangeMax;
130   UINT64  AddrTranslationOffset;
131   UINT64  AddrLen;
132 } EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;
133 
134 typedef PACKED union {
135   UINT8     Byte;
136   PACKED struct {
137     UINT8 Length : 3;
138     UINT8 Name : 4;
139     UINT8 Type : 1;
140   } Bits;
141 } ACPI_SMALL_RESOURCE_HEADER;
142 
143 typedef PACKED struct {
144   PACKED union {
145     UINT8 Byte;
146     PACKED struct {
147       UINT8 Name : 7;
148       UINT8 Type : 1;
149     }Bits;
150   } Header;
151   UINT16 Length;
152 } ACPI_LARGE_RESOURCE_HEADER;
153 
154 ///
155 /// IRQ Descriptor.
156 ///
157 typedef PACKED struct {
158   ACPI_SMALL_RESOURCE_HEADER   Header;
159   UINT16                       Mask;
160 } EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR;
161 
162 ///
163 /// IRQ Descriptor.
164 ///
165 typedef PACKED struct {
166   ACPI_SMALL_RESOURCE_HEADER   Header;
167   UINT16                       Mask;
168   UINT8                        Information;
169 } EFI_ACPI_IRQ_DESCRIPTOR;
170 
171 ///
172 /// DMA Descriptor.
173 ///
174 typedef PACKED struct {
175   ACPI_SMALL_RESOURCE_HEADER   Header;
176   UINT8                        ChannelMask;
177   UINT8                        Information;
178 } EFI_ACPI_DMA_DESCRIPTOR;
179 
180 ///
181 /// I/O Port Descriptor
182 ///
183 typedef PACKED struct {
184   ACPI_SMALL_RESOURCE_HEADER   Header;
185   UINT8                        Information;
186   UINT16                       BaseAddressMin;
187   UINT16                       BaseAddressMax;
188   UINT8                        Alignment;
189   UINT8                        Length;
190 } EFI_ACPI_IO_PORT_DESCRIPTOR;
191 
192 ///
193 /// Fixed Location I/O Port Descriptor.
194 ///
195 typedef PACKED struct {
196   ACPI_SMALL_RESOURCE_HEADER   Header;
197   UINT16                       BaseAddress;
198   UINT8                        Length;
199 } EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR;
200 
201 ///
202 /// 24-Bit Memory Range Descriptor
203 ///
204 typedef PACKED struct {
205   ACPI_LARGE_RESOURCE_HEADER    Header;
206   UINT8                         Information;
207   UINT16                        BaseAddressMin;
208   UINT16                        BaseAddressMax;
209   UINT16                        Alignment;
210   UINT16                        Length;
211 } EFI_ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR;
212 
213 ///
214 /// 32-Bit Memory Range Descriptor
215 ///
216 typedef PACKED struct {
217   ACPI_LARGE_RESOURCE_HEADER    Header;
218   UINT8                         Information;
219   UINT32                        BaseAddressMin;
220   UINT32                        BaseAddressMax;
221   UINT32                        Alignment;
222   UINT32                        Length;
223 } EFI_ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR;
224 
225 ///
226 /// Fixed 32-Bit Fixed Memory Range Descriptor
227 ///
228 typedef PACKED struct {
229   ACPI_LARGE_RESOURCE_HEADER    Header;
230   UINT8                         Information;
231   UINT32                        BaseAddress;
232   UINT32                        Length;
233 } EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;
234 
235 ///
236 /// QWORD Address Space Descriptor
237 ///
238 typedef PACKED struct {
239   ACPI_LARGE_RESOURCE_HEADER    Header;
240   UINT8                         ResType;
241   UINT8                         GenFlag;
242   UINT8                         SpecificFlag;
243   UINT64                        AddrSpaceGranularity;
244   UINT64                        AddrRangeMin;
245   UINT64                        AddrRangeMax;
246   UINT64                        AddrTranslationOffset;
247   UINT64                        AddrLen;
248 } EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR;
249 
250 ///
251 /// DWORD Address Space Descriptor
252 ///
253 typedef PACKED struct {
254   ACPI_LARGE_RESOURCE_HEADER    Header;
255   UINT8                         ResType;
256   UINT8                         GenFlag;
257   UINT8                         SpecificFlag;
258   UINT32                        AddrSpaceGranularity;
259   UINT32                        AddrRangeMin;
260   UINT32                        AddrRangeMax;
261   UINT32                        AddrTranslationOffset;
262   UINT32                        AddrLen;
263 } EFI_ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR;
264 
265 ///
266 /// WORD Address Space Descriptor
267 ///
268 typedef PACKED struct {
269   ACPI_LARGE_RESOURCE_HEADER    Header;
270   UINT8                         ResType;
271   UINT8                         GenFlag;
272   UINT8                         SpecificFlag;
273   UINT16                        AddrSpaceGranularity;
274   UINT16                        AddrRangeMin;
275   UINT16                        AddrRangeMax;
276   UINT16                        AddrTranslationOffset;
277   UINT16                        AddrLen;
278 } EFI_ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR;
279 
280 ///
281 /// Extended Interrupt Descriptor
282 ///
283 typedef PACKED struct {
284   ACPI_LARGE_RESOURCE_HEADER    Header;
285   UINT8                         InterruptVectorFlags;
286   UINT8                         InterruptTableLength;
287   UINT32                        InterruptNumber[1];
288 } EFI_ACPI_EXTENDED_INTERRUPT_DESCRIPTOR;
289 
290 #pragma pack()
291 
292 ///
293 /// The End tag identifies an end of resource data.
294 ///
295 typedef struct {
296   UINT8 Desc;
297   UINT8 Checksum;
298 } EFI_ACPI_END_TAG_DESCRIPTOR;
299 
300 //
301 // General use definitions
302 //
303 #define EFI_ACPI_RESERVED_BYTE  0x00
304 #define EFI_ACPI_RESERVED_WORD  0x0000
305 #define EFI_ACPI_RESERVED_DWORD 0x00000000
306 #define EFI_ACPI_RESERVED_QWORD 0x0000000000000000
307 
308 //
309 // Resource Type Specific Flags
310 // Ref ACPI specification 6.4.3.5.5
311 //
312 // Bit [0]    : Write Status, _RW
313 //
314 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_WRITE                (1 << 0)
315 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_ONLY                 (0 << 0)
316 //
317 // Bit [2:1]  : Memory Attributes, _MEM
318 //
319 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_NON_CACHEABLE             (0 << 1)
320 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE                 (1 << 1)
321 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_WRITE_COMBINING (2 << 1)
322 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE    (3 << 1)
323 //
324 // Bit [4:3]  : Memory Attributes, _MTP
325 //
326 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_MEMORY      (0 << 3)
327 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_RESERVED    (1 << 3)
328 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_ACPI        (2 << 3)
329 #define EFI_APCI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_NVS         (3 << 3)
330 //
331 // Bit [5]    : Memory to I/O Translation, _TTP
332 //
333 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_TRANSLATION          (1 << 5)
334 #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_STATIC               (0 << 5)
335 
336 //
337 // IRQ Information
338 // Ref ACPI specification 6.4.2.1
339 //
340 #define EFI_ACPI_IRQ_SHARABLE_MASK                      0x10
341 #define   EFI_ACPI_IRQ_SHARABLE                         0x10
342 
343 #define EFI_ACPI_IRQ_POLARITY_MASK                      0x08
344 #define   EFI_ACPI_IRQ_HIGH_TRUE                        0x00
345 #define   EFI_ACPI_IRQ_LOW_FALSE                        0x08
346 
347 #define EFI_ACPI_IRQ_MODE                               0x01
348 #define   EFI_ACPI_IRQ_LEVEL_TRIGGERED                  0x00
349 #define   EFI_ACPI_IRQ_EDGE_TRIGGERED                   0x01
350 
351 //
352 // DMA Information
353 // Ref ACPI specification 6.4.2.2
354 //
355 #define EFI_ACPI_DMA_SPEED_TYPE_MASK                    0x60
356 #define   EFI_ACPI_DMA_SPEED_TYPE_COMPATIBILITY         0x00
357 #define   EFI_ACPI_DMA_SPEED_TYPE_A                     0x20
358 #define   EFI_ACPI_DMA_SPEED_TYPE_B                     0x40
359 #define   EFI_ACPI_DMA_SPEED_TYPE_F                     0x60
360 
361 #define EFI_ACPI_DMA_BUS_MASTER_MASK                    0x04
362 #define   EFI_ACPI_DMA_BUS_MASTER                       0x04
363 
364 #define EFI_ACPI_DMA_TRANSFER_TYPE_MASK                 0x03
365 #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT              0x00
366 #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT_AND_16_BIT   0x01
367 #define   EFI_ACPI_DMA_TRANSFER_TYPE_16_BIT             0x10
368 
369 //
370 // IO Information
371 // Ref ACPI specification 6.4.2.5
372 //
373 #define EFI_ACPI_IO_DECODE_MASK                         0x01
374 #define   EFI_ACPI_IO_DECODE_16_BIT                     0x01
375 #define   EFI_ACPI_IO_DECODE_10_BIT                     0x00
376 
377 //
378 // Memory Information
379 // Ref ACPI specification 6.4.3.4
380 //
381 #define EFI_ACPI_MEMORY_WRITE_STATUS_MASK               0x01
382 #define   EFI_ACPI_MEMORY_WRITABLE                      0x01
383 #define   EFI_ACPI_MEMORY_NON_WRITABLE                  0x00
384 
385 //
386 // Ensure proper structure formats
387 //
388 #pragma pack(1)
389 //
390 // ACPI 1.0b table structures
391 //
392 
393 ///
394 /// Root System Description Pointer Structure.
395 ///
396 typedef struct {
397   UINT64  Signature;
398   UINT8   Checksum;
399   UINT8   OemId[6];
400   UINT8   Reserved;
401   UINT32  RsdtAddress;
402 } EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
403 
404 //
405 // Root System Description Table
406 // No definition needed as it is a common description table header, the same with
407 // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
408 //
409 
410 ///
411 /// RSDT Revision (as defined in ACPI 1.0b specification).
412 ///
413 #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
414 
415 ///
416 /// Fixed ACPI Description Table Structure (FADT).
417 ///
418 typedef struct {
419   EFI_ACPI_DESCRIPTION_HEADER Header;
420   UINT32                      FirmwareCtrl;
421   UINT32                      Dsdt;
422   UINT8                       IntModel;
423   UINT8                       Reserved1;
424   UINT16                      SciInt;
425   UINT32                      SmiCmd;
426   UINT8                       AcpiEnable;
427   UINT8                       AcpiDisable;
428   UINT8                       S4BiosReq;
429   UINT8                       Reserved2;
430   UINT32                      Pm1aEvtBlk;
431   UINT32                      Pm1bEvtBlk;
432   UINT32                      Pm1aCntBlk;
433   UINT32                      Pm1bCntBlk;
434   UINT32                      Pm2CntBlk;
435   UINT32                      PmTmrBlk;
436   UINT32                      Gpe0Blk;
437   UINT32                      Gpe1Blk;
438   UINT8                       Pm1EvtLen;
439   UINT8                       Pm1CntLen;
440   UINT8                       Pm2CntLen;
441   UINT8                       PmTmLen;
442   UINT8                       Gpe0BlkLen;
443   UINT8                       Gpe1BlkLen;
444   UINT8                       Gpe1Base;
445   UINT8                       Reserved3;
446   UINT16                      PLvl2Lat;
447   UINT16                      PLvl3Lat;
448   UINT16                      FlushSize;
449   UINT16                      FlushStride;
450   UINT8                       DutyOffset;
451   UINT8                       DutyWidth;
452   UINT8                       DayAlrm;
453   UINT8                       MonAlrm;
454   UINT8                       Century;
455   UINT8                       Reserved4;
456   UINT8                       Reserved5;
457   UINT8                       Reserved6;
458   UINT32                      Flags;
459 } EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE;
460 
461 ///
462 /// FADT Version (as defined in ACPI 1.0b specification).
463 ///
464 #define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x01
465 
466 #define EFI_ACPI_1_0_INT_MODE_DUAL_PIC         0
467 #define EFI_ACPI_1_0_INT_MODE_MULTIPLE_APIC    1
468 
469 //
470 // Fixed ACPI Description Table Fixed Feature Flags
471 // All other bits are reserved and must be set to 0.
472 //
473 #define EFI_ACPI_1_0_WBINVD               BIT0
474 #define EFI_ACPI_1_0_WBINVD_FLUSH         BIT1
475 #define EFI_ACPI_1_0_PROC_C1              BIT2
476 #define EFI_ACPI_1_0_P_LVL2_UP            BIT3
477 #define EFI_ACPI_1_0_PWR_BUTTON           BIT4
478 #define EFI_ACPI_1_0_SLP_BUTTON           BIT5
479 #define EFI_ACPI_1_0_FIX_RTC              BIT6
480 #define EFI_ACPI_1_0_RTC_S4               BIT7
481 #define EFI_ACPI_1_0_TMR_VAL_EXT          BIT8
482 #define EFI_ACPI_1_0_DCK_CAP              BIT9
483 
484 ///
485 /// Firmware ACPI Control Structure.
486 ///
487 typedef struct {
488   UINT32  Signature;
489   UINT32  Length;
490   UINT32  HardwareSignature;
491   UINT32  FirmwareWakingVector;
492   UINT32  GlobalLock;
493   UINT32  Flags;
494   UINT8   Reserved[40];
495 } EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
496 
497 ///
498 /// Firmware Control Structure Feature Flags.
499 /// All other bits are reserved and must be set to 0.
500 ///
501 #define EFI_ACPI_1_0_S4BIOS_F             BIT0
502 
503 ///
504 /// Multiple APIC Description Table header definition.  The rest of the table
505 /// must be defined in a platform-specific manner.
506 ///
507 typedef struct {
508   EFI_ACPI_DESCRIPTION_HEADER Header;
509   UINT32                      LocalApicAddress;
510   UINT32                      Flags;
511 } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
512 
513 ///
514 /// MADT Revision (as defined in ACPI 1.0b specification).
515 ///
516 #define EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x01
517 
518 ///
519 /// Multiple APIC Flags
520 /// All other bits are reserved and must be set to 0.
521 ///
522 #define EFI_ACPI_1_0_PCAT_COMPAT           BIT0
523 
524 //
525 // Multiple APIC Description Table APIC structure types
526 // All other values between 0x05 an 0xFF are reserved and
527 // will be ignored by OSPM.
528 //
529 #define EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC           0x00
530 #define EFI_ACPI_1_0_IO_APIC                        0x01
531 #define EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE      0x02
532 #define EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
533 #define EFI_ACPI_1_0_LOCAL_APIC_NMI                 0x04
534 
535 //
536 // APIC Structure Definitions
537 //
538 
539 ///
540 /// Processor Local APIC Structure Definition.
541 ///
542 typedef struct {
543   UINT8   Type;
544   UINT8   Length;
545   UINT8   AcpiProcessorId;
546   UINT8   ApicId;
547   UINT32  Flags;
548 } EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
549 
550 ///
551 /// Local APIC Flags.  All other bits are reserved and must be 0.
552 ///
553 #define EFI_ACPI_1_0_LOCAL_APIC_ENABLED      BIT0
554 
555 ///
556 /// IO APIC Structure.
557 ///
558 typedef struct {
559   UINT8   Type;
560   UINT8   Length;
561   UINT8   IoApicId;
562   UINT8   Reserved;
563   UINT32  IoApicAddress;
564   UINT32  SystemVectorBase;
565 } EFI_ACPI_1_0_IO_APIC_STRUCTURE;
566 
567 ///
568 /// Interrupt Source Override Structure.
569 ///
570 typedef struct {
571   UINT8   Type;
572   UINT8   Length;
573   UINT8   Bus;
574   UINT8   Source;
575   UINT32  GlobalSystemInterruptVector;
576   UINT16  Flags;
577 } EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
578 
579 ///
580 /// Non-Maskable Interrupt Source Structure.
581 ///
582 typedef struct {
583   UINT8   Type;
584   UINT8   Length;
585   UINT16  Flags;
586   UINT32  GlobalSystemInterruptVector;
587 } EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
588 
589 ///
590 /// Local APIC NMI Structure.
591 ///
592 typedef struct {
593   UINT8   Type;
594   UINT8   Length;
595   UINT8   AcpiProcessorId;
596   UINT16  Flags;
597   UINT8   LocalApicInti;
598 } EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE;
599 
600 ///
601 /// Smart Battery Description Table (SBST)
602 ///
603 typedef struct {
604   EFI_ACPI_DESCRIPTION_HEADER Header;
605   UINT32                      WarningEnergyLevel;
606   UINT32                      LowEnergyLevel;
607   UINT32                      CriticalEnergyLevel;
608 } EFI_ACPI_1_0_SMART_BATTERY_DESCRIPTION_TABLE;
609 
610 //
611 // Known table signatures
612 //
613 
614 ///
615 /// "RSD PTR " Root System Description Pointer.
616 ///
617 #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
618 
619 ///
620 /// "APIC" Multiple APIC Description Table.
621 ///
622 #define EFI_ACPI_1_0_APIC_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
623 
624 ///
625 /// "DSDT" Differentiated System Description Table.
626 ///
627 #define EFI_ACPI_1_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
628 
629 ///
630 /// "FACS" Firmware ACPI Control Structure.
631 ///
632 #define EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
633 
634 ///
635 /// "FACP" Fixed ACPI Description Table.
636 ///
637 #define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
638 
639 ///
640 /// "PSDT" Persistent System Description Table.
641 ///
642 #define EFI_ACPI_1_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
643 
644 ///
645 /// "RSDT" Root System Description Table.
646 ///
647 #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
648 
649 ///
650 /// "SBST" Smart Battery Specification Table.
651 ///
652 #define EFI_ACPI_1_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
653 
654 ///
655 /// "SSDT" Secondary System Description Table.
656 ///
657 #define EFI_ACPI_1_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
658 
659 #pragma pack()
660 
661 #endif
662