Convert some in-line printing of diagnostic into tables.

Sponsored by:	Netflix
This commit is contained in:
Scott Long 2017-09-09 22:02:36 +00:00
parent 618a000b0c
commit 2bf620cb8d
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=323380
6 changed files with 147 additions and 318 deletions

View File

@ -2204,44 +2204,6 @@ mprsas_action_scsiio(struct mprsas_softc *sassc, union ccb *ccb)
return;
}
static void
mpr_response_code(struct mpr_softc *sc, u8 response_code)
{
char *desc;
switch (response_code) {
case MPI2_SCSITASKMGMT_RSP_TM_COMPLETE:
desc = "task management request completed";
break;
case MPI2_SCSITASKMGMT_RSP_INVALID_FRAME:
desc = "invalid frame";
break;
case MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED:
desc = "task management request not supported";
break;
case MPI2_SCSITASKMGMT_RSP_TM_FAILED:
desc = "task management request failed";
break;
case MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED:
desc = "task management request succeeded";
break;
case MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN:
desc = "invalid lun";
break;
case 0xA:
desc = "overlapped tag attempted";
break;
case MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC:
desc = "task queued, however not sent to target";
break;
default:
desc = "unknown";
break;
}
mpr_dprint(sc, MPR_XINFO, "response_code(0x%01x): %s\n", response_code,
desc);
}
/**
* mpr_sc_failed_io_info - translated non-succesfull SCSI_IO request
*/
@ -2257,124 +2219,15 @@ mpr_sc_failed_io_info(struct mpr_softc *sc, struct ccb_scsiio *csio,
u8 scsi_status = mpi_reply->SCSIStatus;
char *desc_ioc_state = NULL;
char *desc_scsi_status = NULL;
char *desc_scsi_state = NULL;
u32 log_info = le32toh(mpi_reply->IOCLogInfo);
if (log_info == 0x31170000)
return;
switch (ioc_status) {
case MPI2_IOCSTATUS_SUCCESS:
desc_ioc_state = "success";
break;
case MPI2_IOCSTATUS_INVALID_FUNCTION:
desc_ioc_state = "invalid function";
break;
case MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR:
desc_ioc_state = "scsi recovered error";
break;
case MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE:
desc_ioc_state = "scsi invalid dev handle";
break;
case MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE:
desc_ioc_state = "scsi device not there";
break;
case MPI2_IOCSTATUS_SCSI_DATA_OVERRUN:
desc_ioc_state = "scsi data overrun";
break;
case MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN:
desc_ioc_state = "scsi data underrun";
break;
case MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR:
desc_ioc_state = "scsi io data error";
break;
case MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR:
desc_ioc_state = "scsi protocol error";
break;
case MPI2_IOCSTATUS_SCSI_TASK_TERMINATED:
desc_ioc_state = "scsi task terminated";
break;
case MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH:
desc_ioc_state = "scsi residual mismatch";
break;
case MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED:
desc_ioc_state = "scsi task mgmt failed";
break;
case MPI2_IOCSTATUS_SCSI_IOC_TERMINATED:
desc_ioc_state = "scsi ioc terminated";
break;
case MPI2_IOCSTATUS_SCSI_EXT_TERMINATED:
desc_ioc_state = "scsi ext terminated";
break;
case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
desc_ioc_state = "eedp guard error";
break;
case MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR:
desc_ioc_state = "eedp ref tag error";
break;
case MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR:
desc_ioc_state = "eedp app tag error";
break;
case MPI2_IOCSTATUS_INSUFFICIENT_POWER:
desc_ioc_state = "insufficient power";
break;
default:
desc_ioc_state = "unknown";
break;
}
switch (scsi_status) {
case MPI2_SCSI_STATUS_GOOD:
desc_scsi_status = "good";
break;
case MPI2_SCSI_STATUS_CHECK_CONDITION:
desc_scsi_status = "check condition";
break;
case MPI2_SCSI_STATUS_CONDITION_MET:
desc_scsi_status = "condition met";
break;
case MPI2_SCSI_STATUS_BUSY:
desc_scsi_status = "busy";
break;
case MPI2_SCSI_STATUS_INTERMEDIATE:
desc_scsi_status = "intermediate";
break;
case MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET:
desc_scsi_status = "intermediate condmet";
break;
case MPI2_SCSI_STATUS_RESERVATION_CONFLICT:
desc_scsi_status = "reservation conflict";
break;
case MPI2_SCSI_STATUS_COMMAND_TERMINATED:
desc_scsi_status = "command terminated";
break;
case MPI2_SCSI_STATUS_TASK_SET_FULL:
desc_scsi_status = "task set full";
break;
case MPI2_SCSI_STATUS_ACA_ACTIVE:
desc_scsi_status = "aca active";
break;
case MPI2_SCSI_STATUS_TASK_ABORTED:
desc_scsi_status = "task aborted";
break;
default:
desc_scsi_status = "unknown";
break;
}
desc_scsi_state = "\0";
if (!scsi_state)
desc_scsi_state = " ";
if (scsi_state & MPI2_SCSI_STATE_RESPONSE_INFO_VALID)
desc_scsi_state = "response info ";
if (scsi_state & MPI2_SCSI_STATE_TERMINATED)
desc_scsi_state = "state terminated ";
if (scsi_state & MPI2_SCSI_STATE_NO_SCSI_STATUS)
desc_scsi_state = "no status ";
if (scsi_state & MPI2_SCSI_STATE_AUTOSENSE_FAILED)
desc_scsi_state = "autosense failed ";
if (scsi_state & MPI2_SCSI_STATE_AUTOSENSE_VALID)
desc_scsi_state = "autosense valid ";
desc_ioc_state = mpr_describe_table(mpr_iocstatus_string,
ioc_status);
desc_scsi_status = mpr_describe_table(mpr_scsi_status_string,
scsi_status);
mpr_dprint(sc, MPR_XINFO, "\thandle(0x%04x), ioc_status(%s)(0x%04x)\n",
le16toh(mpi_reply->DevHandle), desc_ioc_state, ioc_status);
@ -2383,12 +2236,15 @@ mpr_sc_failed_io_info(struct mpr_softc *sc, struct ccb_scsiio *csio,
"connector name (%4s)\n", targ->encl_level, targ->encl_slot,
targ->connector_name);
}
/* We can add more detail about underflow data here
/*
* We can add more detail about underflow data here
* TO-DO
* */
*/
mpr_dprint(sc, MPR_XINFO, "\tscsi_status(%s)(0x%02x), "
"scsi_state(%s)(0x%02x)\n", desc_scsi_status, scsi_status,
desc_scsi_state, scsi_state);
"scsi_state %b\n", desc_scsi_status, scsi_status,
scsi_state, "\20" "\1AutosenseValid" "\2AutosenseFailed"
"\3NoScsiStatus" "\4Terminated" "\5Response InfoValid");
if (sc->mpr_debug & MPR_XINFO &&
scsi_state & MPI2_SCSI_STATE_AUTOSENSE_VALID) {
@ -2400,7 +2256,10 @@ mpr_sc_failed_io_info(struct mpr_softc *sc, struct ccb_scsiio *csio,
if (scsi_state & MPI2_SCSI_STATE_RESPONSE_INFO_VALID) {
response_info = le32toh(mpi_reply->ResponseInfo);
response_bytes = (u8 *)&response_info;
mpr_response_code(sc,response_bytes[0]);
mpr_dprint(sc, MPR_XINFO, "response code(0x%01x): %s\n",
response_bytes[0],
mpr_describe_table(mpr_scsi_taskmgmt_string,
response_bytes[0]));
}
}
@ -2960,10 +2819,10 @@ mprsas_scsiio_complete(struct mpr_softc *sc, struct mpr_command *cm)
*/
mprsas_set_ccbstatus(ccb, CAM_REQ_CMP_ERR);
mpr_dprint(sc, MPR_INFO,
"Controller reported %s target %u SMID %u, loginfo %x\n",
((rep->IOCStatus & MPI2_IOCSTATUS_MASK) ==
MPI2_IOCSTATUS_SCSI_IOC_TERMINATED) ? "IOC_TERMINATED" :
"EXT_TERMINATED", target_id, cm->cm_desc.Default.SMID,
"Controller reported %s tgt %u SMID %u loginfo %x\n",
mpr_describe_table(mpr_iocstatus_string,
le16toh(rep->IOCStatus) & MPI2_IOCSTATUS_MASK),
target_id, cm->cm_desc.Default.SMID,
le32toh(rep->IOCLogInfo));
mpr_dprint(sc, MPR_XINFO,
"SCSIStatus %x SCSIState %x xfercount %u\n",

View File

@ -208,6 +208,57 @@ struct mpr_table_lookup mpr_pcie_linkrate_names[] = {
{"LinkRate Unknown", 0x00}
};
struct mpr_table_lookup mpr_iocstatus_string[] = {
{"success", MPI2_IOCSTATUS_SUCCESS},
{"invalid function", MPI2_IOCSTATUS_INVALID_FUNCTION},
{"scsi recovered error", MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR},
{"scsi invalid dev handle", MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE},
{"scsi device not there", MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE},
{"scsi data overrun", MPI2_IOCSTATUS_SCSI_DATA_OVERRUN},
{"scsi data underrun", MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN},
{"scsi io data error", MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR},
{"scsi protocol error", MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR},
{"scsi task terminated", MPI2_IOCSTATUS_SCSI_TASK_TERMINATED},
{"scsi residual mismatch", MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH},
{"scsi task mgmt failed", MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED},
{"scsi ioc terminated", MPI2_IOCSTATUS_SCSI_IOC_TERMINATED},
{"scsi ext terminated", MPI2_IOCSTATUS_SCSI_EXT_TERMINATED},
{"eedp guard error", MPI2_IOCSTATUS_EEDP_GUARD_ERROR},
{"eedp ref tag error", MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR},
{"eedp app tag error", MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR},
{NULL, 0},
{"unknown", 0x00}
};
struct mpr_table_lookup mpr_scsi_status_string[] = {
{"good", MPI2_SCSI_STATUS_GOOD},
{"check condition", MPI2_SCSI_STATUS_CHECK_CONDITION},
{"condition met", MPI2_SCSI_STATUS_CONDITION_MET},
{"busy", MPI2_SCSI_STATUS_BUSY},
{"intermediate", MPI2_SCSI_STATUS_INTERMEDIATE},
{"intermediate condmet", MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET},
{"reservation conflict", MPI2_SCSI_STATUS_RESERVATION_CONFLICT},
{"command terminated", MPI2_SCSI_STATUS_COMMAND_TERMINATED},
{"task set full", MPI2_SCSI_STATUS_TASK_SET_FULL},
{"aca active", MPI2_SCSI_STATUS_ACA_ACTIVE},
{"task aborted", MPI2_SCSI_STATUS_TASK_ABORTED},
{NULL, 0},
{"unknown", 0x00}
};
struct mpr_table_lookup mpr_scsi_taskmgmt_string[] = {
{"task mgmt request completed", MPI2_SCSITASKMGMT_RSP_TM_COMPLETE},
{"invalid frame", MPI2_SCSITASKMGMT_RSP_INVALID_FRAME},
{"task mgmt request not supp", MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED},
{"task mgmt request failed", MPI2_SCSITASKMGMT_RSP_TM_FAILED},
{"task mgmt request_succeeded", MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED},
{"invalid lun", MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN},
{"overlapped tag attempt", 0xA},
{"task queued on IOC", MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC},
{NULL, 0},
{"unknown", 0x00}
};
void
mpr_describe_devinfo(uint32_t devinfo, char *string, int len)
{

View File

@ -41,6 +41,9 @@ extern struct mpr_table_lookup mpr_event_names[];
extern struct mpr_table_lookup mpr_phystatus_names[];
extern struct mpr_table_lookup mpr_linkrate_names[];
extern struct mpr_table_lookup mpr_pcie_linkrate_names[];
extern struct mpr_table_lookup mpr_iocstatus_string[];
extern struct mpr_table_lookup mpr_scsi_status_string[];
extern struct mpr_table_lookup mpr_scsi_taskmgmt_string[];
void mpr_print_iocfacts(struct mpr_softc *, MPI2_IOC_FACTS_REPLY *);
void mpr_print_portfacts(struct mpr_softc *, MPI2_PORT_FACTS_REPLY *);

View File

@ -1935,43 +1935,6 @@ mpssas_action_scsiio(struct mpssas_softc *sassc, union ccb *ccb)
return;
}
static void
mps_response_code(struct mps_softc *sc, u8 response_code)
{
char *desc;
switch (response_code) {
case MPI2_SCSITASKMGMT_RSP_TM_COMPLETE:
desc = "task management request completed";
break;
case MPI2_SCSITASKMGMT_RSP_INVALID_FRAME:
desc = "invalid frame";
break;
case MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED:
desc = "task management request not supported";
break;
case MPI2_SCSITASKMGMT_RSP_TM_FAILED:
desc = "task management request failed";
break;
case MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED:
desc = "task management request succeeded";
break;
case MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN:
desc = "invalid lun";
break;
case 0xA:
desc = "overlapped tag attempted";
break;
case MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC:
desc = "task queued, however not sent to target";
break;
default:
desc = "unknown";
break;
}
mps_dprint(sc, MPS_XINFO, "response_code(0x%01x): %s\n",
response_code, desc);
}
/**
* mps_sc_failed_io_info - translated non-succesfull SCSI_IO request
*/
@ -1985,132 +1948,28 @@ mps_sc_failed_io_info(struct mps_softc *sc, struct ccb_scsiio *csio,
MPI2_IOCSTATUS_MASK;
u8 scsi_state = mpi_reply->SCSIState;
u8 scsi_status = mpi_reply->SCSIStatus;
char *desc_ioc_state = NULL;
char *desc_scsi_status = NULL;
char *desc_scsi_state = NULL;
u32 log_info = le32toh(mpi_reply->IOCLogInfo);
const char *desc_ioc_state, *desc_scsi_status;
if (log_info == 0x31170000)
return;
switch (ioc_status) {
case MPI2_IOCSTATUS_SUCCESS:
desc_ioc_state = "success";
break;
case MPI2_IOCSTATUS_INVALID_FUNCTION:
desc_ioc_state = "invalid function";
break;
case MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR:
desc_ioc_state = "scsi recovered error";
break;
case MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE:
desc_ioc_state = "scsi invalid dev handle";
break;
case MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE:
desc_ioc_state = "scsi device not there";
break;
case MPI2_IOCSTATUS_SCSI_DATA_OVERRUN:
desc_ioc_state = "scsi data overrun";
break;
case MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN:
desc_ioc_state = "scsi data underrun";
break;
case MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR:
desc_ioc_state = "scsi io data error";
break;
case MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR:
desc_ioc_state = "scsi protocol error";
break;
case MPI2_IOCSTATUS_SCSI_TASK_TERMINATED:
desc_ioc_state = "scsi task terminated";
break;
case MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH:
desc_ioc_state = "scsi residual mismatch";
break;
case MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED:
desc_ioc_state = "scsi task mgmt failed";
break;
case MPI2_IOCSTATUS_SCSI_IOC_TERMINATED:
desc_ioc_state = "scsi ioc terminated";
break;
case MPI2_IOCSTATUS_SCSI_EXT_TERMINATED:
desc_ioc_state = "scsi ext terminated";
break;
case MPI2_IOCSTATUS_EEDP_GUARD_ERROR:
desc_ioc_state = "eedp guard error";
break;
case MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR:
desc_ioc_state = "eedp ref tag error";
break;
case MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR:
desc_ioc_state = "eedp app tag error";
break;
default:
desc_ioc_state = "unknown";
break;
}
switch (scsi_status) {
case MPI2_SCSI_STATUS_GOOD:
desc_scsi_status = "good";
break;
case MPI2_SCSI_STATUS_CHECK_CONDITION:
desc_scsi_status = "check condition";
break;
case MPI2_SCSI_STATUS_CONDITION_MET:
desc_scsi_status = "condition met";
break;
case MPI2_SCSI_STATUS_BUSY:
desc_scsi_status = "busy";
break;
case MPI2_SCSI_STATUS_INTERMEDIATE:
desc_scsi_status = "intermediate";
break;
case MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET:
desc_scsi_status = "intermediate condmet";
break;
case MPI2_SCSI_STATUS_RESERVATION_CONFLICT:
desc_scsi_status = "reservation conflict";
break;
case MPI2_SCSI_STATUS_COMMAND_TERMINATED:
desc_scsi_status = "command terminated";
break;
case MPI2_SCSI_STATUS_TASK_SET_FULL:
desc_scsi_status = "task set full";
break;
case MPI2_SCSI_STATUS_ACA_ACTIVE:
desc_scsi_status = "aca active";
break;
case MPI2_SCSI_STATUS_TASK_ABORTED:
desc_scsi_status = "task aborted";
break;
default:
desc_scsi_status = "unknown";
break;
}
desc_scsi_state = "\0";
if (!scsi_state)
desc_scsi_state = " ";
if (scsi_state & MPI2_SCSI_STATE_RESPONSE_INFO_VALID)
desc_scsi_state = "response info ";
if (scsi_state & MPI2_SCSI_STATE_TERMINATED)
desc_scsi_state = "state terminated ";
if (scsi_state & MPI2_SCSI_STATE_NO_SCSI_STATUS)
desc_scsi_state = "no status ";
if (scsi_state & MPI2_SCSI_STATE_AUTOSENSE_FAILED)
desc_scsi_state = "autosense failed ";
if (scsi_state & MPI2_SCSI_STATE_AUTOSENSE_VALID)
desc_scsi_state = "autosense valid ";
desc_ioc_state = mps_describe_table(mps_iocstatus_string,
ioc_status);
desc_scsi_status = mps_describe_table(mps_scsi_status_string,
scsi_status);
mps_dprint(sc, MPS_XINFO, "\thandle(0x%04x), ioc_status(%s)(0x%04x)\n",
le16toh(mpi_reply->DevHandle), desc_ioc_state, ioc_status);
/* We can add more detail about underflow data here
/*
*We can add more detail about underflow data here
* TO-DO
* */
*/
mps_dprint(sc, MPS_XINFO, "\tscsi_status(%s)(0x%02x), "
"scsi_state(%s)(0x%02x)\n", desc_scsi_status, scsi_status,
desc_scsi_state, scsi_state);
"scsi_state %b\n", desc_scsi_status, scsi_status,
scsi_state, "\20" "\1AutosenseValid" "\2AutosenseFailed"
"\3NoScsiStatus" "\4Terminated" "\5Response InfoValid");
if (sc->mps_debug & MPS_XINFO &&
scsi_state & MPI2_SCSI_STATE_AUTOSENSE_VALID) {
@ -2122,7 +1981,10 @@ mps_sc_failed_io_info(struct mps_softc *sc, struct ccb_scsiio *csio,
if (scsi_state & MPI2_SCSI_STATE_RESPONSE_INFO_VALID) {
response_info = le32toh(mpi_reply->ResponseInfo);
response_bytes = (u8 *)&response_info;
mps_response_code(sc,response_bytes[0]);
mps_dprint(sc, MPS_XINFO, "response code(0x%1x): %s\n",
response_bytes[0],
mps_describe_table(mps_scsi_taskmgmt_string,
response_bytes[0]));
}
}
@ -2490,10 +2352,10 @@ mpssas_scsiio_complete(struct mps_softc *sc, struct mps_command *cm)
*/
mpssas_set_ccbstatus(ccb, CAM_REQ_CMP_ERR);
mps_dprint(sc, MPS_INFO,
"Controller reported %s target %u SMID %u, loginfo %x\n",
((rep->IOCStatus & MPI2_IOCSTATUS_MASK) ==
MPI2_IOCSTATUS_SCSI_IOC_TERMINATED) ? "IOC_TERMINATED" :
"EXT_TERMINATED", target_id, cm->cm_desc.Default.SMID,
"Controller reported %s tgt %u SMID %u loginfo %x\n",
mps_describe_table(mps_iocstatus_string,
le16toh(rep->IOCStatus) & MPI2_IOCSTATUS_MASK),
target_id, cm->cm_desc.Default.SMID,
le32toh(rep->IOCLogInfo));
mps_dprint(sc, MPS_XINFO,
"SCSIStatus %x SCSIState %x xfercount %u\n",

View File

@ -185,6 +185,57 @@ struct mps_table_lookup mps_sasdev_reason[] = {
{"Unknown", 0x00}
};
struct mps_table_lookup mps_iocstatus_string[] = {
{"success", MPI2_IOCSTATUS_SUCCESS},
{"invalid function", MPI2_IOCSTATUS_INVALID_FUNCTION},
{"scsi recovered error", MPI2_IOCSTATUS_SCSI_RECOVERED_ERROR},
{"scsi invalid dev handle", MPI2_IOCSTATUS_SCSI_INVALID_DEVHANDLE},
{"scsi device not there", MPI2_IOCSTATUS_SCSI_DEVICE_NOT_THERE},
{"scsi data overrun", MPI2_IOCSTATUS_SCSI_DATA_OVERRUN},
{"scsi data underrun", MPI2_IOCSTATUS_SCSI_DATA_UNDERRUN},
{"scsi io data error", MPI2_IOCSTATUS_SCSI_IO_DATA_ERROR},
{"scsi protocol error", MPI2_IOCSTATUS_SCSI_PROTOCOL_ERROR},
{"scsi task terminated", MPI2_IOCSTATUS_SCSI_TASK_TERMINATED},
{"scsi residual mismatch", MPI2_IOCSTATUS_SCSI_RESIDUAL_MISMATCH},
{"scsi task mgmt failed", MPI2_IOCSTATUS_SCSI_TASK_MGMT_FAILED},
{"scsi ioc terminated", MPI2_IOCSTATUS_SCSI_IOC_TERMINATED},
{"scsi ext terminated", MPI2_IOCSTATUS_SCSI_EXT_TERMINATED},
{"eedp guard error", MPI2_IOCSTATUS_EEDP_GUARD_ERROR},
{"eedp ref tag error", MPI2_IOCSTATUS_EEDP_REF_TAG_ERROR},
{"eedp app tag error", MPI2_IOCSTATUS_EEDP_APP_TAG_ERROR},
{NULL, 0},
{"unknown", 0x00}
};
struct mps_table_lookup mps_scsi_status_string[] = {
{"good", MPI2_SCSI_STATUS_GOOD},
{"check condition", MPI2_SCSI_STATUS_CHECK_CONDITION},
{"condition met", MPI2_SCSI_STATUS_CONDITION_MET},
{"busy", MPI2_SCSI_STATUS_BUSY},
{"intermediate", MPI2_SCSI_STATUS_INTERMEDIATE},
{"intermediate condmet", MPI2_SCSI_STATUS_INTERMEDIATE_CONDMET},
{"reservation conflict", MPI2_SCSI_STATUS_RESERVATION_CONFLICT},
{"command terminated", MPI2_SCSI_STATUS_COMMAND_TERMINATED},
{"task set full", MPI2_SCSI_STATUS_TASK_SET_FULL},
{"aca active", MPI2_SCSI_STATUS_ACA_ACTIVE},
{"task aborted", MPI2_SCSI_STATUS_TASK_ABORTED},
{NULL, 0},
{"unknown", 0x00}
};
struct mps_table_lookup mps_scsi_taskmgmt_string[] = {
{"task mgmt request completed", MPI2_SCSITASKMGMT_RSP_TM_COMPLETE},
{"invalid frame", MPI2_SCSITASKMGMT_RSP_INVALID_FRAME},
{"task mgmt request not supp", MPI2_SCSITASKMGMT_RSP_TM_NOT_SUPPORTED},
{"task mgmt request failed", MPI2_SCSITASKMGMT_RSP_TM_FAILED},
{"task mgmt request_succeeded", MPI2_SCSITASKMGMT_RSP_TM_SUCCEEDED},
{"invalid lun", MPI2_SCSITASKMGMT_RSP_TM_INVALID_LUN},
{"overlapped tag attempt", 0xA},
{"task queued on IOC", MPI2_SCSITASKMGMT_RSP_IO_QUEUED_ON_IOC},
{NULL, 0},
{"unknown", 0x00}
};
void
mps_describe_devinfo(uint32_t devinfo, char *string, int len)
{

View File

@ -40,6 +40,9 @@ void mps_describe_devinfo(uint32_t devinfo, char *string, int len);
extern struct mps_table_lookup mps_event_names[];
extern struct mps_table_lookup mps_phystatus_names[];
extern struct mps_table_lookup mps_linkrate_names[];
extern struct mps_table_lookup mps_iocstatus_string[];
extern struct mps_table_lookup mps_scsi_status_string[];
extern struct mps_table_lookup mps_scsi_taskmgmt_string[];
void mps_print_iocfacts(struct mps_softc *, MPI2_IOC_FACTS_REPLY *);
void mps_print_portfacts(struct mps_softc *, MPI2_PORT_FACTS_REPLY *);