[RFC][PATCH 1/3] Add CPER PCIe error section structure and constants definition

From: Huang Ying
Date: Tue Nov 23 2010 - 20:17:50 EST


On some machine, PCIe error is reported via APEI (ACPI Platform Error
Interface). The error data is passed from firmware to Linux via CPER
PCIe error section structure.

This patch adds CPER PCIe error section structure and constants
definition.

Signed-off-by: Huang Ying <ying.huang@xxxxxxxxx>
---
include/linux/cper.h | 74 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 74 insertions(+)

--- a/include/linux/cper.h
+++ b/include/linux/cper.h
@@ -201,6 +201,67 @@
UUID_LE(0x036F84E1, 0x7F37, 0x428c, 0xA7, 0x9E, 0x57, 0x5F, \
0xDF, 0xAA, 0x84, 0xEC)

+#define CPER_PROC_VALID_TYPE 0x0001
+#define CPER_PROC_VALID_ISA 0x0002
+#define CPER_PROC_VALID_ERROR_TYPE 0x0004
+#define CPER_PROC_VALID_OPERATION 0x0008
+#define CPER_PROC_VALID_FLAGS 0x0010
+#define CPER_PROC_VALID_LEVEL 0x0020
+#define CPER_PROC_VALID_VERSION 0x0040
+#define CPER_PROC_VALID_BRAND_INFO 0x0080
+#define CPER_PROC_VALID_ID 0x0100
+#define CPER_PROC_VALID_TARGET_ADDRESS 0x0200
+#define CPER_PROC_VALID_REQUESTOR_ID 0x0400
+#define CPER_PROC_VALID_RESPONDER_ID 0x0800
+#define CPER_PROC_VALID_IP 0x1000
+
+#define CPER_MEM_VALID_ERROR_STATUS 0x0001
+#define CPER_MEM_VALID_PHYSICAL_ADDRESS 0x0002
+#define CPER_MEM_VALID_PHYSICAL_ADDRESS_MASK 0x0004
+#define CPER_MEM_VALID_NODE 0x0008
+#define CPER_MEM_VALID_CARD 0x0010
+#define CPER_MEM_VALID_MODULE 0x0020
+#define CPER_MEM_VALID_BANK 0x0040
+#define CPER_MEM_VALID_DEVICE 0x0080
+#define CPER_MEM_VALID_ROW 0x0100
+#define CPER_MEM_VALID_COLUMN 0x0200
+#define CPER_MEM_VALID_BIT_POSITION 0x0400
+#define CPER_MEM_VALID_REQUESTOR_ID 0x0800
+#define CPER_MEM_VALID_RESPONDER_ID 0x1000
+#define CPER_MEM_VALID_TARGET_ID 0x2000
+#define CPER_MEM_VALID_ERROR_TYPE 0x4000
+
+#define CPER_PCIE_VALID_PORT_TYPE 0x0001
+#define CPER_PCIE_VALID_VERSION 0x0002
+#define CPER_PCIE_VALID_COMMAND_STATUS 0x0004
+#define CPER_PCIE_VALID_DEVICE_ID 0x0008
+#define CPER_PCIE_VALID_SERIAL_NUMBER 0x0010
+#define CPER_PCIE_VALID_BRIDGE_CONTROL_STATUS 0x0020
+#define CPER_PCIE_VALID_CAPABILITY 0x0040
+#define CPER_PCIE_VALID_AER_INFO 0x0080
+
+#define CPER_PCIE_VERSION_MINOR 0
+#define CPER_PCIE_VERSION_MAJOR 1
+
+#define CPER_PCIE_COMMAND_REG 0
+#define CPER_PCIE_STATUS_REG 1
+
+#define CPER_PCIE_DEVID_VENDOR_ID 0
+#define CPER_PCIE_DEVID_DEVICE_ID 2
+#define CPER_PCIE_DEVID_CLASS_CODE 4
+#define CPER_PCIE_DEVID_FUNC 7
+#define CPER_PCIE_DEVID_DEV 8
+#define CPER_PCIE_DEVID_SEGMENT 9
+#define CPER_PCIE_DEVID_BUS_PRIMARY 11
+#define CPER_PCIE_DEVID_BUS_SECONDARY 12
+#define CPER_PCIE_DEVID_SLOT 13
+
+#define CPER_PCIE_SERIAL_NUMBER_LOW 0
+#define CPER_PCIE_SERIAL_NUMBER_HIGH 1
+
+#define CPER_PCIE_BRIDGE_SECONDARY_STATUS_REG 0
+#define CPER_PCIE_BRIDGE_CONTROL_REG 1
+
/*
* All tables and structs must be byte-packed to match CPER
* specification, since the tables are provided by the system BIOS
@@ -306,6 +367,19 @@ struct cper_sec_mem_err {
__u8 error_type;
};

+struct cper_sec_pcie {
+ __u64 validation_bits;
+ __u32 port_type;
+ __u8 version[4];
+ __u16 command_status[2];
+ __u32 reserved;
+ __u8 device_id[16];
+ __u32 serial_number[2];
+ __u16 bridge_control_status[2];
+ __u8 capability[60];
+ __u8 aer_info[96];
+};
+
/* Reset to default packing */
#pragma pack()

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/