[PATCH 026/117] acornscsi: Convert to the scsi_status union

Bart Van Assche
2021-04-20T00:09:39Z

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
drivers/scsi/arm/acornscsi.c | 29 +++++++++++++++--------------
1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/drivers/scsi/arm/acornscsi.c b/drivers/scsi/arm/acornscsi.c
index 912828d1dcad..dd111ec4d7db 100644
--- a/drivers/scsi/arm/acornscsi.c
+++ b/drivers/scsi/arm/acornscsi.c
@@ -168,7 +168,7 @@ unsigned int sdtr_period = SDTR_PERIOD;
unsigned int sdtr_size = SDTR_SIZE;

static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
- unsigned int result);
+ enum host_status result);
static int acornscsi_reconnect_finish(AS_Host *host);
static void acornscsi_dma_cleanup(AS_Host *host);
static void acornscsi_abortcmd(AS_Host *host, unsigned char tag);
@@ -773,14 +773,13 @@ intr_ret_t acornscsi_kick(AS_Host *host)
return INTR_PROCESSING;
}

-/*
- * Function: void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp, unsigned int result)
- * Purpose : complete processing for command
- * Params : host - interface that completed
- * result - driver byte of result
+/**
+ * acornscsi_done - complete processing for command
+ * @host: interface that completed
+ * @result: host status byte (DID_...)
*/
static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
- unsigned int result)
+ enum host_status result)
{
struct scsi_cmnd *SCpnt = *SCpntp;

@@ -794,7 +793,9 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,

acornscsi_dma_cleanup(host);

- SCpnt->result = result << 16 | host->scsi.SCp.Message << 8 | host->scsi.SCp.Status;
+ SCpnt->status = (union scsi_status){
+ .b.host = result, .b.msg = host->scsi.SCp.Message,
+ .b.status = host->scsi.SCp.Status};

/*
* In theory, this should not happen. In practice, it seems to.
@@ -833,7 +834,7 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
xfer_warn = 0;

if (xfer_warn) {
- switch (status_byte(SCpnt->result)) {
+ switch (status_byte(SCpnt->status)) {
case CHECK_CONDITION:
case COMMAND_TERMINATED:
case BUSY:
@@ -844,7 +845,7 @@ static void acornscsi_done(AS_Host *host, struct scsi_cmnd **SCpntp,
default:
scmd_printk(KERN_ERR, SCpnt,
"incomplete data transfer detected: "
- "result=%08X", SCpnt->result);
+ "result=%08X", SCpnt->status.combined);
scsi_print_command(SCpnt);
acornscsi_dumpdma(host, "done");
acornscsi_dumplog(host, SCpnt->device->id);
@@ -2470,7 +2471,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
if (acornscsi_cmdtype(SCpnt->cmnd[0]) == CMD_WRITE && (NO_WRITE & (1 << SCpnt->device->id))) {
printk(KERN_CRIT "scsi%d.%c: WRITE attempted with NO_WRITE flag set\n",
host->host->host_no, '0' + SCpnt->device->id);
- SCpnt->result = DID_NO_CONNECT << 16;
+ SCpnt->status.combined = DID_NO_CONNECT << 16;
done(SCpnt);
return 0;
}
@@ -2478,7 +2479,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,

SCpnt->scsi_done = done;
SCpnt->host_scribble = NULL;
- SCpnt->result = 0;
+ SCpnt->status.combined = 0;
SCpnt->tag = 0;
SCpnt->SCp.phase = (int)acornscsi_datadirection(SCpnt->cmnd[0]);
SCpnt->SCp.sent_command = 0;
@@ -2492,7 +2493,7 @@ static int acornscsi_queuecmd_lck(struct scsi_cmnd *SCpnt,
unsigned long flags;

if (!queue_add_cmd_ordered(&host->queues.issue, SCpnt)) {
- SCpnt->result = DID_ERROR << 16;
+ SCpnt->status.combined = DID_ERROR << 16;
done(SCpnt);
return 0;
}
@@ -2523,7 +2524,7 @@ static inline void acornscsi_reportstatus(struct scsi_cmnd **SCpntp1,
if (SCpnt) {
*SCpntp1 = NULL;

- SCpnt->result = result;
+ SCpnt->status.combined = result;
SCpnt->scsi_done(SCpnt);
}