10d1ba665SWarner Losh /** @file
20d1ba665SWarner Losh   ACPI 1.0b definitions from the ACPI Specification, revision 1.0b
30d1ba665SWarner Losh 
4*3245fa21SMitchell Horne Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5*3245fa21SMitchell Horne SPDX-License-Identifier: BSD-2-Clause-Patent
60d1ba665SWarner Losh **/
70d1ba665SWarner Losh 
80d1ba665SWarner Losh #ifndef _ACPI_1_0_H_
90d1ba665SWarner Losh #define _ACPI_1_0_H_
100d1ba665SWarner Losh 
110d1ba665SWarner Losh #include <IndustryStandard/AcpiAml.h>
120d1ba665SWarner Losh 
130d1ba665SWarner Losh ///
140d1ba665SWarner Losh /// Common table header, this prefaces all ACPI tables, including FACS, but
150d1ba665SWarner Losh /// excluding the RSD PTR structure.
160d1ba665SWarner Losh ///
170d1ba665SWarner Losh typedef struct {
180d1ba665SWarner Losh   UINT32  Signature;
190d1ba665SWarner Losh   UINT32  Length;
200d1ba665SWarner Losh } EFI_ACPI_COMMON_HEADER;
210d1ba665SWarner Losh 
220d1ba665SWarner Losh #pragma pack(1)
230d1ba665SWarner Losh ///
240d1ba665SWarner Losh /// The common ACPI description table header.  This structure prefaces most ACPI tables.
250d1ba665SWarner Losh ///
260d1ba665SWarner Losh typedef struct {
270d1ba665SWarner Losh   UINT32  Signature;
280d1ba665SWarner Losh   UINT32  Length;
290d1ba665SWarner Losh   UINT8   Revision;
300d1ba665SWarner Losh   UINT8   Checksum;
310d1ba665SWarner Losh   UINT8   OemId[6];
320d1ba665SWarner Losh   UINT64  OemTableId;
330d1ba665SWarner Losh   UINT32  OemRevision;
340d1ba665SWarner Losh   UINT32  CreatorId;
350d1ba665SWarner Losh   UINT32  CreatorRevision;
360d1ba665SWarner Losh } EFI_ACPI_DESCRIPTION_HEADER;
370d1ba665SWarner Losh #pragma pack()
380d1ba665SWarner Losh 
390d1ba665SWarner Losh //
40*3245fa21SMitchell Horne // Define for Descriptor
410d1ba665SWarner Losh //
420d1ba665SWarner Losh #define ACPI_SMALL_ITEM_FLAG                   0x00
430d1ba665SWarner Losh #define ACPI_LARGE_ITEM_FLAG                   0x01
440d1ba665SWarner Losh 
450d1ba665SWarner Losh //
460d1ba665SWarner Losh // Small Item Descriptor Name
470d1ba665SWarner Losh //
480d1ba665SWarner Losh #define ACPI_SMALL_IRQ_DESCRIPTOR_NAME                       0x04
490d1ba665SWarner Losh #define ACPI_SMALL_DMA_DESCRIPTOR_NAME                       0x05
500d1ba665SWarner Losh #define ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME           0x06
510d1ba665SWarner Losh #define ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME             0x07
520d1ba665SWarner Losh #define ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME                   0x08
530d1ba665SWarner Losh #define ACPI_SMALL_FIXED_IO_PORT_DESCRIPTOR_NAME             0x09
540d1ba665SWarner Losh #define ACPI_SMALL_VENDOR_DEFINED_DESCRIPTOR_NAME            0x0E
550d1ba665SWarner Losh #define ACPI_SMALL_END_TAG_DESCRIPTOR_NAME                   0x0F
560d1ba665SWarner Losh 
570d1ba665SWarner Losh //
580d1ba665SWarner Losh // Large Item Descriptor Name
590d1ba665SWarner Losh //
600d1ba665SWarner Losh #define ACPI_LARGE_24_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x01
610d1ba665SWarner Losh #define ACPI_LARGE_VENDOR_DEFINED_DESCRIPTOR_NAME            0x04
620d1ba665SWarner Losh #define ACPI_LARGE_32_BIT_MEMORY_RANGE_DESCRIPTOR_NAME       0x05
630d1ba665SWarner Losh #define ACPI_LARGE_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR_NAME 0x06
640d1ba665SWarner Losh #define ACPI_LARGE_DWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x07
650d1ba665SWarner Losh #define ACPI_LARGE_WORD_ADDRESS_SPACE_DESCRIPTOR_NAME        0x08
660d1ba665SWarner Losh #define ACPI_LARGE_EXTENDED_IRQ_DESCRIPTOR_NAME              0x09
670d1ba665SWarner Losh #define ACPI_LARGE_QWORD_ADDRESS_SPACE_DESCRIPTOR_NAME       0x0A
680d1ba665SWarner Losh 
690d1ba665SWarner Losh //
700d1ba665SWarner Losh // Small Item Descriptor Value
710d1ba665SWarner Losh //
720d1ba665SWarner Losh #define ACPI_IRQ_NOFLAG_DESCRIPTOR                0x22
730d1ba665SWarner Losh #define ACPI_IRQ_DESCRIPTOR                       0x23
740d1ba665SWarner Losh #define ACPI_DMA_DESCRIPTOR                       0x2A
750d1ba665SWarner Losh #define ACPI_START_DEPENDENT_DESCRIPTOR           0x30
760d1ba665SWarner Losh #define ACPI_START_DEPENDENT_EX_DESCRIPTOR        0x31
770d1ba665SWarner Losh #define ACPI_END_DEPENDENT_DESCRIPTOR             0x38
780d1ba665SWarner Losh #define ACPI_IO_PORT_DESCRIPTOR                   0x47
790d1ba665SWarner Losh #define ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR    0x4B
800d1ba665SWarner Losh #define ACPI_END_TAG_DESCRIPTOR                   0x79
810d1ba665SWarner Losh 
820d1ba665SWarner Losh //
830d1ba665SWarner Losh // Large Item Descriptor Value
840d1ba665SWarner Losh //
850d1ba665SWarner Losh #define ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR       0x81
860d1ba665SWarner Losh #define ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR       0x85
870d1ba665SWarner Losh #define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR 0x86
880d1ba665SWarner Losh #define ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR       0x87
890d1ba665SWarner Losh #define ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR        0x88
900d1ba665SWarner Losh #define ACPI_EXTENDED_INTERRUPT_DESCRIPTOR        0x89
910d1ba665SWarner Losh #define ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR       0x8A
920d1ba665SWarner Losh #define ACPI_ADDRESS_SPACE_DESCRIPTOR             0x8A
930d1ba665SWarner Losh 
940d1ba665SWarner Losh //
950d1ba665SWarner Losh // Resource Type
960d1ba665SWarner Losh //
970d1ba665SWarner Losh #define ACPI_ADDRESS_SPACE_TYPE_MEM   0x00
980d1ba665SWarner Losh #define ACPI_ADDRESS_SPACE_TYPE_IO    0x01
990d1ba665SWarner Losh #define ACPI_ADDRESS_SPACE_TYPE_BUS   0x02
1000d1ba665SWarner Losh 
1010d1ba665SWarner Losh ///
1020d1ba665SWarner Losh /// Power Management Timer frequency is fixed at 3.579545MHz.
1030d1ba665SWarner Losh ///
1040d1ba665SWarner Losh #define ACPI_TIMER_FREQUENCY       3579545
1050d1ba665SWarner Losh 
1060d1ba665SWarner Losh //
1070d1ba665SWarner Losh // Ensure proper structure formats
1080d1ba665SWarner Losh //
1090d1ba665SWarner Losh #pragma pack(1)
1100d1ba665SWarner Losh 
1110d1ba665SWarner Losh ///
112*3245fa21SMitchell Horne /// The common definition of QWORD, DWORD, and WORD
1130d1ba665SWarner Losh /// Address Space Descriptors.
1140d1ba665SWarner Losh ///
1150d1ba665SWarner Losh typedef PACKED struct {
1160d1ba665SWarner Losh   UINT8   Desc;
1170d1ba665SWarner Losh   UINT16  Len;
1180d1ba665SWarner Losh   UINT8   ResType;
1190d1ba665SWarner Losh   UINT8   GenFlag;
1200d1ba665SWarner Losh   UINT8   SpecificFlag;
1210d1ba665SWarner Losh   UINT64  AddrSpaceGranularity;
1220d1ba665SWarner Losh   UINT64  AddrRangeMin;
1230d1ba665SWarner Losh   UINT64  AddrRangeMax;
1240d1ba665SWarner Losh   UINT64  AddrTranslationOffset;
1250d1ba665SWarner Losh   UINT64  AddrLen;
1260d1ba665SWarner Losh } EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;
1270d1ba665SWarner Losh 
1280d1ba665SWarner Losh typedef PACKED union {
1290d1ba665SWarner Losh   UINT8     Byte;
1300d1ba665SWarner Losh   PACKED struct {
1310d1ba665SWarner Losh     UINT8 Length : 3;
1320d1ba665SWarner Losh     UINT8 Name : 4;
1330d1ba665SWarner Losh     UINT8 Type : 1;
1340d1ba665SWarner Losh   } Bits;
1350d1ba665SWarner Losh } ACPI_SMALL_RESOURCE_HEADER;
1360d1ba665SWarner Losh 
1370d1ba665SWarner Losh typedef PACKED struct {
1380d1ba665SWarner Losh   PACKED union {
1390d1ba665SWarner Losh     UINT8 Byte;
1400d1ba665SWarner Losh     PACKED struct {
1410d1ba665SWarner Losh       UINT8 Name : 7;
1420d1ba665SWarner Losh       UINT8 Type : 1;
1430d1ba665SWarner Losh     }Bits;
1440d1ba665SWarner Losh   } Header;
1450d1ba665SWarner Losh   UINT16 Length;
1460d1ba665SWarner Losh } ACPI_LARGE_RESOURCE_HEADER;
1470d1ba665SWarner Losh 
1480d1ba665SWarner Losh ///
1490d1ba665SWarner Losh /// IRQ Descriptor.
1500d1ba665SWarner Losh ///
1510d1ba665SWarner Losh typedef PACKED struct {
1520d1ba665SWarner Losh   ACPI_SMALL_RESOURCE_HEADER   Header;
1530d1ba665SWarner Losh   UINT16                       Mask;
1540d1ba665SWarner Losh } EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR;
1550d1ba665SWarner Losh 
1560d1ba665SWarner Losh ///
1570d1ba665SWarner Losh /// IRQ Descriptor.
1580d1ba665SWarner Losh ///
1590d1ba665SWarner Losh typedef PACKED struct {
1600d1ba665SWarner Losh   ACPI_SMALL_RESOURCE_HEADER   Header;
1610d1ba665SWarner Losh   UINT16                       Mask;
1620d1ba665SWarner Losh   UINT8                        Information;
1630d1ba665SWarner Losh } EFI_ACPI_IRQ_DESCRIPTOR;
1640d1ba665SWarner Losh 
1650d1ba665SWarner Losh ///
1660d1ba665SWarner Losh /// DMA Descriptor.
1670d1ba665SWarner Losh ///
1680d1ba665SWarner Losh typedef PACKED struct {
1690d1ba665SWarner Losh   ACPI_SMALL_RESOURCE_HEADER   Header;
1700d1ba665SWarner Losh   UINT8                        ChannelMask;
1710d1ba665SWarner Losh   UINT8                        Information;
1720d1ba665SWarner Losh } EFI_ACPI_DMA_DESCRIPTOR;
1730d1ba665SWarner Losh 
1740d1ba665SWarner Losh ///
1750d1ba665SWarner Losh /// I/O Port Descriptor
1760d1ba665SWarner Losh ///
1770d1ba665SWarner Losh typedef PACKED struct {
1780d1ba665SWarner Losh   ACPI_SMALL_RESOURCE_HEADER   Header;
1790d1ba665SWarner Losh   UINT8                        Information;
1800d1ba665SWarner Losh   UINT16                       BaseAddressMin;
1810d1ba665SWarner Losh   UINT16                       BaseAddressMax;
1820d1ba665SWarner Losh   UINT8                        Alignment;
1830d1ba665SWarner Losh   UINT8                        Length;
1840d1ba665SWarner Losh } EFI_ACPI_IO_PORT_DESCRIPTOR;
1850d1ba665SWarner Losh 
1860d1ba665SWarner Losh ///
1870d1ba665SWarner Losh /// Fixed Location I/O Port Descriptor.
1880d1ba665SWarner Losh ///
1890d1ba665SWarner Losh typedef PACKED struct {
1900d1ba665SWarner Losh   ACPI_SMALL_RESOURCE_HEADER   Header;
1910d1ba665SWarner Losh   UINT16                       BaseAddress;
1920d1ba665SWarner Losh   UINT8                        Length;
1930d1ba665SWarner Losh } EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR;
1940d1ba665SWarner Losh 
1950d1ba665SWarner Losh ///
1960d1ba665SWarner Losh /// 24-Bit Memory Range Descriptor
1970d1ba665SWarner Losh ///
1980d1ba665SWarner Losh typedef PACKED struct {
1990d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2000d1ba665SWarner Losh   UINT8                         Information;
2010d1ba665SWarner Losh   UINT16                        BaseAddressMin;
2020d1ba665SWarner Losh   UINT16                        BaseAddressMax;
2030d1ba665SWarner Losh   UINT16                        Alignment;
2040d1ba665SWarner Losh   UINT16                        Length;
2050d1ba665SWarner Losh } EFI_ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR;
2060d1ba665SWarner Losh 
2070d1ba665SWarner Losh ///
2080d1ba665SWarner Losh /// 32-Bit Memory Range Descriptor
2090d1ba665SWarner Losh ///
2100d1ba665SWarner Losh typedef PACKED struct {
2110d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2120d1ba665SWarner Losh   UINT8                         Information;
2130d1ba665SWarner Losh   UINT32                        BaseAddressMin;
2140d1ba665SWarner Losh   UINT32                        BaseAddressMax;
2150d1ba665SWarner Losh   UINT32                        Alignment;
2160d1ba665SWarner Losh   UINT32                        Length;
2170d1ba665SWarner Losh } EFI_ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR;
2180d1ba665SWarner Losh 
2190d1ba665SWarner Losh ///
2200d1ba665SWarner Losh /// Fixed 32-Bit Fixed Memory Range Descriptor
2210d1ba665SWarner Losh ///
2220d1ba665SWarner Losh typedef PACKED struct {
2230d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2240d1ba665SWarner Losh   UINT8                         Information;
2250d1ba665SWarner Losh   UINT32                        BaseAddress;
2260d1ba665SWarner Losh   UINT32                        Length;
2270d1ba665SWarner Losh } EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;
2280d1ba665SWarner Losh 
2290d1ba665SWarner Losh ///
2300d1ba665SWarner Losh /// QWORD Address Space Descriptor
2310d1ba665SWarner Losh ///
2320d1ba665SWarner Losh typedef PACKED struct {
2330d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2340d1ba665SWarner Losh   UINT8                         ResType;
2350d1ba665SWarner Losh   UINT8                         GenFlag;
2360d1ba665SWarner Losh   UINT8                         SpecificFlag;
2370d1ba665SWarner Losh   UINT64                        AddrSpaceGranularity;
2380d1ba665SWarner Losh   UINT64                        AddrRangeMin;
2390d1ba665SWarner Losh   UINT64                        AddrRangeMax;
2400d1ba665SWarner Losh   UINT64                        AddrTranslationOffset;
2410d1ba665SWarner Losh   UINT64                        AddrLen;
2420d1ba665SWarner Losh } EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR;
2430d1ba665SWarner Losh 
2440d1ba665SWarner Losh ///
2450d1ba665SWarner Losh /// DWORD Address Space Descriptor
2460d1ba665SWarner Losh ///
2470d1ba665SWarner Losh typedef PACKED struct {
2480d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2490d1ba665SWarner Losh   UINT8                         ResType;
2500d1ba665SWarner Losh   UINT8                         GenFlag;
2510d1ba665SWarner Losh   UINT8                         SpecificFlag;
2520d1ba665SWarner Losh   UINT32                        AddrSpaceGranularity;
2530d1ba665SWarner Losh   UINT32                        AddrRangeMin;
2540d1ba665SWarner Losh   UINT32                        AddrRangeMax;
2550d1ba665SWarner Losh   UINT32                        AddrTranslationOffset;
2560d1ba665SWarner Losh   UINT32                        AddrLen;
2570d1ba665SWarner Losh } EFI_ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR;
2580d1ba665SWarner Losh 
2590d1ba665SWarner Losh ///
2600d1ba665SWarner Losh /// WORD Address Space Descriptor
2610d1ba665SWarner Losh ///
2620d1ba665SWarner Losh typedef PACKED struct {
2630d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2640d1ba665SWarner Losh   UINT8                         ResType;
2650d1ba665SWarner Losh   UINT8                         GenFlag;
2660d1ba665SWarner Losh   UINT8                         SpecificFlag;
2670d1ba665SWarner Losh   UINT16                        AddrSpaceGranularity;
2680d1ba665SWarner Losh   UINT16                        AddrRangeMin;
2690d1ba665SWarner Losh   UINT16                        AddrRangeMax;
2700d1ba665SWarner Losh   UINT16                        AddrTranslationOffset;
2710d1ba665SWarner Losh   UINT16                        AddrLen;
2720d1ba665SWarner Losh } EFI_ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR;
2730d1ba665SWarner Losh 
2740d1ba665SWarner Losh ///
2750d1ba665SWarner Losh /// Extended Interrupt Descriptor
2760d1ba665SWarner Losh ///
2770d1ba665SWarner Losh typedef PACKED struct {
2780d1ba665SWarner Losh   ACPI_LARGE_RESOURCE_HEADER    Header;
2790d1ba665SWarner Losh   UINT8                         InterruptVectorFlags;
2800d1ba665SWarner Losh   UINT8                         InterruptTableLength;
2810d1ba665SWarner Losh   UINT32                        InterruptNumber[1];
2820d1ba665SWarner Losh } EFI_ACPI_EXTENDED_INTERRUPT_DESCRIPTOR;
2830d1ba665SWarner Losh 
2840d1ba665SWarner Losh #pragma pack()
2850d1ba665SWarner Losh 
2860d1ba665SWarner Losh ///
2870d1ba665SWarner Losh /// The End tag identifies an end of resource data.
2880d1ba665SWarner Losh ///
2890d1ba665SWarner Losh typedef struct {
2900d1ba665SWarner Losh   UINT8 Desc;
2910d1ba665SWarner Losh   UINT8 Checksum;
2920d1ba665SWarner Losh } EFI_ACPI_END_TAG_DESCRIPTOR;
2930d1ba665SWarner Losh 
2940d1ba665SWarner Losh //
2950d1ba665SWarner Losh // General use definitions
2960d1ba665SWarner Losh //
2970d1ba665SWarner Losh #define EFI_ACPI_RESERVED_BYTE  0x00
2980d1ba665SWarner Losh #define EFI_ACPI_RESERVED_WORD  0x0000
2990d1ba665SWarner Losh #define EFI_ACPI_RESERVED_DWORD 0x00000000
3000d1ba665SWarner Losh #define EFI_ACPI_RESERVED_QWORD 0x0000000000000000
3010d1ba665SWarner Losh 
3020d1ba665SWarner Losh //
3030d1ba665SWarner Losh // Resource Type Specific Flags
3040d1ba665SWarner Losh // Ref ACPI specification 6.4.3.5.5
3050d1ba665SWarner Losh //
3060d1ba665SWarner Losh // Bit [0]    : Write Status, _RW
3070d1ba665SWarner Losh //
3080d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_WRITE                (1 << 0)
3090d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_ONLY                 (0 << 0)
3100d1ba665SWarner Losh //
3110d1ba665SWarner Losh // Bit [2:1]  : Memory Attributes, _MEM
3120d1ba665SWarner Losh //
3130d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_NON_CACHEABLE             (0 << 1)
3140d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE                 (1 << 1)
3150d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_WRITE_COMBINING (2 << 1)
3160d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE    (3 << 1)
3170d1ba665SWarner Losh //
3180d1ba665SWarner Losh // Bit [4:3]  : Memory Attributes, _MTP
3190d1ba665SWarner Losh //
3200d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_MEMORY      (0 << 3)
3210d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_RESERVED    (1 << 3)
3220d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_ACPI        (2 << 3)
3230d1ba665SWarner Losh #define EFI_APCI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_NVS         (3 << 3)
3240d1ba665SWarner Losh //
3250d1ba665SWarner Losh // Bit [5]    : Memory to I/O Translation, _TTP
3260d1ba665SWarner Losh //
3270d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_TRANSLATION          (1 << 5)
3280d1ba665SWarner Losh #define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_STATIC               (0 << 5)
3290d1ba665SWarner Losh 
3300d1ba665SWarner Losh //
3310d1ba665SWarner Losh // IRQ Information
3320d1ba665SWarner Losh // Ref ACPI specification 6.4.2.1
3330d1ba665SWarner Losh //
3340d1ba665SWarner Losh #define EFI_ACPI_IRQ_SHARABLE_MASK                      0x10
3350d1ba665SWarner Losh #define   EFI_ACPI_IRQ_SHARABLE                         0x10
3360d1ba665SWarner Losh 
3370d1ba665SWarner Losh #define EFI_ACPI_IRQ_POLARITY_MASK                      0x08
3380d1ba665SWarner Losh #define   EFI_ACPI_IRQ_HIGH_TRUE                        0x00
3390d1ba665SWarner Losh #define   EFI_ACPI_IRQ_LOW_FALSE                        0x08
3400d1ba665SWarner Losh 
3410d1ba665SWarner Losh #define EFI_ACPI_IRQ_MODE                               0x01
3420d1ba665SWarner Losh #define   EFI_ACPI_IRQ_LEVEL_TRIGGERED                  0x00
3430d1ba665SWarner Losh #define   EFI_ACPI_IRQ_EDGE_TRIGGERED                   0x01
3440d1ba665SWarner Losh 
3450d1ba665SWarner Losh //
3460d1ba665SWarner Losh // DMA Information
3470d1ba665SWarner Losh // Ref ACPI specification 6.4.2.2
3480d1ba665SWarner Losh //
3490d1ba665SWarner Losh #define EFI_ACPI_DMA_SPEED_TYPE_MASK                    0x60
3500d1ba665SWarner Losh #define   EFI_ACPI_DMA_SPEED_TYPE_COMPATIBILITY         0x00
3510d1ba665SWarner Losh #define   EFI_ACPI_DMA_SPEED_TYPE_A                     0x20
3520d1ba665SWarner Losh #define   EFI_ACPI_DMA_SPEED_TYPE_B                     0x40
3530d1ba665SWarner Losh #define   EFI_ACPI_DMA_SPEED_TYPE_F                     0x60
3540d1ba665SWarner Losh 
3550d1ba665SWarner Losh #define EFI_ACPI_DMA_BUS_MASTER_MASK                    0x04
3560d1ba665SWarner Losh #define   EFI_ACPI_DMA_BUS_MASTER                       0x04
3570d1ba665SWarner Losh 
3580d1ba665SWarner Losh #define EFI_ACPI_DMA_TRANSFER_TYPE_MASK                 0x03
3590d1ba665SWarner Losh #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT              0x00
3600d1ba665SWarner Losh #define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT_AND_16_BIT   0x01
3610d1ba665SWarner Losh #define   EFI_ACPI_DMA_TRANSFER_TYPE_16_BIT             0x10
3620d1ba665SWarner Losh 
3630d1ba665SWarner Losh //
3640d1ba665SWarner Losh // IO Information
3650d1ba665SWarner Losh // Ref ACPI specification 6.4.2.5
3660d1ba665SWarner Losh //
3670d1ba665SWarner Losh #define EFI_ACPI_IO_DECODE_MASK                         0x01
3680d1ba665SWarner Losh #define   EFI_ACPI_IO_DECODE_16_BIT                     0x01
3690d1ba665SWarner Losh #define   EFI_ACPI_IO_DECODE_10_BIT                     0x00
3700d1ba665SWarner Losh 
3710d1ba665SWarner Losh //
3720d1ba665SWarner Losh // Memory Information
3730d1ba665SWarner Losh // Ref ACPI specification 6.4.3.4
3740d1ba665SWarner Losh //
3750d1ba665SWarner Losh #define EFI_ACPI_MEMORY_WRITE_STATUS_MASK               0x01
3760d1ba665SWarner Losh #define   EFI_ACPI_MEMORY_WRITABLE                      0x01
3770d1ba665SWarner Losh #define   EFI_ACPI_MEMORY_NON_WRITABLE                  0x00
3780d1ba665SWarner Losh 
3790d1ba665SWarner Losh //
3800d1ba665SWarner Losh // Ensure proper structure formats
3810d1ba665SWarner Losh //
3820d1ba665SWarner Losh #pragma pack(1)
3830d1ba665SWarner Losh //
3840d1ba665SWarner Losh // ACPI 1.0b table structures
3850d1ba665SWarner Losh //
3860d1ba665SWarner Losh 
3870d1ba665SWarner Losh ///
3880d1ba665SWarner Losh /// Root System Description Pointer Structure.
3890d1ba665SWarner Losh ///
3900d1ba665SWarner Losh typedef struct {
3910d1ba665SWarner Losh   UINT64  Signature;
3920d1ba665SWarner Losh   UINT8   Checksum;
3930d1ba665SWarner Losh   UINT8   OemId[6];
3940d1ba665SWarner Losh   UINT8   Reserved;
3950d1ba665SWarner Losh   UINT32  RsdtAddress;
3960d1ba665SWarner Losh } EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER;
3970d1ba665SWarner Losh 
3980d1ba665SWarner Losh //
3990d1ba665SWarner Losh // Root System Description Table
4000d1ba665SWarner Losh // No definition needed as it is a common description table header, the same with
4010d1ba665SWarner Losh // EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
4020d1ba665SWarner Losh //
4030d1ba665SWarner Losh 
4040d1ba665SWarner Losh ///
4050d1ba665SWarner Losh /// RSDT Revision (as defined in ACPI 1.0b specification).
4060d1ba665SWarner Losh ///
4070d1ba665SWarner Losh #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION 0x01
4080d1ba665SWarner Losh 
4090d1ba665SWarner Losh ///
4100d1ba665SWarner Losh /// Fixed ACPI Description Table Structure (FADT).
4110d1ba665SWarner Losh ///
4120d1ba665SWarner Losh typedef struct {
4130d1ba665SWarner Losh   EFI_ACPI_DESCRIPTION_HEADER Header;
4140d1ba665SWarner Losh   UINT32                      FirmwareCtrl;
4150d1ba665SWarner Losh   UINT32                      Dsdt;
4160d1ba665SWarner Losh   UINT8                       IntModel;
4170d1ba665SWarner Losh   UINT8                       Reserved1;
4180d1ba665SWarner Losh   UINT16                      SciInt;
4190d1ba665SWarner Losh   UINT32                      SmiCmd;
4200d1ba665SWarner Losh   UINT8                       AcpiEnable;
4210d1ba665SWarner Losh   UINT8                       AcpiDisable;
4220d1ba665SWarner Losh   UINT8                       S4BiosReq;
4230d1ba665SWarner Losh   UINT8                       Reserved2;
4240d1ba665SWarner Losh   UINT32                      Pm1aEvtBlk;
4250d1ba665SWarner Losh   UINT32                      Pm1bEvtBlk;
4260d1ba665SWarner Losh   UINT32                      Pm1aCntBlk;
4270d1ba665SWarner Losh   UINT32                      Pm1bCntBlk;
4280d1ba665SWarner Losh   UINT32                      Pm2CntBlk;
4290d1ba665SWarner Losh   UINT32                      PmTmrBlk;
4300d1ba665SWarner Losh   UINT32                      Gpe0Blk;
4310d1ba665SWarner Losh   UINT32                      Gpe1Blk;
4320d1ba665SWarner Losh   UINT8                       Pm1EvtLen;
4330d1ba665SWarner Losh   UINT8                       Pm1CntLen;
4340d1ba665SWarner Losh   UINT8                       Pm2CntLen;
4350d1ba665SWarner Losh   UINT8                       PmTmLen;
4360d1ba665SWarner Losh   UINT8                       Gpe0BlkLen;
4370d1ba665SWarner Losh   UINT8                       Gpe1BlkLen;
4380d1ba665SWarner Losh   UINT8                       Gpe1Base;
4390d1ba665SWarner Losh   UINT8                       Reserved3;
4400d1ba665SWarner Losh   UINT16                      PLvl2Lat;
4410d1ba665SWarner Losh   UINT16                      PLvl3Lat;
4420d1ba665SWarner Losh   UINT16                      FlushSize;
4430d1ba665SWarner Losh   UINT16                      FlushStride;
4440d1ba665SWarner Losh   UINT8                       DutyOffset;
4450d1ba665SWarner Losh   UINT8                       DutyWidth;
4460d1ba665SWarner Losh   UINT8                       DayAlrm;
4470d1ba665SWarner Losh   UINT8                       MonAlrm;
4480d1ba665SWarner Losh   UINT8                       Century;
4490d1ba665SWarner Losh   UINT8                       Reserved4;
4500d1ba665SWarner Losh   UINT8                       Reserved5;
4510d1ba665SWarner Losh   UINT8                       Reserved6;
4520d1ba665SWarner Losh   UINT32                      Flags;
4530d1ba665SWarner Losh } EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE;
4540d1ba665SWarner Losh 
4550d1ba665SWarner Losh ///
4560d1ba665SWarner Losh /// FADT Version (as defined in ACPI 1.0b specification).
4570d1ba665SWarner Losh ///
4580d1ba665SWarner Losh #define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x01
4590d1ba665SWarner Losh 
4600d1ba665SWarner Losh #define EFI_ACPI_1_0_INT_MODE_DUAL_PIC         0
4610d1ba665SWarner Losh #define EFI_ACPI_1_0_INT_MODE_MULTIPLE_APIC    1
4620d1ba665SWarner Losh 
4630d1ba665SWarner Losh //
4640d1ba665SWarner Losh // Fixed ACPI Description Table Fixed Feature Flags
4650d1ba665SWarner Losh // All other bits are reserved and must be set to 0.
4660d1ba665SWarner Losh //
4670d1ba665SWarner Losh #define EFI_ACPI_1_0_WBINVD               BIT0
4680d1ba665SWarner Losh #define EFI_ACPI_1_0_WBINVD_FLUSH         BIT1
4690d1ba665SWarner Losh #define EFI_ACPI_1_0_PROC_C1              BIT2
4700d1ba665SWarner Losh #define EFI_ACPI_1_0_P_LVL2_UP            BIT3
4710d1ba665SWarner Losh #define EFI_ACPI_1_0_PWR_BUTTON           BIT4
4720d1ba665SWarner Losh #define EFI_ACPI_1_0_SLP_BUTTON           BIT5
4730d1ba665SWarner Losh #define EFI_ACPI_1_0_FIX_RTC              BIT6
4740d1ba665SWarner Losh #define EFI_ACPI_1_0_RTC_S4               BIT7
4750d1ba665SWarner Losh #define EFI_ACPI_1_0_TMR_VAL_EXT          BIT8
4760d1ba665SWarner Losh #define EFI_ACPI_1_0_DCK_CAP              BIT9
4770d1ba665SWarner Losh 
4780d1ba665SWarner Losh ///
4790d1ba665SWarner Losh /// Firmware ACPI Control Structure.
4800d1ba665SWarner Losh ///
4810d1ba665SWarner Losh typedef struct {
4820d1ba665SWarner Losh   UINT32  Signature;
4830d1ba665SWarner Losh   UINT32  Length;
4840d1ba665SWarner Losh   UINT32  HardwareSignature;
4850d1ba665SWarner Losh   UINT32  FirmwareWakingVector;
4860d1ba665SWarner Losh   UINT32  GlobalLock;
4870d1ba665SWarner Losh   UINT32  Flags;
4880d1ba665SWarner Losh   UINT8   Reserved[40];
4890d1ba665SWarner Losh } EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;
4900d1ba665SWarner Losh 
4910d1ba665SWarner Losh ///
4920d1ba665SWarner Losh /// Firmware Control Structure Feature Flags.
4930d1ba665SWarner Losh /// All other bits are reserved and must be set to 0.
4940d1ba665SWarner Losh ///
4950d1ba665SWarner Losh #define EFI_ACPI_1_0_S4BIOS_F             BIT0
4960d1ba665SWarner Losh 
4970d1ba665SWarner Losh ///
4980d1ba665SWarner Losh /// Multiple APIC Description Table header definition.  The rest of the table
4990d1ba665SWarner Losh /// must be defined in a platform-specific manner.
5000d1ba665SWarner Losh ///
5010d1ba665SWarner Losh typedef struct {
5020d1ba665SWarner Losh   EFI_ACPI_DESCRIPTION_HEADER Header;
5030d1ba665SWarner Losh   UINT32                      LocalApicAddress;
5040d1ba665SWarner Losh   UINT32                      Flags;
5050d1ba665SWarner Losh } EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;
5060d1ba665SWarner Losh 
5070d1ba665SWarner Losh ///
5080d1ba665SWarner Losh /// MADT Revision (as defined in ACPI 1.0b specification).
5090d1ba665SWarner Losh ///
5100d1ba665SWarner Losh #define EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION 0x01
5110d1ba665SWarner Losh 
5120d1ba665SWarner Losh ///
5130d1ba665SWarner Losh /// Multiple APIC Flags
5140d1ba665SWarner Losh /// All other bits are reserved and must be set to 0.
5150d1ba665SWarner Losh ///
5160d1ba665SWarner Losh #define EFI_ACPI_1_0_PCAT_COMPAT           BIT0
5170d1ba665SWarner Losh 
5180d1ba665SWarner Losh //
5190d1ba665SWarner Losh // Multiple APIC Description Table APIC structure types
5200d1ba665SWarner Losh // All other values between 0x05 an 0xFF are reserved and
5210d1ba665SWarner Losh // will be ignored by OSPM.
5220d1ba665SWarner Losh //
5230d1ba665SWarner Losh #define EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC           0x00
5240d1ba665SWarner Losh #define EFI_ACPI_1_0_IO_APIC                        0x01
5250d1ba665SWarner Losh #define EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE      0x02
5260d1ba665SWarner Losh #define EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
5270d1ba665SWarner Losh #define EFI_ACPI_1_0_LOCAL_APIC_NMI                 0x04
5280d1ba665SWarner Losh 
5290d1ba665SWarner Losh //
5300d1ba665SWarner Losh // APIC Structure Definitions
5310d1ba665SWarner Losh //
5320d1ba665SWarner Losh 
5330d1ba665SWarner Losh ///
5340d1ba665SWarner Losh /// Processor Local APIC Structure Definition.
5350d1ba665SWarner Losh ///
5360d1ba665SWarner Losh typedef struct {
5370d1ba665SWarner Losh   UINT8   Type;
5380d1ba665SWarner Losh   UINT8   Length;
5390d1ba665SWarner Losh   UINT8   AcpiProcessorId;
5400d1ba665SWarner Losh   UINT8   ApicId;
5410d1ba665SWarner Losh   UINT32  Flags;
5420d1ba665SWarner Losh } EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE;
5430d1ba665SWarner Losh 
5440d1ba665SWarner Losh ///
5450d1ba665SWarner Losh /// Local APIC Flags.  All other bits are reserved and must be 0.
5460d1ba665SWarner Losh ///
5470d1ba665SWarner Losh #define EFI_ACPI_1_0_LOCAL_APIC_ENABLED      BIT0
5480d1ba665SWarner Losh 
5490d1ba665SWarner Losh ///
5500d1ba665SWarner Losh /// IO APIC Structure.
5510d1ba665SWarner Losh ///
5520d1ba665SWarner Losh typedef struct {
5530d1ba665SWarner Losh   UINT8   Type;
5540d1ba665SWarner Losh   UINT8   Length;
5550d1ba665SWarner Losh   UINT8   IoApicId;
5560d1ba665SWarner Losh   UINT8   Reserved;
5570d1ba665SWarner Losh   UINT32  IoApicAddress;
5580d1ba665SWarner Losh   UINT32  SystemVectorBase;
5590d1ba665SWarner Losh } EFI_ACPI_1_0_IO_APIC_STRUCTURE;
5600d1ba665SWarner Losh 
5610d1ba665SWarner Losh ///
5620d1ba665SWarner Losh /// Interrupt Source Override Structure.
5630d1ba665SWarner Losh ///
5640d1ba665SWarner Losh typedef struct {
5650d1ba665SWarner Losh   UINT8   Type;
5660d1ba665SWarner Losh   UINT8   Length;
5670d1ba665SWarner Losh   UINT8   Bus;
5680d1ba665SWarner Losh   UINT8   Source;
5690d1ba665SWarner Losh   UINT32  GlobalSystemInterruptVector;
5700d1ba665SWarner Losh   UINT16  Flags;
5710d1ba665SWarner Losh } EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;
5720d1ba665SWarner Losh 
5730d1ba665SWarner Losh ///
5740d1ba665SWarner Losh /// Non-Maskable Interrupt Source Structure.
5750d1ba665SWarner Losh ///
5760d1ba665SWarner Losh typedef struct {
5770d1ba665SWarner Losh   UINT8   Type;
5780d1ba665SWarner Losh   UINT8   Length;
5790d1ba665SWarner Losh   UINT16  Flags;
5800d1ba665SWarner Losh   UINT32  GlobalSystemInterruptVector;
5810d1ba665SWarner Losh } EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;
5820d1ba665SWarner Losh 
5830d1ba665SWarner Losh ///
5840d1ba665SWarner Losh /// Local APIC NMI Structure.
5850d1ba665SWarner Losh ///
5860d1ba665SWarner Losh typedef struct {
5870d1ba665SWarner Losh   UINT8   Type;
5880d1ba665SWarner Losh   UINT8   Length;
5890d1ba665SWarner Losh   UINT8   AcpiProcessorId;
5900d1ba665SWarner Losh   UINT16  Flags;
5910d1ba665SWarner Losh   UINT8   LocalApicInti;
5920d1ba665SWarner Losh } EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE;
5930d1ba665SWarner Losh 
5940d1ba665SWarner Losh ///
5950d1ba665SWarner Losh /// Smart Battery Description Table (SBST)
5960d1ba665SWarner Losh ///
5970d1ba665SWarner Losh typedef struct {
5980d1ba665SWarner Losh   EFI_ACPI_DESCRIPTION_HEADER Header;
5990d1ba665SWarner Losh   UINT32                      WarningEnergyLevel;
6000d1ba665SWarner Losh   UINT32                      LowEnergyLevel;
6010d1ba665SWarner Losh   UINT32                      CriticalEnergyLevel;
6020d1ba665SWarner Losh } EFI_ACPI_1_0_SMART_BATTERY_DESCRIPTION_TABLE;
6030d1ba665SWarner Losh 
6040d1ba665SWarner Losh //
6050d1ba665SWarner Losh // Known table signatures
6060d1ba665SWarner Losh //
6070d1ba665SWarner Losh 
6080d1ba665SWarner Losh ///
6090d1ba665SWarner Losh /// "RSD PTR " Root System Description Pointer.
6100d1ba665SWarner Losh ///
6110d1ba665SWarner Losh #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')
6120d1ba665SWarner Losh 
6130d1ba665SWarner Losh ///
6140d1ba665SWarner Losh /// "APIC" Multiple APIC Description Table.
6150d1ba665SWarner Losh ///
6160d1ba665SWarner Losh #define EFI_ACPI_1_0_APIC_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')
6170d1ba665SWarner Losh 
6180d1ba665SWarner Losh ///
6190d1ba665SWarner Losh /// "DSDT" Differentiated System Description Table.
6200d1ba665SWarner Losh ///
6210d1ba665SWarner Losh #define EFI_ACPI_1_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')
6220d1ba665SWarner Losh 
6230d1ba665SWarner Losh ///
6240d1ba665SWarner Losh /// "FACS" Firmware ACPI Control Structure.
6250d1ba665SWarner Losh ///
6260d1ba665SWarner Losh #define EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')
6270d1ba665SWarner Losh 
6280d1ba665SWarner Losh ///
6290d1ba665SWarner Losh /// "FACP" Fixed ACPI Description Table.
6300d1ba665SWarner Losh ///
6310d1ba665SWarner Losh #define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')
6320d1ba665SWarner Losh 
6330d1ba665SWarner Losh ///
6340d1ba665SWarner Losh /// "PSDT" Persistent System Description Table.
6350d1ba665SWarner Losh ///
6360d1ba665SWarner Losh #define EFI_ACPI_1_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')
6370d1ba665SWarner Losh 
6380d1ba665SWarner Losh ///
6390d1ba665SWarner Losh /// "RSDT" Root System Description Table.
6400d1ba665SWarner Losh ///
6410d1ba665SWarner Losh #define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')
6420d1ba665SWarner Losh 
6430d1ba665SWarner Losh ///
6440d1ba665SWarner Losh /// "SBST" Smart Battery Specification Table.
6450d1ba665SWarner Losh ///
6460d1ba665SWarner Losh #define EFI_ACPI_1_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')
6470d1ba665SWarner Losh 
6480d1ba665SWarner Losh ///
6490d1ba665SWarner Losh /// "SSDT" Secondary System Description Table.
6500d1ba665SWarner Losh ///
6510d1ba665SWarner Losh #define EFI_ACPI_1_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')
6520d1ba665SWarner Losh 
6530d1ba665SWarner Losh #pragma pack()
6540d1ba665SWarner Losh 
6550d1ba665SWarner Losh #endif
656