@@ -173,7 +173,6 @@
#define SET_RES_TARGET(who,tgt) { who &= ~RES_TARGET; who |= (int)(tgt); }
#define SET_RES_TARGET_LNX(who,tgt) { who &= ~RES_TARGET_LNX; who |= (int)(tgt) << 1; }
#define SET_RES_MSG(who,msg) { who &= ~RES_ENDMSG; who |= (int)(msg) << 8; }
-#define SET_RES_DID(who,did) { who &= ~RES_DID; who |= (int)(did) << 16; }
#define SET_RES_DRV(who,drv) { who &= ~RES_DRV; who |= (int)(drv) << 24; }
#define TAG_NONE 255
@@ -3443,7 +3442,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
srb->adapter_status = 0;
srb->target_status = 0;
- SET_RES_DID(cmd->result, DID_OK);
+ set_host_byte(cmd, DID_OK);
}
}
@@ -1473,7 +1473,8 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
"aborted cmd [%x] complete\n",
scb->idx);
- scb->cmd->result = (DID_ABORT << 16);
+ scb->cmd->result = 0;
+ set_host_byte(scb->cmd, DID_ABORT);
list_add_tail(SCSI_LIST(scb->cmd),
&adapter->completed_list);
@@ -1492,7 +1493,8 @@ mega_cmd_done(adapter_t *adapter, u8 completed[], int nstatus, int status)
"reset cmd [%x] complete\n",
scb->idx);
- scb->cmd->result = (DID_RESET << 16);
+ scb->cmd->result = 0;
+ set_host_byte(scb->cmd, DID_RESET);
list_add_tail(SCSI_LIST(scb->cmd),
&adapter->completed_list);
@@ -1699,6 +1699,8 @@ int scsi_noretry_cmd(struct scsi_cmnd *scmd)
/* fall through */
case DID_SOFT_ERROR:
return (scmd->request->cmd_flags & REQ_FAILFAST_DRIVER);
+ default:
+ break;
}
if (status_byte(scmd->result) != CHECK_CONDITION)
@@ -132,33 +132,35 @@ static inline int scsi_is_wlun(u64 lun)
/*
* Host byte codes
*/
-
-#define DID_OK 0x00 /* NO error */
-#define DID_NO_CONNECT 0x01 /* Couldn't connect before timeout period */
-#define DID_BUS_BUSY 0x02 /* BUS stayed busy through time out period */
-#define DID_TIME_OUT 0x03 /* TIMED OUT for other reason */
-#define DID_BAD_TARGET 0x04 /* BAD target. */
-#define DID_ABORT 0x05 /* Told to abort for some other reason */
-#define DID_PARITY 0x06 /* Parity error */
-#define DID_ERROR 0x07 /* Internal error */
-#define DID_RESET 0x08 /* Reset by somebody. */
-#define DID_BAD_INTR 0x09 /* Got an interrupt we weren't expecting. */
-#define DID_PASSTHROUGH 0x0a /* Force command past mid-layer */
-#define DID_SOFT_ERROR 0x0b /* The low level driver just wish a retry */
-#define DID_IMM_RETRY 0x0c /* Retry without decrementing retry count */
-#define DID_REQUEUE 0x0d /* Requeue command (no immediate retry) also
+enum scsi_host_byte {
+ DID_OK, /* NO error */
+ DID_NO_CONNECT, /* Couldn't connect before timeout period */
+ DID_BUS_BUSY, /* BUS stayed busy through time out period */
+ DID_TIME_OUT, /* TIMED OUT for other reason */
+ DID_BAD_TARGET, /* BAD target. */
+ DID_ABORT, /* Told to abort for some other reason */
+ DID_PARITY, /* Parity error */
+ DID_ERROR, /* Internal error */
+ DID_RESET, /* Reset by somebody. */
+ DID_BAD_INTR, /* Got an interrupt we weren't expecting. */
+ DID_PASSTHROUGH, /* Force command past mid-layer */
+ DID_SOFT_ERROR, /* The low level driver just wish a retry */
+ DID_IMM_RETRY, /* Retry without decrementing retry count */
+ DID_REQUEUE, /* Requeue command (no immediate retry) also
* without decrementing the retry count */
-#define DID_TRANSPORT_DISRUPTED 0x0e /* Transport error disrupted execution
- * and the driver blocked the port to
- * recover the link. Transport class will
- * retry or fail IO */
-#define DID_TRANSPORT_FAILFAST 0x0f /* Transport class fastfailed the io */
-#define DID_TARGET_FAILURE 0x10 /* Permanent target failure, do not retry on
+ DID_TRANSPORT_DISRUPTED,/* Transport error disrupted execution
+ * and the driver blocked the port to
+ * recover the link. Transport class will
+ * retry or fail IO
+ */
+ DID_TRANSPORT_FAILFAST, /* Transport class fastfailed the io */
+ DID_TARGET_FAILURE, /* Permanent target failure, do not retry on
* other paths */
-#define DID_NEXUS_FAILURE 0x11 /* Permanent nexus failure, retry on other
+ DID_NEXUS_FAILURE, /* Permanent nexus failure, retry on other
* paths might yield different results */
-#define DID_ALLOC_FAILURE 0x12 /* Space allocation on the device failed */
-#define DID_MEDIUM_ERROR 0x13 /* Medium error */
+ DID_ALLOC_FAILURE, /* Space allocation on the device failed */
+ DID_MEDIUM_ERROR, /* Medium error */
+};
#define DRIVER_OK 0x00 /* Driver status */
/*
@@ -209,7 +211,10 @@ static inline int scsi_is_wlun(u64 lun)
*/
#define status_byte(result) (((result) >> 1) & 0x7f)
#define msg_byte(result) (((result) >> 8) & 0xff)
-#define host_byte(result) (((result) >> 16) & 0xff)
+static inline enum scsi_host_byte host_byte(int result)
+{
+ return (result >> 16) & 0xff;
+}
#define driver_byte(result) (((result) >> 24) & 0xff)
#define sense_class(sense) (((sense) >> 4) & 0x7)
@@ -342,7 +342,8 @@ static inline void set_msg_byte(struct scsi_cmnd *cmd, char status)
cmd->result = (cmd->result & 0xffff00ff) | (status << 8);
}
-static inline void set_host_byte(struct scsi_cmnd *cmd, char status)
+static inline void set_host_byte(struct scsi_cmnd *cmd,
+ enum scsi_host_byte status)
{
cmd->result = (cmd->result & 0xff00ffff) | (status << 16);
}
Add enum for host byte codes and adopt set_host_byte()'s and host_byte()'s signature. Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de> Suggested-by: Bart Van Assche <Bart.VanAssche@wdc.com> --- drivers/scsi/dc395x.c | 3 +-- drivers/scsi/megaraid.c | 6 ++++-- drivers/scsi/scsi_error.c | 2 ++ include/scsi/scsi.h | 55 ++++++++++++++++++++++++++--------------------- include/scsi/scsi_cmnd.h | 3 ++- 5 files changed, 39 insertions(+), 30 deletions(-)