Commit 15c5a5e0 authored by Wen Xiong's avatar Wen Xiong Committed by Martin K. Petersen

scsi: ipr: Format HCAM overlay ID 0x41

This patch adds formatting error overlay 0x41 to improve debug
capabilities.
Signed-off-by: default avatarWen Xiong <wenxiong@linux.vnet.ibm.com>
Acked-by: default avatarBrian King <brking@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 7931cd91
...@@ -2412,6 +2412,28 @@ static void ipr_log_sis64_fabric_error(struct ipr_ioa_cfg *ioa_cfg, ...@@ -2412,6 +2412,28 @@ static void ipr_log_sis64_fabric_error(struct ipr_ioa_cfg *ioa_cfg,
ipr_log_hex_data(ioa_cfg, (__be32 *)fabric, add_len); ipr_log_hex_data(ioa_cfg, (__be32 *)fabric, add_len);
} }
/**
* ipr_log_sis64_service_required_error - Log a sis64 service required error.
* @ioa_cfg: ioa config struct
* @hostrcb: hostrcb struct
*
* Return value:
* none
**/
static void ipr_log_sis64_service_required_error(struct ipr_ioa_cfg *ioa_cfg,
struct ipr_hostrcb *hostrcb)
{
struct ipr_hostrcb_type_41_error *error;
error = &hostrcb->hcam.u.error64.u.type_41_error;
error->failure_reason[sizeof(error->failure_reason) - 1] = '\0';
ipr_err("Primary Failure Reason: %s\n", error->failure_reason);
ipr_log_hex_data(ioa_cfg, error->data,
be32_to_cpu(hostrcb->hcam.length) -
(offsetof(struct ipr_hostrcb_error, u) +
offsetof(struct ipr_hostrcb_type_41_error, data)));
}
/** /**
* ipr_log_generic_error - Log an adapter error. * ipr_log_generic_error - Log an adapter error.
* @ioa_cfg: ioa config struct * @ioa_cfg: ioa config struct
...@@ -2587,6 +2609,9 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg, ...@@ -2587,6 +2609,9 @@ static void ipr_handle_log_data(struct ipr_ioa_cfg *ioa_cfg,
case IPR_HOST_RCB_OVERLAY_ID_30: case IPR_HOST_RCB_OVERLAY_ID_30:
ipr_log_sis64_fabric_error(ioa_cfg, hostrcb); ipr_log_sis64_fabric_error(ioa_cfg, hostrcb);
break; break;
case IPR_HOST_RCB_OVERLAY_ID_41:
ipr_log_sis64_service_required_error(ioa_cfg, hostrcb);
break;
case IPR_HOST_RCB_OVERLAY_ID_1: case IPR_HOST_RCB_OVERLAY_ID_1:
case IPR_HOST_RCB_OVERLAY_ID_DEFAULT: case IPR_HOST_RCB_OVERLAY_ID_DEFAULT:
default: default:
......
...@@ -1135,6 +1135,11 @@ struct ipr_hostrcb_type_30_error { ...@@ -1135,6 +1135,11 @@ struct ipr_hostrcb_type_30_error {
struct ipr_hostrcb64_fabric_desc desc[1]; struct ipr_hostrcb64_fabric_desc desc[1];
}__attribute__((packed, aligned (4))); }__attribute__((packed, aligned (4)));
struct ipr_hostrcb_type_41_error {
u8 failure_reason[64];
__be32 data[200];
}__attribute__((packed, aligned (4)));
struct ipr_hostrcb_error { struct ipr_hostrcb_error {
__be32 fd_ioasc; __be32 fd_ioasc;
struct ipr_res_addr fd_res_addr; struct ipr_res_addr fd_res_addr;
...@@ -1173,6 +1178,7 @@ struct ipr_hostrcb64_error { ...@@ -1173,6 +1178,7 @@ struct ipr_hostrcb64_error {
struct ipr_hostrcb_type_23_error type_23_error; struct ipr_hostrcb_type_23_error type_23_error;
struct ipr_hostrcb_type_24_error type_24_error; struct ipr_hostrcb_type_24_error type_24_error;
struct ipr_hostrcb_type_30_error type_30_error; struct ipr_hostrcb_type_30_error type_30_error;
struct ipr_hostrcb_type_41_error type_41_error;
} u; } u;
}__attribute__((packed, aligned (8))); }__attribute__((packed, aligned (8)));
...@@ -1218,6 +1224,7 @@ struct ipr_hcam { ...@@ -1218,6 +1224,7 @@ struct ipr_hcam {
#define IPR_HOST_RCB_OVERLAY_ID_24 0x24 #define IPR_HOST_RCB_OVERLAY_ID_24 0x24
#define IPR_HOST_RCB_OVERLAY_ID_26 0x26 #define IPR_HOST_RCB_OVERLAY_ID_26 0x26
#define IPR_HOST_RCB_OVERLAY_ID_30 0x30 #define IPR_HOST_RCB_OVERLAY_ID_30 0x30
#define IPR_HOST_RCB_OVERLAY_ID_41 0x41
#define IPR_HOST_RCB_OVERLAY_ID_DEFAULT 0xFF #define IPR_HOST_RCB_OVERLAY_ID_DEFAULT 0xFF
u8 reserved1[3]; u8 reserved1[3];
......
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