scsi: core: Add scsi_msg_to_host_byte()
[sfrench/cifs-2.6.git] / include / scsi / scsi_cmnd.h
index 7609901160242eac69a795bc899b178ef8efd62e..efcf33c29efa24d2b7b203485d53b412732ab9a9 100644 (file)
@@ -335,6 +335,32 @@ static inline u8 get_host_byte(struct scsi_cmnd *cmd)
        return (cmd->result >> 16) & 0xff;
 }
 
+/**
+ * scsi_msg_to_host_byte() - translate message byte
+ *
+ * Translate the SCSI parallel message byte to a matching
+ * host byte setting. A message of COMMAND_COMPLETE indicates
+ * a successful command execution, any other message indicate
+ * an error. As the messages themselves only have a meaning
+ * for the SCSI parallel protocol this function translates
+ * them into a matching host byte value for SCSI EH.
+ */
+static inline void scsi_msg_to_host_byte(struct scsi_cmnd *cmd, u8 msg)
+{
+       switch (msg) {
+       case COMMAND_COMPLETE:
+               break;
+       case ABORT_TASK_SET:
+               set_host_byte(cmd, DID_ABORT);
+               break;
+       case TARGET_RESET:
+               set_host_byte(cmd, DID_RESET);
+               break;
+       default:
+               set_host_byte(cmd, DID_ERROR);
+               break;
+       }
+}
 
 static inline unsigned scsi_transfer_length(struct scsi_cmnd *scmd)
 {