[PATCH 1/3] lib: acpi: Add support for the HEST family of ACPI tables

Colin King colin.king at canonical.com
Mon Jun 15 19:00:38 UTC 2015


From: Colin Ian King <colin.king at canonical.com>

Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
 src/lib/include/fwts_acpi.h | 154 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)

diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index 8fd95af..bc2e0ec 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -888,6 +888,160 @@ typedef struct {
 	uint8_t		reserved3;
 } __attribute__ ((packed)) fwts_acpi_table_spmi;
 
+/*
+ *  Hardware Error Source Table (HEST), ACPI section 18.3.2
+ */
+typedef struct {
+	fwts_acpi_table_header	header;
+	uint32_t	error_source_count;
+} __attribute__ ((packed)) fwts_acpi_table_hest;
+
+/* Section 18.3.2.7, table 18-332 */
+typedef struct {
+	uint8_t		type;
+	uint8_t		length;
+	uint16_t	configuration_write_enable;
+	uint32_t	poll_interval;
+	uint32_t	vector;
+	uint32_t	switch_to_polling_threshold_value;
+	uint32_t	switch_to_polling_threshold_window;
+	uint32_t	error_threshold_value;
+	uint32_t	error_threshold_window;
+} __attribute__ ((packed)) fwts_acpi_table_hest_hardware_error_notification;
+
+/* Section 18.3.2.1.1 IA-32 Architecture Machine Check Bank Structure */
+typedef struct {
+	uint8_t		bank_number;
+	uint8_t		clear_status_on_initialization;
+	uint8_t		status_data_format;
+	uint8_t		reserved;
+	uint32_t	control_register_msr_address;
+	uint64_t	control_init_data;
+	uint32_t	status_register_msr_address;
+	uint32_t	address_register_msr_address;
+	uint32_t	misc_register_msr_address;
+} __attribute__ ((packed)) fwts_acpi_table_hest_machine_check_bank;
+
+/* Section 18.3.2.1 Table 18-322, Type 0x00 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint64_t	global_capability_init_data;
+	uint64_t	global_control_init_data;
+	uint8_t		number_of_hardware_banks;
+	uint8_t		reserved2[7];
+	fwts_acpi_table_hest_machine_check_bank	bank[0];
+} __attribute__ ((packed)) fwts_acpi_table_hest_ia32_machine_check_exception;
+
+/* Section 18.3.2.2 Table 18-324, Type 0x01 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	fwts_acpi_table_hest_hardware_error_notification notification;
+	uint8_t		number_of_hardware_banks;
+	uint8_t		reserved2[3];
+	fwts_acpi_table_hest_machine_check_bank	bank[0];
+} __attribute__ ((packed)) fwts_acpi_table_hest_ia32_corrected_machine_check;
+
+/* Section 18.3.2.2.1, 18-325, Type 0x02 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint32_t	max_raw_data_length;
+} __attribute__ ((packed)) fwts_acpi_table_hest_nmi_error;
+
+/* Section 18.3.2.3, Table 18-326, Type 0x06 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint32_t	bus;
+	uint16_t	device;
+	uint16_t	function;
+	uint16_t	device_control;
+	uint16_t	reserved2;
+	uint32_t	uncorrectable_error_mask;
+	uint32_t	uncorrectable_error_severity;
+	uint32_t	correctable_error_mask;
+	uint32_t	advanced_error_capabilities_and_control;
+	uint32_t	root_error_command;
+} __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_root_port_aer;
+
+/* Section 18.3.2.4, Table 18-327, Type 0x07 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint32_t	bus;
+	uint16_t	device;
+	uint16_t	function;
+	uint16_t	device_control;
+	uint16_t	reserved2;
+	uint32_t	uncorrectable_error_mask;
+	uint32_t	uncorrectable_error_severity;
+	uint32_t	correctable_error_mask;
+	uint32_t	advanced_error_capabilities_and_control;
+} __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_device_aer;
+
+/* Section 18.3.2.5, Table 18-328, Type 0x08 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	reserved1;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint32_t	bus;
+	uint16_t	device;
+	uint16_t	function;
+	uint16_t	device_control;
+	uint16_t	reserved2;
+	uint32_t	uncorrectable_error_mask;
+	uint32_t	uncorrectable_error_severity;
+	uint32_t	correctable_error_mask;
+	uint32_t	advanced_error_capabilities_and_control;
+	uint32_t	secondary_uncorrectable_error_mask;
+	uint32_t	secondary_uncorrectable_error_severity;
+	uint32_t	secondary_advanced_error_capabilities_and_control;
+} __attribute__ ((packed)) fwts_acpi_table_hest_pci_express_bridge_aer;
+
+/* Section 18.3.2.6, Table 18-329, Type 0x09 */
+typedef struct {
+	uint16_t	type;
+	uint16_t	source_id;
+	uint16_t	related_source_id;
+	uint8_t		flags;
+	uint8_t		enabled;
+	uint32_t	number_of_records_to_preallocate;
+	uint32_t	max_sections_per_record;
+	uint32_t	max_raw_data_length;
+	fwts_acpi_gas	error_status_address;
+	fwts_acpi_table_hest_hardware_error_notification notification;
+	uint32_t	error_status_block_length;
+} __attribute__ ((packed)) fwts_acpi_table_hest_generic_hardware_error_source;
+
 void fwts_acpi_table_get_header(fwts_acpi_table_header *hdr, uint8_t *data);
 
 #endif
-- 
2.1.4




More information about the fwts-devel mailing list