diff options
Diffstat (limited to 'usr/src/uts/intel/sys/acpi/actbl1.h')
| -rw-r--r-- | usr/src/uts/intel/sys/acpi/actbl1.h | 1349 |
1 files changed, 1058 insertions, 291 deletions
diff --git a/usr/src/uts/intel/sys/acpi/actbl1.h b/usr/src/uts/intel/sys/acpi/actbl1.h index 86e38d8d13..021d3e8063 100644 --- a/usr/src/uts/intel/sys/acpi/actbl1.h +++ b/usr/src/uts/intel/sys/acpi/actbl1.h @@ -1,7 +1,7 @@ /****************************************************************************** * * Name: actbl1.h - Additional ACPI table definitions - * $Revision: 1.41 $ + * $Revision: 1.51 $ * *****************************************************************************/ @@ -9,7 +9,7 @@ * * 1. Copyright Notice * - * Some or all of this work - Copyright (c) 1999 - 2006, Intel Corp. + * Some or all of this work - Copyright (c) 1999 - 2008, Intel Corp. * All rights reserved. * * 2. License @@ -133,27 +133,30 @@ * it more difficult to inadvertently type in the wrong signature. */ #define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ +#define ACPI_SIG_BERT "BERT" /* Boot Error Record Table */ #define ACPI_SIG_BOOT "BOOT" /* Simple Boot Flag Table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ +#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ #define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources Table */ +#define ACPI_SIG_EINJ "EINJ" /* Error Injection table */ +#define ACPI_SIG_ERST "ERST" /* Error Record Serialization Table */ +#define ACPI_SIG_HEST "HEST" /* Hardware Error Source Table */ #define ACPI_SIG_HPET "HPET" /* High Precision Event Timer table */ +#define ACPI_SIG_IBFT "IBFT" /* iSCSI Boot Firmware Table */ #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ +#define ACPI_SIG_SLIC "SLIC" /* Software Licensing Description Table */ #define ACPI_SIG_SLIT "SLIT" /* System Locality Distance Information Table */ #define ACPI_SIG_SPCR "SPCR" /* Serial Port Console Redirection table */ #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance table */ +#define ACPI_SIG_UEFI "UEFI" /* Uefi Boot Optimization Table */ +#define ACPI_SIG_WDAT "WDAT" /* Watchdog Action Table */ #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */ -/* Legacy names */ - -#define APIC_SIG "APIC" /* Multiple APIC Description Table */ -#define BOOT_SIG "BOOT" /* Simple Boot Flag Table */ -#define SBST_SIG "SBST" /* Smart Battery Specification Table */ - /* * All tables must be byte-packed to match the ACPI specification, since @@ -168,38 +171,68 @@ */ +/* Common Subtable header (used in MADT, SRAT, etc.) */ + +typedef struct acpi_subtable_header +{ + UINT8 Type; + UINT8 Length; + +} ACPI_SUBTABLE_HEADER; + + +/* Common Subtable header for WHEA tables (EINJ, ERST, WDAT) */ + +typedef struct acpi_whea_header +{ + UINT8 Action; + UINT8 Instruction; + UINT8 Flags; + UINT8 Reserved; + ACPI_GENERIC_ADDRESS RegisterRegion; + UINT64 Value; /* Value used with Read/Write register */ + UINT64 Mask; /* Bitmask required for this register instruction */ + +} ACPI_WHEA_HEADER; + + /******************************************************************************* * * ASF - Alert Standard Format table (Signature "ASF!") * + * Conforms to the Alert Standard Format Specification V2.0, 23 April 2003 + * ******************************************************************************/ typedef struct acpi_table_asf { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ } ACPI_TABLE_ASF; -#define ACPI_ASF_HEADER_DEF \ - UINT8 Type; \ - UINT8 Reserved; \ - UINT16 Length; + +/* ASF subtable header */ typedef struct acpi_asf_header { - ACPI_ASF_HEADER_DEF + UINT8 Type; + UINT8 Reserved; + UINT16 Length; } ACPI_ASF_HEADER; -/* Values for Type field */ +/* Values for Type field above */ -#define ASF_INFO 0 -#define ASF_ALERT 1 -#define ASF_CONTROL 2 -#define ASF_BOOT 3 -#define ASF_ADDRESS 4 -#define ASF_RESERVED 5 +enum AcpiAsfType +{ + ACPI_ASF_TYPE_INFO = 0, + ACPI_ASF_TYPE_ALERT = 1, + ACPI_ASF_TYPE_CONTROL = 2, + ACPI_ASF_TYPE_BOOT = 3, + ACPI_ASF_TYPE_ADDRESS = 4, + ACPI_ASF_TYPE_RESERVED = 5 +}; /* * ASF subtables @@ -209,7 +242,7 @@ typedef struct acpi_asf_header typedef struct acpi_asf_info { - ACPI_ASF_HEADER_DEF + ACPI_ASF_HEADER Header; UINT8 MinResetValue; UINT8 MinPollInterval; UINT16 SystemId; @@ -223,32 +256,56 @@ typedef struct acpi_asf_info typedef struct acpi_asf_alert { - ACPI_ASF_HEADER_DEF + ACPI_ASF_HEADER Header; UINT8 AssertMask; UINT8 DeassertMask; UINT8 Alerts; UINT8 DataLength; - UINT8 Array[1]; } ACPI_ASF_ALERT; +typedef struct acpi_asf_alert_data +{ + UINT8 Address; + UINT8 Command; + UINT8 Mask; + UINT8 Value; + UINT8 SensorType; + UINT8 Type; + UINT8 Offset; + UINT8 SourceType; + UINT8 Severity; + UINT8 SensorNumber; + UINT8 Entity; + UINT8 Instance; + +} ACPI_ASF_ALERT_DATA; + /* 2: ASF Remote Control */ typedef struct acpi_asf_remote { - ACPI_ASF_HEADER_DEF + ACPI_ASF_HEADER Header; UINT8 Controls; UINT8 DataLength; UINT16 Reserved2; - UINT8 Array[1]; } ACPI_ASF_REMOTE; +typedef struct acpi_asf_control_data +{ + UINT8 Function; + UINT8 Address; + UINT8 Command; + UINT8 Value; + +} ACPI_ASF_CONTROL_DATA; + /* 3: ASF RMCP Boot Options */ typedef struct acpi_asf_rmcp { - ACPI_ASF_HEADER_DEF + ACPI_ASF_HEADER Header; UINT8 Capabilities[7]; UINT8 CompletionCode; UINT32 EnterpriseId; @@ -263,23 +320,57 @@ typedef struct acpi_asf_rmcp typedef struct acpi_asf_address { - ACPI_ASF_HEADER_DEF + ACPI_ASF_HEADER Header; UINT8 EpromAddress; UINT8 Devices; - UINT8 SmbusAddresses[1]; } ACPI_ASF_ADDRESS; /******************************************************************************* * + * BERT - Boot Error Record Table + * + ******************************************************************************/ + +typedef struct acpi_table_bert +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 RegionLength; /* Length of the boot error region */ + UINT64 Address; /* Physical addresss of the error region */ + +} ACPI_TABLE_BERT; + + +/* Boot Error Region */ + +typedef struct acpi_bert_region +{ + UINT32 BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataLength; + UINT32 DataLength; + UINT32 ErrorSeverity; + +} ACPI_BERT_REGION; + +/* BlockStatus Flags */ + +#define ACPI_BERT_UNCORRECTABLE (1) +#define ACPI_BERT_CORRECTABLE (2) +#define ACPI_BERT_MULTIPLE_UNCORRECTABLE (4) +#define ACPI_BERT_MULTIPLE_CORRECTABLE (8) + + +/******************************************************************************* + * * BOOT - Simple Boot Flag Table * ******************************************************************************/ typedef struct acpi_table_boot { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 CmosIndex; /* Index in CMOS RAM for the boot register */ UINT8 Reserved[3]; @@ -294,20 +385,21 @@ typedef struct acpi_table_boot typedef struct acpi_table_cpep { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 Reserved; } ACPI_TABLE_CPEP; + /* Subtable */ typedef struct acpi_cpep_polling { UINT8 Type; UINT8 Length; - UINT8 ProcessorId; /* Processor ID */ - UINT8 ProcessorEid; /* Processor EID */ - UINT32 PollingInterval; /* Polling interval (msec) */ + UINT8 Id; /* Processor ID */ + UINT8 Eid; /* Processor EID */ + UINT32 Interval; /* Polling interval (msec) */ } ACPI_CPEP_POLLING; @@ -320,8 +412,8 @@ typedef struct acpi_cpep_polling typedef struct acpi_table_dbgp { - ACPI_TABLE_HEADER_DEF - UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Type; /* 0=full 16550, 1=subset of 16550 */ UINT8 Reserved[3]; ACPI_GENERIC_ADDRESS DebugPort; @@ -330,263 +422,896 @@ typedef struct acpi_table_dbgp /******************************************************************************* * + * DMAR - DMA Remapping table + * From "Intel Virtualization Technology for Directed I/O", Sept. 2007 + * + ******************************************************************************/ + +typedef struct acpi_table_dmar +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Width; /* Host Address Width */ + UINT8 Flags; + UINT8 Reserved[10]; + +} ACPI_TABLE_DMAR; + +/* Flags */ + +#define ACPI_DMAR_INTR_REMAP (1) + +/* DMAR subtable header */ + +typedef struct acpi_dmar_header +{ + UINT16 Type; + UINT16 Length; + +} ACPI_DMAR_HEADER; + +/* Values for subtable type in ACPI_DMAR_HEADER */ + +enum AcpiDmarType +{ + ACPI_DMAR_TYPE_HARDWARE_UNIT = 0, + ACPI_DMAR_TYPE_RESERVED_MEMORY = 1, + ACPI_DMAR_TYPE_ATSR = 2, + ACPI_DMAR_TYPE_RESERVED = 3 /* 3 and greater are reserved */ +}; + +typedef struct acpi_dmar_device_scope +{ + UINT8 EntryType; + UINT8 Length; + UINT16 Reserved; + UINT8 EnumerationId; + UINT8 Bus; + +} ACPI_DMAR_DEVICE_SCOPE; + +/* Values for EntryType in ACPI_DMAR_DEVICE_SCOPE */ + +enum AcpiDmarScopeType +{ + ACPI_DMAR_SCOPE_TYPE_NOT_USED = 0, + ACPI_DMAR_SCOPE_TYPE_ENDPOINT = 1, + ACPI_DMAR_SCOPE_TYPE_BRIDGE = 2, + ACPI_DMAR_SCOPE_TYPE_IOAPIC = 3, + ACPI_DMAR_SCOPE_TYPE_HPET = 4, + ACPI_DMAR_SCOPE_TYPE_RESERVED = 5 /* 5 and greater are reserved */ +}; + +typedef struct acpi_dmar_pci_path +{ + UINT8 Device; + UINT8 Function; + +} ACPI_DMAR_PCI_PATH; + +/* + * DMAR Sub-tables, correspond to Type in ACPI_DMAR_HEADER + */ + +/* 0: Hardware Unit Definition */ + +typedef struct acpi_dmar_hardware_unit +{ + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; + UINT64 Address; /* Register Base Address */ + +} ACPI_DMAR_HARDWARE_UNIT; + +/* Flags */ + +#define ACPI_DMAR_INCLUDE_ALL (1) + +/* 1: Reserved Memory Defininition */ + +typedef struct acpi_dmar_reserved_memory +{ + ACPI_DMAR_HEADER Header; + UINT16 Reserved; + UINT16 Segment; + UINT64 BaseAddress; /* 4K aligned base address */ + UINT64 EndAddress; /* 4K aligned limit address */ + +} ACPI_DMAR_RESERVED_MEMORY; + +/* Flags */ + +#define ACPI_DMAR_ALLOW_ALL (1) + +/* 2: Root Port ATS Capability Reporting Structure */ + +typedef struct acpi_dmar_atsr +{ + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; + +} ACPI_DMAR_ATSR; + +/* Flags */ + +#define ACPI_DMAR_ALL_PORTS (1) + + +/******************************************************************************* + * * ECDT - Embedded Controller Boot Resources Table * ******************************************************************************/ -typedef struct ec_boot_resources +typedef struct acpi_table_ecdt { - ACPI_TABLE_HEADER_DEF - ACPI_GENERIC_ADDRESS EcControl; /* Address of EC command/status register */ - ACPI_GENERIC_ADDRESS EcData; /* Address of EC data register */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + ACPI_GENERIC_ADDRESS Control; /* Address of EC command/status register */ + ACPI_GENERIC_ADDRESS Data; /* Address of EC data register */ UINT32 Uid; /* Unique ID - must be same as the EC _UID method */ - UINT8 GpeBit; /* The GPE for the EC */ - UINT8 EcId[1]; /* Full namepath of the EC in the ACPI namespace */ + UINT8 Gpe; /* The GPE for the EC */ + UINT8 Id[1]; /* Full namepath of the EC in the ACPI namespace */ -} EC_BOOT_RESOURCES; +} ACPI_TABLE_ECDT; /******************************************************************************* * - * HPET - High Precision Event Timer table + * EINJ - Error Injection Table * ******************************************************************************/ -typedef struct acpi_hpet_table +typedef struct acpi_table_einj +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; + UINT32 Reserved; + UINT32 Entries; + +} ACPI_TABLE_EINJ; + +/* EINJ Injection Instruction Entries (actions) */ + +typedef struct acpi_einj_entry +{ + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ + +} ACPI_EINJ_ENTRY; + +/* Values for Action field above */ + +enum AcpiEinjActions +{ + ACPI_EINJ_BEGIN_OPERATION = 0, + ACPI_EINJ_GET_TRIGGER_TABLE = 1, + ACPI_EINJ_SET_ERROR_TYPE = 2, + ACPI_EINJ_GET_ERROR_TYPE = 3, + ACPI_EINJ_END_OPERATION = 4, + ACPI_EINJ_EXECUTE_OPERATION = 5, + ACPI_EINJ_CHECK_BUSY_STATUS = 6, + ACPI_EINJ_GET_COMMAND_STATUS = 7, + ACPI_EINJ_ACTION_RESERVED = 8, /* 8 and greater are reserved */ + ACPI_EINJ_TRIGGER_ERROR = 0xFF /* Except for this value */ +}; + +/* Values for Instruction field above */ + +enum AcpiEinjInstructions { - ACPI_TABLE_HEADER_DEF - UINT32 HardwareId; /* Hardware ID of event timer block */ - ACPI_GENERIC_ADDRESS BaseAddress; /* Address of event timer block */ - UINT8 HpetNumber; /* HPET sequence number */ - UINT16 ClockTick; /* Main counter min tick, periodic mode */ - UINT8 Attributes; + ACPI_EINJ_READ_REGISTER = 0, + ACPI_EINJ_READ_REGISTER_VALUE = 1, + ACPI_EINJ_WRITE_REGISTER = 2, + ACPI_EINJ_WRITE_REGISTER_VALUE = 3, + ACPI_EINJ_NOOP = 4, + ACPI_EINJ_INSTRUCTION_RESERVED = 5 /* 5 and greater are reserved */ +}; -} HPET_TABLE; +/* EINJ Trigger Error Action Table */ -#if 0 /* HPET flags to be converted to macros */ - struct /* Flags (8 bits) */ - { - UINT8 PageProtect :1; /* 00: No page protection */ - UINT8 PageProtect4 :1; /* 01: 4KB page protected */ - UINT8 PageProtect64 :1; /* 02: 64KB page protected */ - UINT8 :5; /* 03-07: Reserved, must be zero */ - } Flags; -#endif +typedef struct acpi_einj_trigger +{ + UINT32 HeaderSize; + UINT32 Revision; + UINT32 TableSize; + UINT32 EntryCount; + +} ACPI_EINJ_TRIGGER; /******************************************************************************* * - * MADT - Multiple APIC Description Table + * ERST - Error Record Serialization Table * ******************************************************************************/ -typedef struct multiple_apic_table +typedef struct acpi_table_erst { - ACPI_TABLE_HEADER_DEF - UINT32 LocalApicAddress; /* Physical address of local APIC */ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; + UINT32 Reserved; + UINT32 Entries; + +} ACPI_TABLE_ERST; + +/* ERST Serialization Entries (actions) */ - /* Flags (32 bits) */ +typedef struct acpi_erst_entry +{ + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ - UINT8 PCATCompat : 1; /* 00: System also has dual 8259s */ - UINT8 : 7; /* 01-07: Reserved, must be zero */ - UINT8 Reserved1[3]; /* 08-31: Reserved, must be zero */ +} ACPI_ERST_ENTRY; -} MULTIPLE_APIC_TABLE; +/* Values for Action field above */ -/* Values for MADT PCATCompat */ +enum AcpiErstActions +{ + ACPI_ERST_BEGIN_WRITE_OPERATION = 0, + ACPI_ERST_BEGIN_READ_OPERATION = 1, + ACPI_ERST_BETGIN_CLEAR_OPERATION= 2, + ACPI_ERST_END_OPERATION = 3, + ACPI_ERST_SET_RECORD_OFFSET = 4, + ACPI_ERST_EXECUTE_OPERATION = 5, + ACPI_ERST_CHECK_BUSY_STATUS = 6, + ACPI_ERST_GET_COMMAND_STATUS = 7, + ACPI_ERST_GET_RECORD_IDENTIFIER = 8, + ACPI_ERST_SET_RECORD_IDENTIFIER = 9, + ACPI_ERST_GET_RECORD_COUNT = 10, + ACPI_ERST_BEGIN_DUMMY_WRIITE = 11, + ACPI_ERST_NOT_USED = 12, + ACPI_ERST_GET_ERROR_RANGE = 13, + ACPI_ERST_GET_ERROR_LENGTH = 14, + ACPI_ERST_GET_ERROR_ATTRIBUTES = 15, + ACPI_ERST_ACTION_RESERVED = 16 /* 16 and greater are reserved */ +}; + +/* Values for Instruction field above */ + +enum AcpiErstInstructions +{ + ACPI_ERST_READ_REGISTER = 0, + ACPI_ERST_READ_REGISTER_VALUE = 1, + ACPI_ERST_WRITE_REGISTER = 2, + ACPI_ERST_WRITE_REGISTER_VALUE = 3, + ACPI_ERST_NOOP = 4, + ACPI_ERST_LOAD_VAR1 = 5, + ACPI_ERST_LOAD_VAR2 = 6, + ACPI_ERST_STORE_VAR1 = 7, + ACPI_ERST_ADD = 8, + ACPI_ERST_SUBTRACT = 9, + ACPI_ERST_ADD_VALUE = 10, + ACPI_ERST_SUBTRACT_VALUE = 11, + ACPI_ERST_STALL = 12, + ACPI_ERST_STALL_WHILE_TRUE = 13, + ACPI_ERST_SKIP_NEXT_IF_TRUE = 14, + ACPI_ERST_GOTO = 15, + ACPI_ERST_SET_SRC_ADDRESS_BASE = 16, + ACPI_ERST_SET_DST_ADDRESS_BASE = 17, + ACPI_ERST_MOVE_DATA = 18, + ACPI_ERST_INSTRUCTION_RESERVED = 19 /* 19 and greater are reserved */ +}; -#define DUAL_PIC 0 -#define MULTIPLE_APIC 1 +/******************************************************************************* + * + * HEST - Hardware Error Source Table + * + ******************************************************************************/ + +typedef struct acpi_table_hest +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 ErrorSourceCount; + +} ACPI_TABLE_HEST; + + +/* HEST subtable header */ + +typedef struct acpi_hest_header +{ + UINT16 Type; -/* Common MADT Sub-table header */ +} ACPI_HEST_HEADER; -#define APIC_HEADER_DEF \ - UINT8 Type; \ + +/* Values for Type field above for subtables */ + +enum AcpiHestTypes +{ + ACPI_HEST_TYPE_XPF_MACHINE_CHECK = 0, + ACPI_HEST_TYPE_XPF_CORRECTED_MACHINE_CHECK = 1, + ACPI_HEST_TYPE_XPF_UNUSED = 2, + ACPI_HEST_TYPE_XPF_NON_MASKABLE_INTERRUPT = 3, + ACPI_HEST_TYPE_IPF_CORRECTED_MACHINE_CHECK = 4, + ACPI_HEST_TYPE_IPF_CORRECTED_PLATFORM_ERROR = 5, + ACPI_HEST_TYPE_AER_ROOT_PORT = 6, + ACPI_HEST_TYPE_AER_ENDPOINT = 7, + ACPI_HEST_TYPE_AER_BRIDGE = 8, + ACPI_HEST_TYPE_GENERIC_HARDWARE_ERROR_SOURCE = 9, + ACPI_HEST_TYPE_RESERVED = 10 /* 10 and greater are reserved */ +}; + + +/* + * HEST Sub-subtables + */ + +/* XPF Machine Check Error Bank */ + +typedef struct acpi_hest_xpf_error_bank +{ + UINT8 BankNumber; + UINT8 ClearStatusOnInit; + UINT8 StatusFormat; + UINT8 ConfigWriteEnable; + UINT32 ControlRegister; + UINT64 ControlInitData; + UINT32 StatusRegister; + UINT32 AddressRegister; + UINT32 MiscRegister; + +} ACPI_HEST_XPF_ERROR_BANK; + + +/* Generic Error Status */ + +typedef struct acpi_hest_generic_status +{ + UINT32 BlockStatus; + UINT32 RawDataOffset; + UINT32 RawDataLength; + UINT32 DataLength; + UINT32 ErrorSeverity; + +} ACPI_HEST_GENERIC_STATUS; + + +/* Generic Error Data */ + +typedef struct acpi_hest_generic_data +{ + UINT8 SectionType[16]; + UINT32 ErrorSeverity; + UINT16 Revision; + UINT8 ValidationBits; + UINT8 Flags; + UINT32 ErrorDataLength; + UINT8 FruId[16]; + UINT8 FruText[20]; + +} ACPI_HEST_GENERIC_DATA; + + +/* Common HEST structure for PCI/AER types below (6,7,8) */ + +typedef struct acpi_hest_aer_common +{ + UINT16 SourceId; + UINT16 ConfigWriteEnable; + UINT8 Flags; + UINT8 Enabled; + UINT32 RecordsToPreAllocate; + UINT32 MaxSectionsPerRecord; + UINT32 Bus; + UINT16 Device; + UINT16 Function; + UINT16 DeviceControl; + UINT16 Reserved; + UINT32 UncorrectableErrorMask; + UINT32 UncorrectableErrorSeverity; + UINT32 CorrectableErrorMask; + UINT32 AdvancedErrorCababilities; + +} ACPI_HEST_AER_COMMON; + + +/* Hardware Error Notification */ + +typedef struct acpi_hest_notify +{ + UINT8 Type; UINT8 Length; + UINT16 ConfigWriteEnable; + UINT32 PollInterval; + UINT32 Vector; + UINT32 PollingThresholdValue; + UINT32 PollingThresholdWindow; + UINT32 ErrorThresholdValue; + UINT32 ErrorThresholdWindow; -typedef struct apic_header +} ACPI_HEST_NOTIFY; + +/* Values for Notify Type field above */ + +enum AcpiHestNotifyTypes { - APIC_HEADER_DEF + ACPI_HEST_NOTIFY_POLLED = 0, + ACPI_HEST_NOTIFY_EXTERNAL = 1, + ACPI_HEST_NOTIFY_LOCAL = 2, + ACPI_HEST_NOTIFY_SCI = 3, + ACPI_HEST_NOTIFY_NMI = 4, + ACPI_HEST_NOTIFY_RESERVED = 5 /* 5 and greater are reserved */ +}; -} APIC_HEADER; -/* Values for Type in APIC_HEADER */ +/* + * HEST subtables + * + * From WHEA Design Document, 16 May 2007. + * Note: There is no subtable type 2 in this version of the document, + * and there are two different subtable type 3s. + */ -#define APIC_PROCESSOR 0 -#define APIC_IO 1 -#define APIC_XRUPT_OVERRIDE 2 -#define APIC_NMI 3 -#define APIC_LOCAL_NMI 4 -#define APIC_ADDRESS_OVERRIDE 5 -#define APIC_IO_SAPIC 6 -#define APIC_LOCAL_SAPIC 7 -#define APIC_XRUPT_SOURCE 8 -#define X2APIC_PROCESSOR 9 -#define X2APIC_LOCAL_NMI 10 -#define APIC_RESERVED 11 /* 11 and greater are reserved */ + /* 0: XPF Machine Check Exception */ +typedef struct acpi_hest_xpf_machine_check +{ + ACPI_HEST_HEADER Header; + UINT16 SourceId; + UINT16 ConfigWriteEnable; + UINT8 Flags; + UINT8 Reserved1; + UINT32 RecordsToPreAllocate; + UINT32 MaxSectionsPerRecord; + UINT64 GlobalCapabilityData; + UINT64 GlobalControlData; + UINT8 NumHardwareBanks; + UINT8 Reserved2[7]; -/* Flag definitions for MADT sub-tables */ +} ACPI_HEST_XPF_MACHINE_CHECK; -#define ACPI_MADT_IFLAGS /* INTI flags (16 bits) */ \ - UINT8 Polarity : 2; /* 00-01: Polarity of APIC I/O input signals */\ - UINT8 TriggerMode : 2; /* 02-03: Trigger mode of APIC input signals */\ - UINT8 : 4; /* 04-07: Reserved, must be zero */\ - UINT8 Reserved1; /* 08-15: Reserved, must be zero */ -#define ACPI_MADT_LFLAGS /* Local Sapic flags (32 bits) */ \ - UINT8 ProcessorEnabled: 1; /* 00: Processor is usable if set */\ - UINT8 : 7; /* 01-07: Reserved, must be zero */\ - UINT8 Reserved2[3]; /* 08-31: Reserved, must be zero */ +/* 1: XPF Corrected Machine Check */ +typedef struct acpi_table_hest_xpf_corrected +{ + ACPI_HEST_HEADER Header; + UINT16 SourceId; + UINT16 ConfigWriteEnable; + UINT8 Flags; + UINT8 Enabled; + UINT32 RecordsToPreAllocate; + UINT32 MaxSectionsPerRecord; + ACPI_HEST_NOTIFY Notify; + UINT8 NumHardwareBanks; + UINT8 Reserved[3]; -/* Values for MPS INTI flags */ +} ACPI_HEST_XPF_CORRECTED; -#define POLARITY_CONFORMS 0 -#define POLARITY_ACTIVE_HIGH 1 -#define POLARITY_RESERVED 2 -#define POLARITY_ACTIVE_LOW 3 -#define TRIGGER_CONFORMS 0 -#define TRIGGER_EDGE 1 -#define TRIGGER_RESERVED 2 -#define TRIGGER_LEVEL 3 +/* 3: XPF Non-Maskable Interrupt */ + +typedef struct acpi_hest_xpf_nmi +{ + ACPI_HEST_HEADER Header; + UINT16 SourceId; + UINT32 Reserved; + UINT32 RecordsToPreAllocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + +} ACPI_HEST_XPF_NMI; + + +/* 4: IPF Corrected Machine Check */ + +typedef struct acpi_hest_ipf_corrected +{ + ACPI_HEST_HEADER Header; + UINT8 Enabled; + UINT8 Reserved; + +} ACPI_HEST_IPF_CORRECTED; + + +/* 5: IPF Corrected Platform Error */ + +typedef struct acpi_hest_ipf_corrected_platform +{ + ACPI_HEST_HEADER Header; + UINT8 Enabled; + UINT8 Reserved; + +} ACPI_HEST_IPF_CORRECTED_PLATFORM; + + +/* 6: PCI Express Root Port AER */ + +typedef struct acpi_hest_aer_root +{ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 RootErrorCommand; + +} ACPI_HEST_AER_ROOT; + + +/* 7: PCI Express AER (AER Endpoint) */ + +typedef struct acpi_hest_aer +{ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + +} ACPI_HEST_AER; + + +/* 8: PCI Express/PCI-X Bridge AER */ + +typedef struct acpi_hest_aer_bridge +{ + ACPI_HEST_HEADER Header; + ACPI_HEST_AER_COMMON Aer; + UINT32 SecondaryUncorrectableErrorMask; + UINT32 SecondaryUncorrectableErrorSeverity; + UINT32 SecondaryAdvancedCapabilities; + +} ACPI_HEST_AER_BRIDGE; + + +/* 9: Generic Hardware Error Source */ + +typedef struct acpi_hest_generic +{ + ACPI_HEST_HEADER Header; + UINT16 SourceId; + UINT16 RelatedSourceId; + UINT8 ConfigWriteEnable; + UINT8 Enabled; + UINT32 RecordsToPreAllocate; + UINT32 MaxSectionsPerRecord; + UINT32 MaxRawDataLength; + ACPI_GENERIC_ADDRESS ErrorStatusAddress; + ACPI_HEST_NOTIFY Notify; + UINT32 ErrorStatusBlockLength; + +} ACPI_HEST_GENERIC; + + +/******************************************************************************* + * + * HPET - High Precision Event Timer table + * + ******************************************************************************/ + +typedef struct acpi_table_hpet +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Id; /* Hardware ID of event timer block */ + ACPI_GENERIC_ADDRESS Address; /* Address of event timer block */ + UINT8 Sequence; /* HPET sequence number */ + UINT16 MinimumTick; /* Main counter min tick, periodic mode */ + UINT8 Flags; + +} ACPI_TABLE_HPET; + +/*! Flags */ + +#define ACPI_HPET_PAGE_PROTECT (1) /* 00: No page protection */ +#define ACPI_HPET_PAGE_PROTECT_4 (1<<1) /* 01: 4KB page protected */ +#define ACPI_HPET_PAGE_PROTECT_64 (1<<2) /* 02: 64KB page protected */ + +/*! [End] no source code translation !*/ + + +/******************************************************************************* + * + * IBFT - Boot Firmware Table + * + ******************************************************************************/ + +typedef struct acpi_table_ibft +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Reserved[12]; + +} ACPI_TABLE_IBFT; + + +/* IBFT common subtable header */ + +typedef struct acpi_ibft_header +{ + UINT8 Type; + UINT8 Version; + UINT16 Length; + UINT8 Index; + UINT8 Flags; + +} ACPI_IBFT_HEADER; + + +/* Values for Type field above */ + +enum AcpiIbftType +{ + ACPI_IBFT_TYPE_NOT_USED = 0, + ACPI_IBFT_TYPE_CONTROL = 1, + ACPI_IBFT_TYPE_INITIATOR = 2, + ACPI_IBFT_TYPE_NIC = 3, + ACPI_IBFT_TYPE_TARGET = 4, + ACPI_IBFT_TYPE_EXTENSIONS = 5, + ACPI_IBFT_TYPE_RESERVED = 6 /* 6 and greater are reserved */ +}; + + +/* IBFT subtables */ + +typedef struct acpi_ibft_control +{ + ACPI_IBFT_HEADER Header; + UINT16 Extensions; + UINT16 InitiatorOffset; + UINT16 Nic0Offset; + UINT16 Target0Offset; + UINT16 Nic1Offset; + UINT16 Target1Offset; + +} ACPI_IBFT_CONTROL; + +typedef struct acpi_ibft_initiator +{ + ACPI_IBFT_HEADER Header; + UINT8 SnsServer[16]; + UINT8 SlpServer[16]; + UINT8 PrimaryServer[16]; + UINT8 SecondaryServer[16]; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_INITIATOR; + +typedef struct acpi_ibft_nic +{ + ACPI_IBFT_HEADER Header; + UINT8 IpAddress[16]; + UINT8 SubnetMaskPrefix; + UINT8 Origin; + UINT8 Gateway[16]; + UINT8 PrimaryDns[16]; + UINT8 SecondaryDns[16]; + UINT8 Dhcp[16]; + UINT16 Vlan; + UINT8 MacAddress[6]; + UINT16 PciAddress; + UINT16 NameLength; + UINT16 NameOffset; + +} ACPI_IBFT_NIC; + +typedef struct acpi_ibft_target +{ + ACPI_IBFT_HEADER Header; + UINT8 TargetIpAddress[16]; + UINT16 TargetIpSocket; + UINT8 TargetBootLun[8]; + UINT8 ChapType; + UINT8 NicAssociation; + UINT16 TargetNameLength; + UINT16 TargetNameOffset; + UINT16 ChapNameLength; + UINT16 ChapNameOffset; + UINT16 ChapSecretLength; + UINT16 ChapSecretOffset; + UINT16 ReverseChapNameLength; + UINT16 ReverseChapNameOffset; + UINT16 ReverseChapSecretLength; + UINT16 ReverseChapSecretOffset; + +} ACPI_IBFT_TARGET; + + +/******************************************************************************* + * + * MADT - Multiple APIC Description Table + * + ******************************************************************************/ + +typedef struct acpi_table_madt +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 Address; /* Physical address of local APIC */ + UINT32 Flags; + +} ACPI_TABLE_MADT; + +/* Flags */ + +#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */ + +/* Values for PCATCompat flag */ + +#define ACPI_MADT_DUAL_PIC 0 +#define ACPI_MADT_MULTIPLE_APIC 1 + + +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ + +enum AcpiMadtType +{ + ACPI_MADT_TYPE_LOCAL_APIC = 0, + ACPI_MADT_TYPE_IO_APIC = 1, + ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2, + ACPI_MADT_TYPE_NMI_SOURCE = 3, + ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4, + ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5, + ACPI_MADT_TYPE_IO_SAPIC = 6, + ACPI_MADT_TYPE_LOCAL_SAPIC = 7, + ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8, + ACPI_MADT_TYPE_LOCAL_X2APIC = 9, + ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10, + ACPI_MADT_TYPE_RESERVED = 11 /* 11 and greater are reserved */ +}; /* - * MADT Sub-tables, correspond to Type in APIC_HEADER + * MADT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER */ -/* 0: processor APIC */ +/* 0: Processor Local APIC */ -typedef struct madt_processor_apic +typedef struct acpi_madt_local_apic { - APIC_HEADER_DEF + ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ - UINT8 LocalApicId; /* Processor's local APIC id */ - ACPI_MADT_LFLAGS + UINT8 Id; /* Processor's local APIC id */ + UINT32 LapicFlags; -} MADT_PROCESSOR_APIC; +} ACPI_MADT_LOCAL_APIC; /* 1: IO APIC */ -typedef struct madt_io_apic +typedef struct acpi_madt_io_apic { - APIC_HEADER_DEF - UINT8 IoApicId; /* I/O APIC ID */ + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O APIC ID */ UINT8 Reserved; /* Reserved - must be zero */ UINT32 Address; /* APIC physical address */ - UINT32 Interrupt; /* Global system interrupt where INTI lines start */ + UINT32 GlobalIrqBase; /* Global system interrupt where INTI lines start */ -} MADT_IO_APIC; +} ACPI_MADT_IO_APIC; /* 2: Interrupt Override */ -typedef struct madt_interrupt_override +typedef struct acpi_madt_interrupt_override { - APIC_HEADER_DEF + ACPI_SUBTABLE_HEADER Header; UINT8 Bus; /* 0 - ISA */ - UINT8 Source; /* Interrupt source (IRQ) */ - UINT32 Interrupt; /* Global system interrupt */ - ACPI_MADT_IFLAGS + UINT8 SourceIrq; /* Interrupt source (IRQ) */ + UINT32 GlobalIrq; /* Global system interrupt */ + UINT16 IntiFlags; -} MADT_INTERRUPT_OVERRIDE; +} ACPI_MADT_INTERRUPT_OVERRIDE; -/* 3: NMI Sources */ +/* 3: NMI Source */ -typedef struct madt_nmi_source +typedef struct acpi_madt_nmi_source { - APIC_HEADER_DEF - ACPI_MADT_IFLAGS - UINT32 Interrupt; /* Global system interrupt */ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 GlobalIrq; /* Global system interrupt */ -} MADT_NMI_SOURCE; +} ACPI_MADT_NMI_SOURCE; /* 4: Local APIC NMI */ -typedef struct madt_local_apic_nmi +typedef struct acpi_madt_local_apic_nmi { - APIC_HEADER_DEF + ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ - ACPI_MADT_IFLAGS + UINT16 IntiFlags; UINT8 Lint; /* LINTn to which NMI is connected */ -} MADT_LOCAL_APIC_NMI; +} ACPI_MADT_LOCAL_APIC_NMI; /* 5: Address Override */ -typedef struct madt_address_override +typedef struct acpi_madt_local_apic_override { - APIC_HEADER_DEF + ACPI_SUBTABLE_HEADER Header; UINT16 Reserved; /* Reserved, must be zero */ UINT64 Address; /* APIC physical address */ -} MADT_ADDRESS_OVERRIDE; +} ACPI_MADT_LOCAL_APIC_OVERRIDE; /* 6: I/O Sapic */ -typedef struct madt_io_sapic +typedef struct acpi_madt_io_sapic { - APIC_HEADER_DEF - UINT8 IoSapicId; /* I/O SAPIC ID */ + ACPI_SUBTABLE_HEADER Header; + UINT8 Id; /* I/O SAPIC ID */ UINT8 Reserved; /* Reserved, must be zero */ - UINT32 InterruptBase; /* Glocal interrupt for SAPIC start */ + UINT32 GlobalIrqBase; /* Global interrupt for SAPIC start */ UINT64 Address; /* SAPIC physical address */ -} MADT_IO_SAPIC; +} ACPI_MADT_IO_SAPIC; /* 7: Local Sapic */ -typedef struct madt_local_sapic +typedef struct acpi_madt_local_sapic { - APIC_HEADER_DEF + ACPI_SUBTABLE_HEADER Header; UINT8 ProcessorId; /* ACPI processor id */ - UINT8 LocalSapicId; /* SAPIC ID */ - UINT8 LocalSapicEid; /* SAPIC EID */ + UINT8 Id; /* SAPIC ID */ + UINT8 Eid; /* SAPIC EID */ UINT8 Reserved[3]; /* Reserved, must be zero */ - ACPI_MADT_LFLAGS - UINT32 ProcessorUID; /* Numeric UID - ACPI 3.0 */ - char ProcessorUIDString[1]; /* String UID - ACPI 3.0 */ + UINT32 LapicFlags; + UINT32 Uid; /* Numeric UID - ACPI 3.0 */ + char UidString[1]; /* String UID - ACPI 3.0 */ -} MADT_LOCAL_SAPIC; +} ACPI_MADT_LOCAL_SAPIC; /* 8: Platform Interrupt Source */ -typedef struct madt_interrupt_source +typedef struct acpi_madt_interrupt_source { - APIC_HEADER_DEF - ACPI_MADT_IFLAGS - UINT8 InterruptType; /* 1=PMI, 2=INIT, 3=corrected */ - UINT8 ProcessorId; /* Processor ID */ - UINT8 ProcessorEid; /* Processor EID */ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT8 Type; /* 1=PMI, 2=INIT, 3=corrected */ + UINT8 Id; /* Processor ID */ + UINT8 Eid; /* Processor EID */ UINT8 IoSapicVector; /* Vector value for PMI interrupts */ - UINT32 Interrupt; /* Global system interrupt */ + UINT32 GlobalIrq; /* Global system interrupt */ UINT32 Flags; /* Interrupt Source Flags */ -} MADT_INTERRUPT_SOURCE; +} ACPI_MADT_INTERRUPT_SOURCE; -/* 9: Processor x2APIC */ +/* Flags field above */ -typedef struct madt_processor_ext_apic +#define ACPI_MADT_CPEI_OVERRIDE (1) + +/* 9: Processor Local X2_APIC (07/2008) */ + +typedef struct acpi_madt_local_x2apic { - APIC_HEADER_DEF - UINT16 Reserved; /* Reserved - must be zero */ - UINT32 X2LocalApicId; /* Processor's x2APIC ID */ - ACPI_MADT_LFLAGS - UINT32 ProcessorUID; /* Extended x2APIC processor ID */ -} MADT_PROCESSOR_X2APIC; + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved - must be zero */ + UINT32 LocalApicId; /* Processor X2_APIC ID */ + UINT32 LapicFlags; + UINT32 Uid; /* Extended X2_APIC processor ID */ + +} ACPI_MADT_LOCAL_X2APIC; -/* 10: Extended X2APIC NMI Structure */ +/* 10: Local X2APIC NMI (07/2008) */ -typedef struct madt_local_x2apic_nmi +typedef struct acpi_madt_local_x2apic_nmi { - APIC_HEADER_DEF - ACPI_MADT_IFLAGS - UINT32 ProcessorUID; /* Processor's x2APIC ID */ - UINT8 Lint; /* LINTn to which NMI is connected */ + ACPI_SUBTABLE_HEADER Header; + UINT16 IntiFlags; + UINT32 Uid; /* Processor X2_APIC ID */ + UINT8 Lint; /* LINTn to which NMI is connected */ UINT8 Reserved[3]; -} MADT_LOCAL_X2APIC_NMI; + +} ACPI_MADT_LOCAL_X2APIC_NMI; + + +/* + * Common flags fields for MADT subtables + */ + +/* MADT Local APIC flags (LapicFlags) */ + +#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */ + +/* MADT MPS INTI flags (IntiFlags) */ + +#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */ +#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */ + +/* Values for MPS INTI flags */ + +#define ACPI_MADT_POLARITY_CONFORMS 0 +#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1 +#define ACPI_MADT_POLARITY_RESERVED 2 +#define ACPI_MADT_POLARITY_ACTIVE_LOW 3 + +#define ACPI_MADT_TRIGGER_CONFORMS (0) +#define ACPI_MADT_TRIGGER_EDGE (1<<2) +#define ACPI_MADT_TRIGGER_RESERVED (2<<2) +#define ACPI_MADT_TRIGGER_LEVEL (3<<2) /******************************************************************************* @@ -597,14 +1322,17 @@ typedef struct madt_local_x2apic_nmi typedef struct acpi_table_mcfg { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Reserved[8]; } ACPI_TABLE_MCFG; + +/* Subtable */ + typedef struct acpi_mcfg_allocation { - UINT64 BaseAddress; /* Base address, processor-relative */ + UINT64 Address; /* Base address, processor-relative */ UINT16 PciSegment; /* PCI segment group number */ UINT8 StartBusNumber; /* Starting PCI Bus number */ UINT8 EndBusNumber; /* Final PCI Bus number */ @@ -619,14 +1347,14 @@ typedef struct acpi_mcfg_allocation * ******************************************************************************/ -typedef struct smart_battery_table +typedef struct acpi_table_sbst { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 WarningLevel; UINT32 LowLevel; UINT32 CriticalLevel; -} SMART_BATTERY_TABLE; +} ACPI_TABLE_SBST; /******************************************************************************* @@ -635,13 +1363,13 @@ typedef struct smart_battery_table * ******************************************************************************/ -typedef struct system_locality_info +typedef struct acpi_table_slit { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT64 LocalityCount; - UINT8 Entry[1][1]; + UINT8 Entry[1]; /* Real size = localities^2 */ -} SYSTEM_LOCALITY_INFO; +} ACPI_TABLE_SLIT; /******************************************************************************* @@ -652,7 +1380,7 @@ typedef struct system_locality_info typedef struct acpi_table_spcr { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 InterfaceType; /* 0=full 16550, 1=subset of 16550 */ UINT8 Reserved[3]; ACPI_GENERIC_ADDRESS SerialPort; @@ -664,7 +1392,7 @@ typedef struct acpi_table_spcr UINT8 StopBits; UINT8 FlowControl; UINT8 TerminalType; - UINT8 Reserved2; + UINT8 Reserved1; UINT16 PciDeviceId; UINT16 PciVendorId; UINT8 PciBus; @@ -672,7 +1400,7 @@ typedef struct acpi_table_spcr UINT8 PciFunction; UINT32 PciFlags; UINT8 PciSegment; - UINT32 Reserved3; + UINT32 Reserved2; } ACPI_TABLE_SPCR; @@ -685,13 +1413,13 @@ typedef struct acpi_table_spcr typedef struct acpi_table_spmi { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT8 Reserved; UINT8 InterfaceType; UINT16 SpecRevision; /* Version of IPMI */ UINT8 InterruptType; UINT8 GpeNumber; /* GPE assigned */ - UINT8 Reserved2; + UINT8 Reserved1; UINT8 PciDeviceFlag; UINT32 Interrupt; ACPI_GENERIC_ADDRESS IpmiRegister; @@ -709,68 +1437,78 @@ typedef struct acpi_table_spmi * ******************************************************************************/ -typedef struct system_resource_affinity +typedef struct acpi_table_srat { - ACPI_TABLE_HEADER_DEF - UINT32 Reserved1; /* Must be value '1' */ - UINT64 Reserved2; /* Reserved, must be zero */ - -} SYSTEM_RESOURCE_AFFINITY; - + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 TableRevision; /* Must be value '1' */ + UINT64 Reserved; /* Reserved, must be zero */ -/* SRAT common sub-table header */ - -#define SRAT_SUBTABLE_HEADER \ - UINT8 Type; \ - UINT8 Length; +} ACPI_TABLE_SRAT; -/* Values for Type above */ +/* Values for subtable type in ACPI_SUBTABLE_HEADER */ -#define SRAT_CPU_AFFINITY 0 -#define SRAT_MEMORY_AFFINITY 1 -#define SRAT_RESERVED 2 +enum AcpiSratType +{ + ACPI_SRAT_TYPE_CPU_AFFINITY = 0, + ACPI_SRAT_TYPE_MEMORY_AFFINITY = 1, + ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY = 2, + ACPI_SRAT_TYPE_RESERVED = 3 /* 3 and greater are reserved */ +}; +/* + * SRAT Sub-tables, correspond to Type in ACPI_SUBTABLE_HEADER + */ -/* SRAT sub-tables */ +/* 0: Processor Local APIC/SAPIC Affinity */ -typedef struct static_resource_alloc +typedef struct acpi_srat_cpu_affinity { - SRAT_SUBTABLE_HEADER + ACPI_SUBTABLE_HEADER Header; UINT8 ProximityDomainLo; UINT8 ApicId; - - /* Flags (32 bits) */ - - UINT8 Enabled :1; /* 00: Use affinity structure */ - UINT8 :7; /* 01-07: Reserved, must be zero */ - UINT8 Reserved3[3]; /* 08-31: Reserved, must be zero */ - + UINT32 Flags; UINT8 LocalSapicEid; UINT8 ProximityDomainHi[3]; - UINT32 Reserved4; /* Reserved, must be zero */ + UINT32 Reserved; /* Reserved, must be zero */ -} STATIC_RESOURCE_ALLOC; +} ACPI_SRAT_CPU_AFFINITY; -typedef struct memory_affinity +/* 1: Memory Affinity */ + +typedef struct acpi_srat_mem_affinity { - SRAT_SUBTABLE_HEADER + ACPI_SUBTABLE_HEADER Header; UINT32 ProximityDomain; - UINT16 Reserved3; + UINT16 Reserved; /* Reserved, must be zero */ UINT64 BaseAddress; - UINT64 AddressLength; - UINT32 Reserved4; + UINT64 Length; + UINT32 Reserved1; + UINT32 Flags; + UINT64 Reserved2; /* Reserved, must be zero */ + +} ACPI_SRAT_MEM_AFFINITY; + +/* Flags */ - /* Flags (32 bits) */ +#define ACPI_SRAT_MEM_ENABLED (1) /* 00: Use affinity structure */ +#define ACPI_SRAT_MEM_HOT_PLUGGABLE (1<<1) /* 01: Memory region is hot pluggable */ +#define ACPI_SRAT_MEM_NON_VOLATILE (1<<2) /* 02: Memory region is non-volatile */ - UINT8 Enabled :1; /* 00: Use affinity structure */ - UINT8 HotPluggable :1; /* 01: Memory region is hot pluggable */ - UINT8 NonVolatile :1; /* 02: Memory is non-volatile */ - UINT8 :5; /* 03-07: Reserved, must be zero */ - UINT8 Reserved5[3]; /* 08-31: Reserved, must be zero */ +/* 2: Processor Local X2_APIC Affinity (07/2008) */ - UINT64 Reserved6; /* Reserved, must be zero */ +typedef struct acpi_srat_x2apic_cpu_affinity +{ + ACPI_SUBTABLE_HEADER Header; + UINT16 Reserved; /* Reserved, must be zero */ + UINT32 ProximityDomain; + UINT32 ApicId; + UINT32 Flags; -} MEMORY_AFFINITY; +} ACPI_SRAT_X2APIC_CPU_AFFINITY; + +/* Flags for ACPI_SRAT_CPU_AFFINITY and ACPI_SRAT_X2APIC_CPU_AFFINITY */ + +#define ACPI_SRAT_CPU_ENABLED (1) /* 00: Use affinity structure */ /******************************************************************************* @@ -781,7 +1519,7 @@ typedef struct memory_affinity typedef struct acpi_table_tcpa { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT16 Reserved; UINT32 MaxLogLength; /* Maximum length for the event log area */ UINT64 LogAddress; /* Address of the event log area */ @@ -791,13 +1529,95 @@ typedef struct acpi_table_tcpa /******************************************************************************* * + * UEFI - UEFI Boot optimization Table + * + ******************************************************************************/ + +typedef struct acpi_table_uefi +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT8 Identifier[16]; /* UUID identifier */ + UINT16 DataOffset; /* Offset of remaining data in table */ + UINT8 Data; + +} ACPI_TABLE_UEFI; + + +/******************************************************************************* + * + * WDAT - Watchdog Action Table + * + ******************************************************************************/ + +typedef struct acpi_table_wdat +{ + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ + UINT32 HeaderLength; /* Watchdog Header Length */ + UINT16 PciSegment; /* PCI Segment number */ + UINT8 PciBus; /* PCI Bus number */ + UINT8 PciDevice; /* PCI Device number */ + UINT8 PciFunction; /* PCI Function number */ + UINT8 Reserved[3]; + UINT32 TimerPeriod; /* Period of one timer count (msec) */ + UINT32 MaxCount; /* Maximum counter value supported */ + UINT32 MinCount; /* Minimum counter value */ + UINT8 Flags; + UINT8 Reserved2[3]; + UINT32 Entries; /* Number of watchdog entries that follow */ + +} ACPI_TABLE_WDAT; + +/* WDAT Instruction Entries (actions) */ + +typedef struct acpi_wdat_entry +{ + ACPI_WHEA_HEADER WheaHeader; /* Common header for WHEA tables */ + +} ACPI_WDAT_ENTRY; + +/* Values for Action field above */ + +enum AcpiWdatActions +{ + ACPI_WDAT_RESET = 1, + ACPI_WDAT_GET_CURRENT_COUNTDOWN = 4, + ACPI_WDAT_GET_COUNTDOWN = 5, + ACPI_WDAT_SET_COUNTDOWN = 6, + ACPI_WDAT_GET_RUNNING_STATE = 8, + ACPI_WDAT_SET_RUNNING_STATE = 9, + ACPI_WDAT_GET_STOPPED_STATE = 10, + ACPI_WDAT_SET_STOPPED_STATE = 11, + ACPI_WDAT_GET_REBOOT = 16, + ACPI_WDAT_SET_REBOOT = 17, + ACPI_WDAT_GET_SHUTDOWN = 18, + ACPI_WDAT_SET_SHUTDOWN = 19, + ACPI_WDAT_GET_STATUS = 32, + ACPI_WDAT_SET_STATUS = 33, + ACPI_WDAT_ACTION_RESERVED = 34 /* 34 and greater are reserved */ +}; + +/* Values for Instruction field above */ + +enum AcpiWdatInstructions +{ + ACPI_WDAT_READ_VALUE = 0, + ACPI_WDAT_READ_COUNTDOWN = 1, + ACPI_WDAT_WRITE_VALUE = 2, + ACPI_WDAT_WRITE_COUNTDOWN = 3, + ACPI_WDAT_INSTRUCTION_RESERVED = 4, /* 4 and greater are reserved */ + ACPI_WDAT_PRESERVE_REGISTER = 0x80 /* Except for this value */ +}; + + +/******************************************************************************* + * * WDRT - Watchdog Resource Table * ******************************************************************************/ typedef struct acpi_table_wdrt { - ACPI_TABLE_HEADER_DEF + ACPI_TABLE_HEADER Header; /* Common ACPI table header */ UINT32 HeaderLength; /* Watchdog Header Length */ UINT8 PciSegment; /* PCI Segment number */ UINT8 PciBus; /* PCI Bus number */ @@ -812,60 +1632,9 @@ typedef struct acpi_table_wdrt } ACPI_TABLE_WDRT; -#if 0 /* Flags, will be converted to macros */ - UINT8 Enabled :1; /* 00: Timer enabled */ - UINT8 :6; /* 01-06: Reserved */ - UINT8 SleepStop :1; /* 07: Timer stopped in sleep state */ -#endif - - -/* Macros used to generate offsets to specific table fields */ - -#define ACPI_ASF0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_ASF_INFO,f) -#define ACPI_ASF1_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_ASF_ALERT,f) -#define ACPI_ASF2_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_ASF_REMOTE,f) -#define ACPI_ASF3_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_ASF_RMCP,f) -#define ACPI_ASF4_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) -#define ACPI_BOOT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_BOOT,f) -#define ACPI_CPEP_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_CPEP,f) -#define ACPI_CPEP0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_CPEP_POLLING,f) -#define ACPI_DBGP_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_DBGP,f) -#define ACPI_ECDT_OFFSET(f) (UINT8) ACPI_OFFSET (EC_BOOT_RESOURCES,f) -#define ACPI_HPET_OFFSET(f) (UINT8) ACPI_OFFSET (HPET_TABLE,f) -#define ACPI_MADT_OFFSET(f) (UINT8) ACPI_OFFSET (MULTIPLE_APIC_TABLE,f) -#define ACPI_MADT0_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_PROCESSOR_APIC,f) -#define ACPI_MADT1_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_IO_APIC,f) -#define ACPI_MADT2_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_INTERRUPT_OVERRIDE,f) -#define ACPI_MADT3_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_NMI_SOURCE,f) -#define ACPI_MADT4_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_LOCAL_APIC_NMI,f) -#define ACPI_MADT5_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_ADDRESS_OVERRIDE,f) -#define ACPI_MADT6_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_IO_SAPIC,f) -#define ACPI_MADT7_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_LOCAL_SAPIC,f) -#define ACPI_MADT8_OFFSET(f) (UINT8) ACPI_OFFSET (MADT_INTERRUPT_SOURCE,f) -#define ACPI_MADTH_OFFSET(f) (UINT8) ACPI_OFFSET (APIC_HEADER,f) -#define ACPI_MCFG_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_MCFG,f) -#define ACPI_MCFG0_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) -#define ACPI_SBST_OFFSET(f) (UINT8) ACPI_OFFSET (SMART_BATTERY_TABLE,f) -#define ACPI_SLIT_OFFSET(f) (UINT8) ACPI_OFFSET (SYSTEM_LOCALITY_INFO,f) -#define ACPI_SPCR_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SPCR,f) -#define ACPI_SPMI_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_SPMI,f) -#define ACPI_SRAT_OFFSET(f) (UINT8) ACPI_OFFSET (SYSTEM_RESOURCE_AFFINITY,f) -#define ACPI_SRAT0_OFFSET(f) (UINT8) ACPI_OFFSET (STATIC_RESOURCE_ALLOC,f) -#define ACPI_SRAT1_OFFSET(f) (UINT8) ACPI_OFFSET (MEMORY_AFFINITY,f) -#define ACPI_TCPA_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_TCPA,f) -#define ACPI_WDRT_OFFSET(f) (UINT8) ACPI_OFFSET (ACPI_TABLE_WDRT,f) - - -#define ACPI_HPET_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (HPET_TABLE,f,o) -#define ACPI_SRAT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (STATIC_RESOURCE_ALLOC,f,o) -#define ACPI_SRAT1_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MEMORY_AFFINITY,f,o) -#define ACPI_MADT_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MULTIPLE_APIC_TABLE,f,o) -#define ACPI_MADT0_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_PROCESSOR_APIC,f,o) -#define ACPI_MADT2_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_INTERRUPT_OVERRIDE,f,o) -#define ACPI_MADT3_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_NMI_SOURCE,f,o) -#define ACPI_MADT4_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_LOCAL_APIC_NMI,f,o) -#define ACPI_MADT7_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_LOCAL_SAPIC,f,o) -#define ACPI_MADT8_FLAG_OFFSET(f,o) ACPI_FLAG_OFFSET (MADT_INTERRUPT_SOURCE,f,o) +/* Flags */ + +#define ACPI_WDRT_TIMER_ENABLED (1) /* 00: Timer enabled */ /* Reset to default packing */ @@ -873,5 +1642,3 @@ typedef struct acpi_table_wdrt #pragma pack() #endif /* __ACTBL1_H__ */ - - |
