/** @file
  ACPI 1.0b definitions from the ACPI Specification, revision 1.0b

Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2020, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/

#ifndef _ACPI_1_0_H_
#define _ACPI_1_0_H_

FILE_LICENCE ( BSD2_PATENT );

#include <ipxe/efi/IndustryStandard/AcpiAml.h>

///
/// Common table header, this prefaces all ACPI tables, including FACS, but
/// excluding the RSD PTR structure.
///
typedef struct {
  UINT32    Signature;
  UINT32    Length;
} EFI_ACPI_COMMON_HEADER;

#pragma pack(1)
///
/// The common ACPI description table header.  This structure prefaces most ACPI tables.
///
typedef struct {
  UINT32    Signature;
  UINT32    Length;
  UINT8     Revision;
  UINT8     Checksum;
  UINT8     OemId[6];
  UINT64    OemTableId;
  UINT32    OemRevision;
  UINT32    CreatorId;
  UINT32    CreatorRevision;
} EFI_ACPI_DESCRIPTION_HEADER;
#pragma pack()

//
// Define for Descriptor
//
#define ACPI_SMALL_ITEM_FLAG  0x00
#define ACPI_LARGE_ITEM_FLAG  0x01

//
// Small Item Descriptor Name
//
#define ACPI_SMALL_IRQ_DESCRIPTOR_NAME              0x04
#define ACPI_SMALL_DMA_DESCRIPTOR_NAME              0x05
#define ACPI_SMALL_START_DEPENDENT_DESCRIPTOR_NAME  0x06
#define ACPI_SMALL_END_DEPENDENT_DESCRIPTOR_NAME    0x07
#define ACPI_SMALL_IO_PORT_DESCRIPTOR_NAME          0x08
#define ACPI_SMALL_FIXED_IO_PORT_DESCRIPTOR_NAME    0x09
#define ACPI_SMALL_VENDOR_DEFINED_DESCRIPTOR_NAME   0x0E
#define ACPI_SMALL_END_TAG_DESCRIPTOR_NAME          0x0F

//
// Large Item Descriptor Name
//
#define ACPI_LARGE_24_BIT_MEMORY_RANGE_DESCRIPTOR_NAME        0x01
#define ACPI_LARGE_VENDOR_DEFINED_DESCRIPTOR_NAME             0x04
#define ACPI_LARGE_32_BIT_MEMORY_RANGE_DESCRIPTOR_NAME        0x05
#define ACPI_LARGE_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR_NAME  0x06
#define ACPI_LARGE_DWORD_ADDRESS_SPACE_DESCRIPTOR_NAME        0x07
#define ACPI_LARGE_WORD_ADDRESS_SPACE_DESCRIPTOR_NAME         0x08
#define ACPI_LARGE_EXTENDED_IRQ_DESCRIPTOR_NAME               0x09
#define ACPI_LARGE_QWORD_ADDRESS_SPACE_DESCRIPTOR_NAME        0x0A

//
// Small Item Descriptor Value
//
#define ACPI_IRQ_NOFLAG_DESCRIPTOR              0x22
#define ACPI_IRQ_DESCRIPTOR                     0x23
#define ACPI_DMA_DESCRIPTOR                     0x2A
#define ACPI_START_DEPENDENT_DESCRIPTOR         0x30
#define ACPI_START_DEPENDENT_EX_DESCRIPTOR      0x31
#define ACPI_END_DEPENDENT_DESCRIPTOR           0x38
#define ACPI_IO_PORT_DESCRIPTOR                 0x47
#define ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR  0x4B
#define ACPI_END_TAG_DESCRIPTOR                 0x79

//
// Large Item Descriptor Value
//
#define ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR        0x81
#define ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR        0x85
#define ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR  0x86
#define ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR        0x87
#define ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR         0x88
#define ACPI_EXTENDED_INTERRUPT_DESCRIPTOR         0x89
#define ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR        0x8A
#define ACPI_ADDRESS_SPACE_DESCRIPTOR              0x8A

//
// Resource Type
//
#define ACPI_ADDRESS_SPACE_TYPE_MEM  0x00
#define ACPI_ADDRESS_SPACE_TYPE_IO   0x01
#define ACPI_ADDRESS_SPACE_TYPE_BUS  0x02

///
/// Power Management Timer frequency is fixed at 3.579545MHz.
///
#define ACPI_TIMER_FREQUENCY  3579545

//
// Ensure proper structure formats
//
#pragma pack(1)

///
/// The common definition of QWORD, DWORD, and WORD
/// Address Space Descriptors.
///
typedef PACKED struct {
  UINT8     Desc;
  UINT16    Len;
  UINT8     ResType;
  UINT8     GenFlag;
  UINT8     SpecificFlag;
  UINT64    AddrSpaceGranularity;
  UINT64    AddrRangeMin;
  UINT64    AddrRangeMax;
  UINT64    AddrTranslationOffset;
  UINT64    AddrLen;
} EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;

typedef PACKED union {
  UINT8    Byte;
  PACKED struct {
    UINT8    Length : 3;
    UINT8    Name   : 4;
    UINT8    Type   : 1;
  } Bits;
} ACPI_SMALL_RESOURCE_HEADER;

typedef PACKED struct {
  PACKED union {
    UINT8    Byte;
    PACKED struct {
      UINT8    Name : 7;
      UINT8    Type : 1;
    } Bits;
  } Header;
  UINT16    Length;
} ACPI_LARGE_RESOURCE_HEADER;

///
/// IRQ Descriptor.
///
typedef PACKED struct {
  ACPI_SMALL_RESOURCE_HEADER    Header;
  UINT16                        Mask;
} EFI_ACPI_IRQ_NOFLAG_DESCRIPTOR;

///
/// IRQ Descriptor.
///
typedef PACKED struct {
  ACPI_SMALL_RESOURCE_HEADER    Header;
  UINT16                        Mask;
  UINT8                         Information;
} EFI_ACPI_IRQ_DESCRIPTOR;

///
/// DMA Descriptor.
///
typedef PACKED struct {
  ACPI_SMALL_RESOURCE_HEADER    Header;
  UINT8                         ChannelMask;
  UINT8                         Information;
} EFI_ACPI_DMA_DESCRIPTOR;

///
/// I/O Port Descriptor
///
typedef PACKED struct {
  ACPI_SMALL_RESOURCE_HEADER    Header;
  UINT8                         Information;
  UINT16                        BaseAddressMin;
  UINT16                        BaseAddressMax;
  UINT8                         Alignment;
  UINT8                         Length;
} EFI_ACPI_IO_PORT_DESCRIPTOR;

///
/// Fixed Location I/O Port Descriptor.
///
typedef PACKED struct {
  ACPI_SMALL_RESOURCE_HEADER    Header;
  UINT16                        BaseAddress;
  UINT8                         Length;
} EFI_ACPI_FIXED_LOCATION_IO_PORT_DESCRIPTOR;

///
/// 24-Bit Memory Range Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         Information;
  UINT16                        BaseAddressMin;
  UINT16                        BaseAddressMax;
  UINT16                        Alignment;
  UINT16                        Length;
} EFI_ACPI_24_BIT_MEMORY_RANGE_DESCRIPTOR;

///
/// 32-Bit Memory Range Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         Information;
  UINT32                        BaseAddressMin;
  UINT32                        BaseAddressMax;
  UINT32                        Alignment;
  UINT32                        Length;
} EFI_ACPI_32_BIT_MEMORY_RANGE_DESCRIPTOR;

///
/// Fixed 32-Bit Fixed Memory Range Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         Information;
  UINT32                        BaseAddress;
  UINT32                        Length;
} EFI_ACPI_32_BIT_FIXED_MEMORY_RANGE_DESCRIPTOR;

///
/// QWORD Address Space Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         ResType;
  UINT8                         GenFlag;
  UINT8                         SpecificFlag;
  UINT64                        AddrSpaceGranularity;
  UINT64                        AddrRangeMin;
  UINT64                        AddrRangeMax;
  UINT64                        AddrTranslationOffset;
  UINT64                        AddrLen;
} EFI_ACPI_QWORD_ADDRESS_SPACE_DESCRIPTOR;

///
/// DWORD Address Space Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         ResType;
  UINT8                         GenFlag;
  UINT8                         SpecificFlag;
  UINT32                        AddrSpaceGranularity;
  UINT32                        AddrRangeMin;
  UINT32                        AddrRangeMax;
  UINT32                        AddrTranslationOffset;
  UINT32                        AddrLen;
} EFI_ACPI_DWORD_ADDRESS_SPACE_DESCRIPTOR;

///
/// WORD Address Space Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         ResType;
  UINT8                         GenFlag;
  UINT8                         SpecificFlag;
  UINT16                        AddrSpaceGranularity;
  UINT16                        AddrRangeMin;
  UINT16                        AddrRangeMax;
  UINT16                        AddrTranslationOffset;
  UINT16                        AddrLen;
} EFI_ACPI_WORD_ADDRESS_SPACE_DESCRIPTOR;

///
/// Extended Interrupt Descriptor
///
typedef PACKED struct {
  ACPI_LARGE_RESOURCE_HEADER    Header;
  UINT8                         InterruptVectorFlags;
  UINT8                         InterruptTableLength;
  UINT32                        InterruptNumber[1];
} EFI_ACPI_EXTENDED_INTERRUPT_DESCRIPTOR;

#pragma pack()

///
/// The End tag identifies an end of resource data.
///
typedef struct {
  UINT8    Desc;
  UINT8    Checksum;
} EFI_ACPI_END_TAG_DESCRIPTOR;

//
// General use definitions
//
#define EFI_ACPI_RESERVED_BYTE   0x00
#define EFI_ACPI_RESERVED_WORD   0x0000
#define EFI_ACPI_RESERVED_DWORD  0x00000000
#define EFI_ACPI_RESERVED_QWORD  0x0000000000000000

//
// Resource Type Specific Flags
// Ref ACPI specification 6.4.3.5.5
//
// Bit [0]    : Write Status, _RW
//
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_WRITE  (1 << 0)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_READ_ONLY   (0 << 0)
//
// Bit [2:1]  : Memory Attributes, _MEM
//
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_NON_CACHEABLE              (0 << 1)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE                  (1 << 1)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_WRITE_COMBINING  (2 << 1)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE     (3 << 1)
//
// Bit [4:3]  : Memory Attributes, _MTP
//
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_MEMORY    (0 << 3)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_RESERVED  (1 << 3)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_ACPI      (2 << 3)
#define EFI_APCI_MEMORY_RESOURCE_SPECIFIC_FLAG_ADDRESS_RANGE_NVS       (3 << 3)
//
// Bit [5]    : Memory to I/O Translation, _TTP
//
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_TRANSLATION  (1 << 5)
#define EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_TYPE_STATIC       (0 << 5)

//
// IRQ Information
// Ref ACPI specification 6.4.2.1
//
#define EFI_ACPI_IRQ_SHARABLE_MASK  0x10
#define   EFI_ACPI_IRQ_SHARABLE     0x10

#define EFI_ACPI_IRQ_POLARITY_MASK  0x08
#define   EFI_ACPI_IRQ_HIGH_TRUE    0x00
#define   EFI_ACPI_IRQ_LOW_FALSE    0x08

#define EFI_ACPI_IRQ_MODE               0x01
#define   EFI_ACPI_IRQ_LEVEL_TRIGGERED  0x00
#define   EFI_ACPI_IRQ_EDGE_TRIGGERED   0x01

//
// DMA Information
// Ref ACPI specification 6.4.2.2
//
#define EFI_ACPI_DMA_SPEED_TYPE_MASK             0x60
#define   EFI_ACPI_DMA_SPEED_TYPE_COMPATIBILITY  0x00
#define   EFI_ACPI_DMA_SPEED_TYPE_A              0x20
#define   EFI_ACPI_DMA_SPEED_TYPE_B              0x40
#define   EFI_ACPI_DMA_SPEED_TYPE_F              0x60

#define EFI_ACPI_DMA_BUS_MASTER_MASK  0x04
#define   EFI_ACPI_DMA_BUS_MASTER     0x04

#define EFI_ACPI_DMA_TRANSFER_TYPE_MASK                0x03
#define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT             0x00
#define   EFI_ACPI_DMA_TRANSFER_TYPE_8_BIT_AND_16_BIT  0x01
#define   EFI_ACPI_DMA_TRANSFER_TYPE_16_BIT            0x02

//
// IO Information
// Ref ACPI specification 6.4.2.5
//
#define EFI_ACPI_IO_DECODE_MASK      0x01
#define   EFI_ACPI_IO_DECODE_16_BIT  0x01
#define   EFI_ACPI_IO_DECODE_10_BIT  0x00

//
// Memory Information
// Ref ACPI specification 6.4.3.4
//
#define EFI_ACPI_MEMORY_WRITE_STATUS_MASK  0x01
#define   EFI_ACPI_MEMORY_WRITABLE         0x01
#define   EFI_ACPI_MEMORY_NON_WRITABLE     0x00

//
// Interrupt Vector Flags definitions for Extended Interrupt Descriptor
// Ref ACPI specification 6.4.3.6
//
#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_PRODUCER_CONSUMER_MASK  BIT0
#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_MODE_MASK               BIT1
#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_POLARITY_MASK           BIT2
#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_SHARABLE_MASK           BIT3
#define EFI_ACPI_EXTENDED_INTERRUPT_FLAG_WAKE_CAPABLITY_MASK     BIT4

//
// Ensure proper structure formats
//
#pragma pack(1)
//
// ACPI 1.0b table structures
//

///
/// Root System Description Pointer Structure.
///
typedef struct {
  UINT64    Signature;
  UINT8     Checksum;
  UINT8     OemId[6];
  UINT8     Reserved;
  UINT32    RsdtAddress;
} EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER;

//
// Root System Description Table
// No definition needed as it is a common description table header, the same with
// EFI_ACPI_DESCRIPTION_HEADER, followed by a variable number of UINT32 table pointers.
//

///
/// RSDT Revision (as defined in ACPI 1.0b specification).
///
#define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_REVISION  0x01

///
/// Fixed ACPI Description Table Structure (FADT).
///
typedef struct {
  EFI_ACPI_DESCRIPTION_HEADER    Header;
  UINT32                         FirmwareCtrl;
  UINT32                         Dsdt;
  UINT8                          IntModel;
  UINT8                          Reserved1;
  UINT16                         SciInt;
  UINT32                         SmiCmd;
  UINT8                          AcpiEnable;
  UINT8                          AcpiDisable;
  UINT8                          S4BiosReq;
  UINT8                          Reserved2;
  UINT32                         Pm1aEvtBlk;
  UINT32                         Pm1bEvtBlk;
  UINT32                         Pm1aCntBlk;
  UINT32                         Pm1bCntBlk;
  UINT32                         Pm2CntBlk;
  UINT32                         PmTmrBlk;
  UINT32                         Gpe0Blk;
  UINT32                         Gpe1Blk;
  UINT8                          Pm1EvtLen;
  UINT8                          Pm1CntLen;
  UINT8                          Pm2CntLen;
  UINT8                          PmTmLen;
  UINT8                          Gpe0BlkLen;
  UINT8                          Gpe1BlkLen;
  UINT8                          Gpe1Base;
  UINT8                          Reserved3;
  UINT16                         PLvl2Lat;
  UINT16                         PLvl3Lat;
  UINT16                         FlushSize;
  UINT16                         FlushStride;
  UINT8                          DutyOffset;
  UINT8                          DutyWidth;
  UINT8                          DayAlrm;
  UINT8                          MonAlrm;
  UINT8                          Century;
  UINT8                          Reserved4;
  UINT8                          Reserved5;
  UINT8                          Reserved6;
  UINT32                         Flags;
} EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE;

///
/// FADT Version (as defined in ACPI 1.0b specification).
///
#define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_REVISION  0x01

#define EFI_ACPI_1_0_INT_MODE_DUAL_PIC       0
#define EFI_ACPI_1_0_INT_MODE_MULTIPLE_APIC  1

//
// Fixed ACPI Description Table Fixed Feature Flags
// All other bits are reserved and must be set to 0.
//
#define EFI_ACPI_1_0_WBINVD        BIT0
#define EFI_ACPI_1_0_WBINVD_FLUSH  BIT1
#define EFI_ACPI_1_0_PROC_C1       BIT2
#define EFI_ACPI_1_0_P_LVL2_UP     BIT3
#define EFI_ACPI_1_0_PWR_BUTTON    BIT4
#define EFI_ACPI_1_0_SLP_BUTTON    BIT5
#define EFI_ACPI_1_0_FIX_RTC       BIT6
#define EFI_ACPI_1_0_RTC_S4        BIT7
#define EFI_ACPI_1_0_TMR_VAL_EXT   BIT8
#define EFI_ACPI_1_0_DCK_CAP       BIT9

///
/// Firmware ACPI Control Structure.
///
typedef struct {
  UINT32    Signature;
  UINT32    Length;
  UINT32    HardwareSignature;
  UINT32    FirmwareWakingVector;
  UINT32    GlobalLock;
  UINT32    Flags;
  UINT8     Reserved[40];
} EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE;

///
/// Firmware Control Structure Feature Flags.
/// All other bits are reserved and must be set to 0.
///
#define EFI_ACPI_1_0_S4BIOS_F  BIT0

///
/// Multiple APIC Description Table header definition.  The rest of the table
/// must be defined in a platform-specific manner.
///
typedef struct {
  EFI_ACPI_DESCRIPTION_HEADER    Header;
  UINT32                         LocalApicAddress;
  UINT32                         Flags;
} EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_HEADER;

///
/// MADT Revision (as defined in ACPI 1.0b specification).
///
#define EFI_ACPI_1_0_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION  0x01

///
/// Multiple APIC Flags
/// All other bits are reserved and must be set to 0.
///
#define EFI_ACPI_1_0_PCAT_COMPAT  BIT0

//
// Multiple APIC Description Table APIC structure types
// All other values between 0x05 an 0xFF are reserved and
// will be ignored by OSPM.
//
#define EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC           0x00
#define EFI_ACPI_1_0_IO_APIC                        0x01
#define EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE      0x02
#define EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE  0x03
#define EFI_ACPI_1_0_LOCAL_APIC_NMI                 0x04

//
// APIC Structure Definitions
//

///
/// Processor Local APIC Structure Definition.
///
typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT8     AcpiProcessorId;
  UINT8     ApicId;
  UINT32    Flags;
} EFI_ACPI_1_0_PROCESSOR_LOCAL_APIC_STRUCTURE;

///
/// Local APIC Flags.  All other bits are reserved and must be 0.
///
#define EFI_ACPI_1_0_LOCAL_APIC_ENABLED  BIT0

///
/// IO APIC Structure.
///
typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT8     IoApicId;
  UINT8     Reserved;
  UINT32    IoApicAddress;
  UINT32    SystemVectorBase;
} EFI_ACPI_1_0_IO_APIC_STRUCTURE;

///
/// Interrupt Source Override Structure.
///
typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT8     Bus;
  UINT8     Source;
  UINT32    GlobalSystemInterruptVector;
  UINT16    Flags;
} EFI_ACPI_1_0_INTERRUPT_SOURCE_OVERRIDE_STRUCTURE;

///
/// Non-Maskable Interrupt Source Structure.
///
typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT16    Flags;
  UINT32    GlobalSystemInterruptVector;
} EFI_ACPI_1_0_NON_MASKABLE_INTERRUPT_SOURCE_STRUCTURE;

///
/// Local APIC NMI Structure.
///
typedef struct {
  UINT8     Type;
  UINT8     Length;
  UINT8     AcpiProcessorId;
  UINT16    Flags;
  UINT8     LocalApicInti;
} EFI_ACPI_1_0_LOCAL_APIC_NMI_STRUCTURE;

///
/// Smart Battery Description Table (SBST)
///
typedef struct {
  EFI_ACPI_DESCRIPTION_HEADER    Header;
  UINT32                         WarningEnergyLevel;
  UINT32                         LowEnergyLevel;
  UINT32                         CriticalEnergyLevel;
} EFI_ACPI_1_0_SMART_BATTERY_DESCRIPTION_TABLE;

//
// Known table signatures
//

///
/// "RSD PTR " Root System Description Pointer.
///
#define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_POINTER_SIGNATURE  SIGNATURE_64('R', 'S', 'D', ' ', 'P', 'T', 'R', ' ')

///
/// "APIC" Multiple APIC Description Table.
///
#define EFI_ACPI_1_0_APIC_SIGNATURE  SIGNATURE_32('A', 'P', 'I', 'C')

///
/// "DSDT" Differentiated System Description Table.
///
#define EFI_ACPI_1_0_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('D', 'S', 'D', 'T')

///
/// "FACS" Firmware ACPI Control Structure.
///
#define EFI_ACPI_1_0_FIRMWARE_ACPI_CONTROL_STRUCTURE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'S')

///
/// "FACP" Fixed ACPI Description Table.
///
#define EFI_ACPI_1_0_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('F', 'A', 'C', 'P')

///
/// "PSDT" Persistent System Description Table.
///
#define EFI_ACPI_1_0_PERSISTENT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('P', 'S', 'D', 'T')

///
/// "RSDT" Root System Description Table.
///
#define EFI_ACPI_1_0_ROOT_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('R', 'S', 'D', 'T')

///
/// "SBST" Smart Battery Specification Table.
///
#define EFI_ACPI_1_0_SMART_BATTERY_SPECIFICATION_TABLE_SIGNATURE  SIGNATURE_32('S', 'B', 'S', 'T')

///
/// "SSDT" Secondary System Description Table.
///
#define EFI_ACPI_1_0_SECONDARY_SYSTEM_DESCRIPTION_TABLE_SIGNATURE  SIGNATURE_32('S', 'S', 'D', 'T')

#pragma pack()

#endif
