[PATCH 041/117] dc395x: Convert to the scsi_status union

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

Cc: Oliver Neukum <oliver@neukum.org>
Cc: Ali Akcaagac <aliakc@web.de>
Cc: Jamie Lenehan <lenehan@twibble.org>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
---
drivers/scsi/dc395x.c | 44 +++++++++++++++++++++----------------------
1 file changed, 21 insertions(+), 23 deletions(-)

diff --git a/drivers/scsi/dc395x.c b/drivers/scsi/dc395x.c
index 6252352ddd96..da52758a374b 100644
--- a/drivers/scsi/dc395x.c
+++ b/drivers/scsi/dc395x.c
@@ -160,10 +160,8 @@
#define DC395x_write16(acb,address,value) outw((value), acb->io_port_base + (address))
#define DC395x_write32(acb,address,value) outl((value), acb->io_port_base + (address))

-#define RES_DID 0x00FF0000 /* DID_ codes */
-
-#define MK_RES(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt))
-#define MK_RES_LNX(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt)<<1)
+#define MK_RES(drv,did,msg_byte,tgt) ((union scsi_status){.b={.driver = (drv), .host = (did), .msg = (msg_byte), .status = (tgt)}})
+#define MK_RES_LNX(drv,did,msg,tgt) MK_RES((drv),(did),(msg),(tgt)<<1)

#define TAG_NONE 255

@@ -975,7 +973,7 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s
cmd, cmd->device->id, (u8)cmd->device->lun, cmd->cmnd[0]);

/* Assume BAD_TARGET; will be cleared later */
- cmd->result = DID_BAD_TARGET << 16;
+ cmd->status.combined = DID_BAD_TARGET << 16;

/* ignore invalid targets */
if (cmd->device->id >= acb->scsi_host->max_id ||
@@ -1002,7 +1000,7 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s

/* set callback and clear result in the command */
cmd->scsi_done = done;
- cmd->result = 0;
+ cmd->status.combined = 0;

srb = list_first_entry_or_null(&acb->srb_free_list,
struct ScsiReqBlk, list);
@@ -1239,7 +1237,7 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd)
free_tag(dcb, srb);
list_add_tail(&srb->list, &acb->srb_free_list);
dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n");
- cmd->result = DID_ABORT << 16;
+ cmd->status.combined = DID_ABORT << 16;
return SUCCESS;
}
srb = find_cmd(cmd, &dcb->srb_going_list);
@@ -3175,7 +3173,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
*/
srb->flag &= ~AUTO_REQSENSE;
srb->adapter_status = 0;
- srb->target_status = CHECK_CONDITION << 1;
+ srb->target_status = SAM_STAT_CHECK_CONDITION;
if (debug_enabled(DBG_1)) {
switch (cmd->sense_buffer[2] & 0x0f) {
case NOT_READY:
@@ -3222,20 +3220,20 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
*((unsigned int *)(cmd->sense_buffer + 3)));
}

- if (status == (CHECK_CONDITION << 1)) {
- cmd->result = DID_BAD_TARGET << 16;
+ if (status == SAM_STAT_CHECK_CONDITION) {
+ cmd->status.combined = DID_BAD_TARGET << 16;
goto ckc_e;
}
dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE2\n");

if (srb->total_xfer_length
&& srb->total_xfer_length >= cmd->underflow)
- cmd->result =
+ cmd->status =
MK_RES_LNX(DRIVER_SENSE, DID_OK,
srb->end_message, CHECK_CONDITION);
/*set_host_byte(cmd,DID_OK) */
else
- cmd->result =
+ cmd->status =
MK_RES_LNX(DRIVER_SENSE, DID_OK,
srb->end_message, CHECK_CONDITION);

@@ -3266,13 +3264,13 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
} else if (status == SCSI_STAT_SEL_TIMEOUT) {
srb->adapter_status = H_SEL_TIMEOUT;
srb->target_status = 0;
- cmd->result = DID_NO_CONNECT << 16;
+ cmd->status = (union scsi_status){
+ .b.host = DID_NO_CONNECT};
} else {
srb->adapter_status = 0;
set_host_byte(cmd, DID_ERROR);
set_msg_byte(cmd, srb->end_message);
set_status_byte(cmd, status);
-
}
} else {
/*
@@ -3311,15 +3309,15 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
base = scsi_kmap_atomic_sg(sg, scsi_sg_count(cmd), &offset, &len);
ptr = (struct ScsiInqData *)(base + offset);

- if (!ckc_only && (cmd->result & RES_DID) == 0
+ if (!ckc_only && cmd->status.b.host == DID_OK
&& cmd->cmnd[2] == 0 && scsi_bufflen(cmd) >= 8
&& dir != DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2)
dcb->inquiry7 = ptr->Flags;

/*if( srb->cmd->cmnd[0] == INQUIRY && */
- /* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */
- if ((cmd->result == (DID_OK << 16) ||
- status_byte(cmd->result) == CHECK_CONDITION)) {
+ /* (host_byte(cmd->status) == DID_OK || status_byte(cmd->status) & CHECK_CONDITION) ) */
+ if ((cmd->status.combined == (DID_OK << 16) ||
+ status_byte(cmd->status) == CHECK_CONDITION)) {
if (!dcb->init_tcq_flag) {
add_dev(acb, dcb, ptr);
dcb->init_tcq_flag = 1;
@@ -3346,7 +3344,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
if (srb != acb->tmp_srb) {
/* Add to free list */
dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n",
- cmd, cmd->result);
+ cmd, cmd->status.combined);
list_move_tail(&srb->list, &acb->srb_free_list);
} else {
dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n");
@@ -3370,7 +3368,7 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
struct scsi_cmnd *p;

list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) {
- int result;
+ union scsi_status result;

p = srb->cmd;
result = MK_RES(0, did_flag, 0, 0);
@@ -3379,7 +3377,7 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
list_del(&srb->list);
free_tag(dcb, srb);
list_add_tail(&srb->list, &acb->srb_free_list);
- p->result = result;
+ p->status = result;
pci_unmap_srb_sense(acb, srb);
pci_unmap_srb(acb, srb);
if (force) {
@@ -3400,14 +3398,14 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,

/* Waiting queue */
list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) {
- int result;
+ union scsi_status result;
p = srb->cmd;

result = MK_RES(0, did_flag, 0, 0);
printk("W:%p<%02i-%i>", p, p->device->id,
(u8)p->device->lun);
list_move_tail(&srb->list, &acb->srb_free_list);
- p->result = result;
+ p->status = result;
pci_unmap_srb_sense(acb, srb);
pci_unmap_srb(acb, srb);
if (force) {