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