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