scsi: core: Add scsi_msg_to_host_byte()
authorHannes Reinecke <hare@suse.de>
Tue, 27 Apr 2021 08:30:23 +0000 (10:30 +0200)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 1 Jun 2021 02:48:22 +0000 (22:48 -0400)
Add helper to convert message byte into a host byte code.

Link: https://lore.kernel.org/r/20210427083046.31620-18-hare@suse.de
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
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)
 {