- int trunc = (iop->dxfer_len > 256) ? 1 : 0;
- pout(" status=0\n");
-
- pout(" Incoming data, len=%d%s:\n", (int)iop->dxfer_len,
- (trunc ? " [only first 256 bytes shown]" : ""));
- dStrHex((char *)iop->dxferp, (trunc ? 256 : iop->dxfer_len) , 1);
+ int trunc;
+ int len = iop->resp_sense_len;
+
+ if ((SCSI_STATUS_CHECK_CONDITION == iop->scsi_status) &&
+ iop->sensep && (len > 3)) {
+ if ((iop->sensep[0] & 0x7f) > 0x71)
+ pout(" status=%x: [desc] sense_key=%x asc=%x ascq=%x\n",
+ iop->scsi_status, iop->sensep[1] & 0xf,
+ iop->sensep[2], iop->sensep[3]);
+ else
+ pout(" status=%x: sense_key=%x asc=%x ascq=%x\n",
+ iop->scsi_status, iop->sensep[2] & 0xf,
+ iop->sensep[12], iop->sensep[13]);
+ if (report > 1) {
+ pout(" >>> Sense buffer, len=%d:\n", len);
+ dStrHex((const char *)iop->sensep, ((len > 252) ? 252 : len) , 1);
+ }
+ } else if (iop->scsi_status)
+ pout(" status=%x\n", iop->scsi_status);
+ if (iop->resid)
+ pout(" dxfer_len=%d, resid=%d\n", iop->dxfer_len, iop->resid);
+ if (report > 1) {
+ len = iop->dxfer_len - iop->resid;
+ if (len > 0) {
+ trunc = (len > 256) ? 1 : 0;
+ pout(" Incoming data, len=%d%s:\n", len,
+ (trunc ? " [only first 256 bytes shown]" : ""));
+ dStrHex((char *)iop->dxferp, (trunc ? 256 : len) , 1);
+ }
+ }