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