Commit 970d9c9e authored by Bob Moore's avatar Bob Moore Committed by Len Brown

ACPICA: Include file support for new ACPI tables

Implemented header file support for new ACPI tables - BERT, ERST,
EINJ, HEST, IBFT, UEFI, WDAT. Disassembler support is forthcoming.
Signed-off-by: default avatarBob Moore <robert.moore@intel.com>
Signed-off-by: default avatarAlexey Starikovskiy <astarikovskiy@suse.de>
Signed-off-by: default avatarLen Brown <len.brown@intel.com>
parent 47c08729
...@@ -58,12 +58,17 @@ ...@@ -58,12 +58,17 @@
* it more difficult to inadvertently type in the wrong signature. * it more difficult to inadvertently type in the wrong signature.
*/ */
#define ACPI_SIG_ASF "ASF!" /* Alert Standard Format table */ #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_BOOT "BOOT" /* Simple Boot Flag Table */
#define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */ #define ACPI_SIG_CPEP "CPEP" /* Corrected Platform Error Polling table */
#define ACPI_SIG_DBGP "DBGP" /* Debug Port table */ #define ACPI_SIG_DBGP "DBGP" /* Debug Port table */
#define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */ #define ACPI_SIG_DMAR "DMAR" /* DMA Remapping table */
#define ACPI_SIG_ECDT "ECDT" /* Embedded Controller Boot Resources 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_HPET "HPET" /* High Precision Event Timer table */
#define ACPI_SIG_IBFT "IBFT" /* i_sCSI Boot Firmware Table */
#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */ #define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */ #define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */
#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */ #define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
...@@ -73,6 +78,8 @@ ...@@ -73,6 +78,8 @@
#define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */ #define ACPI_SIG_SPMI "SPMI" /* Server Platform Management Interface table */
#define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */ #define ACPI_SIG_SRAT "SRAT" /* System Resource Affinity Table */
#define ACPI_SIG_TCPA "TCPA" /* Trusted Computing Platform Alliance 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 */ #define ACPI_SIG_WDRT "WDRT" /* Watchdog Resource Table */
/* /*
...@@ -87,13 +94,25 @@ ...@@ -87,13 +94,25 @@
* portable, so do not use any other bitfield types. * portable, so do not use any other bitfield types.
*/ */
/* Common Sub-table header (used in MADT, SRAT, etc.) */ /* Common Subtable header (used in MADT, SRAT, etc.) */
struct acpi_subtable_header { struct acpi_subtable_header {
u8 type; u8 type;
u8 length; u8 length;
}; };
/* Common Subtable header for WHEA tables (EINJ, ERST, WDAT) */
struct acpi_whea_header {
u8 action;
u8 instruction;
u8 flags;
u8 reserved;
struct acpi_generic_address register_region;
u32 value; /* Value used with Read/Write register */
u32 mask; /* Bitmask required for this register instruction */
};
/******************************************************************************* /*******************************************************************************
* *
* ASF - Alert Standard Format table (Signature "ASF!") * ASF - Alert Standard Format table (Signature "ASF!")
...@@ -203,6 +222,34 @@ struct acpi_asf_address { ...@@ -203,6 +222,34 @@ struct acpi_asf_address {
u8 devices; u8 devices;
}; };
/*******************************************************************************
*
* BERT - Boot Error Record Table
*
******************************************************************************/
struct acpi_table_bert {
struct acpi_table_header header; /* Common ACPI table header */
u32 region_length; /* Length of the boot error region */
u64 address; /* Physical addresss of the error region */
};
struct acpi_bert_region {
u32 block_status;
u32 raw_data_offset;
u32 raw_data_length;
u32 data_length;
u32 error_severity;
u8 error_data[1];
};
/* block_status 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 * BOOT - Simple Boot Flag Table
...@@ -349,6 +396,130 @@ struct acpi_table_ecdt { ...@@ -349,6 +396,130 @@ struct acpi_table_ecdt {
u8 id[1]; /* Full namepath of the EC in the ACPI namespace */ u8 id[1]; /* Full namepath of the EC in the ACPI namespace */
}; };
/*******************************************************************************
*
* EINJ - Error Injection Table
*
******************************************************************************/
struct acpi_table_einj {
struct acpi_table_header header; /* Common ACPI table header */
u32 header_length;
u32 reserved;
u32 entries;
};
/* EINJ Injection Instruction Entries (actions) */
struct acpi_einj_entry {
struct acpi_whea_header whea_header; /* Common header for WHEA tables */
};
/* Values for Action field above */
enum acpi_einj_actions {
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 acpi_einj_instructions {
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 */
};
/*******************************************************************************
*
* ERST - Error Record Serialization Table
*
******************************************************************************/
struct acpi_table_erst {
struct acpi_table_header header; /* Common ACPI table header */
u32 header_length;
u32 reserved;
u32 entries;
};
/* ERST Serialization Entries (actions) */
struct acpi_erst_entry {
struct acpi_whea_header whea_header; /* Common header for WHEA tables */
};
/* Values for Action field above */
enum acpi_erst_actions {
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 acpi_erst_instructions {
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 */
};
/*******************************************************************************
*
* HEST - Hardware Error Source Table
*
******************************************************************************/
struct acpi_table_hest {
struct acpi_table_header header; /* Common ACPI table header */
u32 error_source_count;
};
/* TBD: Need Error Source Descriptor layout */
/******************************************************************************* /*******************************************************************************
* *
* HPET - High Precision Event Timer table * HPET - High Precision Event Timer table
...@@ -372,6 +543,96 @@ struct acpi_table_hpet { ...@@ -372,6 +543,96 @@ struct acpi_table_hpet {
/*! [End] no source code translation !*/ /*! [End] no source code translation !*/
/*******************************************************************************
*
* IBFT - i_sCSI Boot Firmware Table
*
******************************************************************************/
struct acpi_table_ibft {
struct acpi_table_header header; /* Common ACPI table header */
u8 reserved[12];
};
/* IBFT common subtable header */
struct acpi_ibft_header {
u8 type;
u8 version;
u16 length;
u8 index;
u8 flags;
};
/* Values for Type field above */
enum acpi_ibft_type {
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 */
struct acpi_ibft_control {
struct acpi_ibft_header header;
u16 extensions;
u16 initiator_offset;
u16 nic0_offset;
u16 target0_offset;
u16 nic1_offset;
u16 target1_offset;
};
struct acpi_ibft_initiator {
struct acpi_ibft_header header;
u8 sns_server[16];
u8 slp_server[16];
u8 primary_server[16];
u8 secondary_server[16];
u16 name_length;
u16 name_offset;
};
struct acpi_ibft_nic {
struct acpi_ibft_header header;
u8 ip_address[16];
u8 subnet_mask_prefix;
u8 origin;
u8 gateway[16];
u8 primary_dns[16];
u8 secondary_dns[16];
u8 dhcp[16];
u16 vlan;
u8 mac_address[6];
u16 pci_address;
u16 name_length;
u16 name_offset;
};
struct acpi_ibft_target {
struct acpi_ibft_header header;
u8 target_ip_address[16];
u16 target_ip_socket;
u8 target_boot_lun[8];
u8 chap_type;
u8 nic_association;
u16 target_name_length;
u16 target_name_offset;
u16 chap_name_length;
u16 chap_name_offset;
u16 chap_secret_length;
u16 chap_secret_offset;
u16 reverse_chap_name_length;
u16 reverse_chap_name_offset;
u16 reverse_chap_secret_length;
u16 reverse_chap_secret_offset;
};
/******************************************************************************* /*******************************************************************************
* *
* MADT - Multiple APIC Description Table * MADT - Multiple APIC Description Table
...@@ -696,6 +957,78 @@ struct acpi_table_tcpa { ...@@ -696,6 +957,78 @@ struct acpi_table_tcpa {
u64 log_address; /* Address of the event log area */ u64 log_address; /* Address of the event log area */
}; };
/*******************************************************************************
*
* UEFI - UEFI Boot optimization Table
*
******************************************************************************/
struct acpi_table_uefi {
struct acpi_table_header header; /* Common ACPI table header */
u8 identifier[16]; /* UUID identifier */
u16 data_offset; /* Offset of remaining data in table */
u8 data;
};
/*******************************************************************************
*
* WDAT - Watchdog Action Table
*
******************************************************************************/
struct acpi_table_wdat {
struct acpi_table_header header; /* Common ACPI table header */
u32 header_length; /* Watchdog Header Length */
u16 pci_segment; /* PCI Segment number */
u8 pci_bus; /* PCI Bus number */
u8 pci_device; /* PCI Device number */
u8 pci_function; /* PCI Function number */
u8 reserved[3];
u32 timer_period; /* Period of one timer count (msec) */
u32 max_count; /* Maximum counter value supported */
u32 min_count; /* Minimum counter value */
u8 flags;
u8 reserved2[3];
u32 entries; /* Number of watchdog entries that follow */
};
/* WDAT Instruction Entries (actions) */
struct acpi_wdat_entry {
struct acpi_whea_header whea_header; /* Common header for WHEA tables */
};
/* Values for Action field above */
enum acpi_wdat_actions {
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 acpi_wdat_instructions {
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 * WDRT - Watchdog Resource Table
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment