[SCSI] ipr: Add support for logging SAS fabric errors
Adds support for logging SAS fabric errors logged by the ipr firmware. Signed-off-by: Brian King <brking@us.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
9d66bdf81f
commit
49dc6a1818
@@ -737,6 +737,64 @@ struct ipr_hostrcb_type_17_error {
|
||||
u32 data[476];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
struct ipr_hostrcb_config_element {
|
||||
u8 type_status;
|
||||
#define IPR_PATH_CFG_TYPE_MASK 0xF0
|
||||
#define IPR_PATH_CFG_NOT_EXIST 0x00
|
||||
#define IPR_PATH_CFG_IOA_PORT 0x10
|
||||
#define IPR_PATH_CFG_EXP_PORT 0x20
|
||||
#define IPR_PATH_CFG_DEVICE_PORT 0x30
|
||||
#define IPR_PATH_CFG_DEVICE_LUN 0x40
|
||||
|
||||
#define IPR_PATH_CFG_STATUS_MASK 0x0F
|
||||
#define IPR_PATH_CFG_NO_PROB 0x00
|
||||
#define IPR_PATH_CFG_DEGRADED 0x01
|
||||
#define IPR_PATH_CFG_FAILED 0x02
|
||||
#define IPR_PATH_CFG_SUSPECT 0x03
|
||||
#define IPR_PATH_NOT_DETECTED 0x04
|
||||
#define IPR_PATH_INCORRECT_CONN 0x05
|
||||
|
||||
u8 cascaded_expander;
|
||||
u8 phy;
|
||||
u8 link_rate;
|
||||
#define IPR_PHY_LINK_RATE_MASK 0x0F
|
||||
|
||||
__be32 wwid[2];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
struct ipr_hostrcb_fabric_desc {
|
||||
__be16 length;
|
||||
u8 ioa_port;
|
||||
u8 cascaded_expander;
|
||||
u8 phy;
|
||||
u8 path_state;
|
||||
#define IPR_PATH_ACTIVE_MASK 0xC0
|
||||
#define IPR_PATH_NO_INFO 0x00
|
||||
#define IPR_PATH_ACTIVE 0x40
|
||||
#define IPR_PATH_NOT_ACTIVE 0x80
|
||||
|
||||
#define IPR_PATH_STATE_MASK 0x0F
|
||||
#define IPR_PATH_STATE_NO_INFO 0x00
|
||||
#define IPR_PATH_HEALTHY 0x01
|
||||
#define IPR_PATH_DEGRADED 0x02
|
||||
#define IPR_PATH_FAILED 0x03
|
||||
|
||||
__be16 num_entries;
|
||||
struct ipr_hostrcb_config_element elem[1];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
#define for_each_fabric_cfg(fabric, cfg) \
|
||||
for (cfg = (fabric)->elem; \
|
||||
cfg < ((fabric)->elem + be16_to_cpu((fabric)->num_entries)); \
|
||||
cfg++)
|
||||
|
||||
struct ipr_hostrcb_type_20_error {
|
||||
u8 failure_reason[64];
|
||||
u8 reserved[3];
|
||||
u8 num_entries;
|
||||
struct ipr_hostrcb_fabric_desc desc[1];
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
struct ipr_hostrcb_error {
|
||||
__be32 failing_dev_ioasc;
|
||||
struct ipr_res_addr failing_dev_res_addr;
|
||||
@@ -753,6 +811,7 @@ struct ipr_hostrcb_error {
|
||||
struct ipr_hostrcb_type_13_error type_13_error;
|
||||
struct ipr_hostrcb_type_14_error type_14_error;
|
||||
struct ipr_hostrcb_type_17_error type_17_error;
|
||||
struct ipr_hostrcb_type_20_error type_20_error;
|
||||
} u;
|
||||
}__attribute__((packed, aligned (4)));
|
||||
|
||||
@@ -792,6 +851,7 @@ struct ipr_hcam {
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_14 0x14
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_16 0x16
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_17 0x17
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_20 0x20
|
||||
#define IPR_HOST_RCB_OVERLAY_ID_DEFAULT 0xFF
|
||||
|
||||
u8 reserved1[3];
|
||||
@@ -811,6 +871,7 @@ struct ipr_hostrcb {
|
||||
struct ipr_hcam hcam;
|
||||
dma_addr_t hostrcb_dma;
|
||||
struct list_head queue;
|
||||
struct ipr_ioa_cfg *ioa_cfg;
|
||||
};
|
||||
|
||||
/* IPR smart dump table structures */
|
||||
@@ -1289,6 +1350,17 @@ struct ipr_ucode_image_header {
|
||||
} \
|
||||
}
|
||||
|
||||
#define ipr_hcam_err(hostrcb, fmt, ...) \
|
||||
{ \
|
||||
if (ipr_is_device(&(hostrcb)->hcam.u.error.failing_dev_res_addr)) { \
|
||||
ipr_ra_err((hostrcb)->ioa_cfg, \
|
||||
(hostrcb)->hcam.u.error.failing_dev_res_addr, \
|
||||
fmt, ##__VA_ARGS__); \
|
||||
} else { \
|
||||
dev_err(&(hostrcb)->ioa_cfg->pdev->dev, fmt, ##__VA_ARGS__); \
|
||||
} \
|
||||
}
|
||||
|
||||
#define ipr_trace ipr_dbg("%s: %s: Line: %d\n",\
|
||||
__FILE__, __FUNCTION__, __LINE__)
|
||||
|
||||
|
Reference in New Issue
Block a user