From 3162ca8c32e47f48cd92690bd9efaac133b0ac57 Mon Sep 17 00:00:00 2001 From: mav Date: Fri, 13 Nov 2015 19:47:19 +0000 Subject: [PATCH] MFC r289875: Decode few more response info codes. Though CAM still does not send any requests that would require those. git-svn-id: svn://svn.freebsd.org/base/stable/10@290789 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- sys/dev/isp/isp.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c index 91b6a4f78..ac47b6a12 100644 --- a/sys/dev/isp/isp.c +++ b/sys/dev/isp/isp.c @@ -5443,24 +5443,32 @@ isp_intr(ispsoftc_t *isp, uint16_t isr, uint16_t sema, uint16_t info) if (resp && rlen >= 4 && resp[FCP_RSPNS_CODE_OFFSET] != 0) { const char *ptr; char lb[64]; - const char *rnames[6] = { - "Task Management Function Done", - "Data Length Differs From Burst Length", - "Invalid FCP Cmnd", - "FCP DATA RO mismatch with FCP DATA_XFR_RDY RO", - "Task Management Function Rejected", - "Task Management Function Failed", + const char *rnames[10] = { + "Task Management function complete", + "FCP_DATA length different than FCP_BURST_LEN", + "FCP_CMND fields invalid", + "FCP_DATA parameter mismatch with FCP_DATA_RO", + "Task Management function rejected", + "Task Management function failed", + NULL, + NULL, + "Task Management function succeeded", + "Task Management function incorrect logical unit number", }; - if (resp[FCP_RSPNS_CODE_OFFSET] > 5) { - ISP_SNPRINTF(lb, sizeof lb, "Unknown FCP Response Code 0x%x", resp[FCP_RSPNS_CODE_OFFSET]); + uint8_t code = resp[FCP_RSPNS_CODE_OFFSET]; + if (code >= 10 || rnames[code] == NULL) { + ISP_SNPRINTF(lb, sizeof(lb), + "Unknown FCP Response Code 0x%x", + code); ptr = lb; } else { - ptr = rnames[resp[FCP_RSPNS_CODE_OFFSET]]; + ptr = rnames[code]; } - isp_xs_prt(isp, xs, ISP_LOGWARN, "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", rlen, ptr, XS_CDBP(xs)[0] & 0xff); - if (resp[FCP_RSPNS_CODE_OFFSET] != 0) { + isp_xs_prt(isp, xs, ISP_LOGWARN, + "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", + rlen, ptr, XS_CDBP(xs)[0] & 0xff); + if (code != 0 && code != 8) XS_SETERR(xs, HBA_BOTCH); - } } if (IS_24XX(isp)) { isp_parse_status_24xx(isp, (isp24xx_statusreq_t *)sp, xs, &resid); -- 2.45.2