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