Commit 75dd4439 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Martin K. Petersen

scsi: dc395: Use standard macros to set SCSI result

Use standard macros to set the SCSI result and drop the internal ones.

Link: https://lore.kernel.org/r/20210427083046.31620-19-hare@suse.deReviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 735b830c
...@@ -160,22 +160,6 @@ ...@@ -160,22 +160,6 @@
#define DC395x_write16(acb,address,value) outw((value), acb->io_port_base + (address)) #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 DC395x_write32(acb,address,value) outl((value), acb->io_port_base + (address))
/* cmd->result */
#define RES_TARGET 0x000000FF /* Target State */
#define RES_TARGET_LNX STATUS_MASK /* Only official ... */
#define RES_ENDMSG 0x0000FF00 /* End Message */
#define RES_DID 0x00FF0000 /* DID_ codes */
#define RES_DRV 0xFF000000 /* DRIVER_ 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 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 #define TAG_NONE 255
/* /*
...@@ -986,7 +970,7 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s ...@@ -986,7 +970,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]); cmd, cmd->device->id, (u8)cmd->device->lun, cmd->cmnd[0]);
/* Assume BAD_TARGET; will be cleared later */ /* Assume BAD_TARGET; will be cleared later */
cmd->result = DID_BAD_TARGET << 16; set_host_byte(cmd, DID_BAD_TARGET);
/* ignore invalid targets */ /* ignore invalid targets */
if (cmd->device->id >= acb->scsi_host->max_id || if (cmd->device->id >= acb->scsi_host->max_id ||
...@@ -1013,7 +997,8 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s ...@@ -1013,7 +997,8 @@ static int dc395x_queue_command_lck(struct scsi_cmnd *cmd, void (*done)(struct s
/* set callback and clear result in the command */ /* set callback and clear result in the command */
cmd->scsi_done = done; cmd->scsi_done = done;
cmd->result = 0; set_host_byte(cmd, DID_OK);
set_status_byte(cmd, SAM_STAT_GOOD);
srb = list_first_entry_or_null(&acb->srb_free_list, srb = list_first_entry_or_null(&acb->srb_free_list,
struct ScsiReqBlk, list); struct ScsiReqBlk, list);
...@@ -1250,7 +1235,7 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd) ...@@ -1250,7 +1235,7 @@ static int dc395x_eh_abort(struct scsi_cmnd *cmd)
free_tag(dcb, srb); free_tag(dcb, srb);
list_add_tail(&srb->list, &acb->srb_free_list); list_add_tail(&srb->list, &acb->srb_free_list);
dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n"); dprintkl(KERN_DEBUG, "eh_abort: Command was waiting\n");
cmd->result = DID_ABORT << 16; set_host_byte(cmd, DID_ABORT);
return SUCCESS; return SUCCESS;
} }
srb = find_cmd(cmd, &dcb->srb_going_list); srb = find_cmd(cmd, &dcb->srb_going_list);
...@@ -3178,6 +3163,8 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3178,6 +3163,8 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
srb, scsi_sg_count(cmd), srb->sg_index, srb->sg_count, srb, scsi_sg_count(cmd), srb->sg_index, srb->sg_count,
scsi_sgtalbe(cmd)); scsi_sgtalbe(cmd));
status = srb->target_status; status = srb->target_status;
set_host_byte(cmd, DID_OK);
set_status_byte(cmd, SAM_STAT_GOOD);
if (srb->flag & AUTO_REQSENSE) { if (srb->flag & AUTO_REQSENSE) {
dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE1\n"); dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE1\n");
pci_unmap_srb_sense(acb, srb); pci_unmap_srb_sense(acb, srb);
...@@ -3186,7 +3173,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3186,7 +3173,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
*/ */
srb->flag &= ~AUTO_REQSENSE; srb->flag &= ~AUTO_REQSENSE;
srb->adapter_status = 0; srb->adapter_status = 0;
srb->target_status = CHECK_CONDITION << 1; srb->target_status = SAM_STAT_CHECK_CONDITION;
if (debug_enabled(DBG_1)) { if (debug_enabled(DBG_1)) {
switch (cmd->sense_buffer[2] & 0x0f) { switch (cmd->sense_buffer[2] & 0x0f) {
case NOT_READY: case NOT_READY:
...@@ -3233,15 +3220,14 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3233,15 +3220,14 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
*((unsigned int *)(cmd->sense_buffer + 3))); *((unsigned int *)(cmd->sense_buffer + 3)));
} }
if (status == (CHECK_CONDITION << 1)) { if (status == SAM_STAT_CHECK_CONDITION) {
cmd->result = DID_BAD_TARGET << 16; set_host_byte(cmd, DID_BAD_TARGET);
goto ckc_e; goto ckc_e;
} }
dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE2\n"); dprintkdbg(DBG_0, "srb_done: AUTO_REQSENSE2\n");
cmd->result = set_msg_byte(cmd, srb->end_message);
MK_RES(0, DID_OK, set_status_byte(cmd, SAM_STAT_CHECK_CONDITION);
srb->end_message, SAM_STAT_CHECK_CONDITION);
goto ckc_e; goto ckc_e;
} }
...@@ -3251,10 +3237,10 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3251,10 +3237,10 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
/* /*
* target status.......................... * target status..........................
*/ */
if (status >> 1 == CHECK_CONDITION) { if (status == SAM_STAT_CHECK_CONDITION) {
request_sense(acb, dcb, srb); request_sense(acb, dcb, srb);
return; return;
} else if (status >> 1 == QUEUE_FULL) { } else if (status == SAM_STAT_TASK_SET_FULL) {
tempcnt = (u8)list_size(&dcb->srb_going_list); tempcnt = (u8)list_size(&dcb->srb_going_list);
dprintkl(KERN_INFO, "QUEUE_FULL for dev <%02i-%i> with %i cmnds\n", dprintkl(KERN_INFO, "QUEUE_FULL for dev <%02i-%i> with %i cmnds\n",
dcb->target_id, dcb->target_lun, tempcnt); dcb->target_id, dcb->target_lun, tempcnt);
...@@ -3270,13 +3256,12 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3270,13 +3256,12 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
} else if (status == SCSI_STAT_SEL_TIMEOUT) { } else if (status == SCSI_STAT_SEL_TIMEOUT) {
srb->adapter_status = H_SEL_TIMEOUT; srb->adapter_status = H_SEL_TIMEOUT;
srb->target_status = 0; srb->target_status = 0;
cmd->result = DID_NO_CONNECT << 16; set_host_byte(cmd, DID_NO_CONNECT);
} else { } else {
srb->adapter_status = 0; srb->adapter_status = 0;
SET_RES_DID(cmd->result, DID_ERROR); set_host_byte(cmd, DID_ERROR);
SET_RES_MSG(cmd->result, srb->end_message); set_msg_byte(cmd, srb->end_message);
SET_RES_TARGET(cmd->result, status); set_status_byte(cmd, status);
} }
} else { } else {
/* /*
...@@ -3285,16 +3270,14 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3285,16 +3270,14 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
status = srb->adapter_status; status = srb->adapter_status;
if (status & H_OVER_UNDER_RUN) { if (status & H_OVER_UNDER_RUN) {
srb->target_status = 0; srb->target_status = 0;
SET_RES_DID(cmd->result, DID_OK); set_msg_byte(cmd, srb->end_message);
SET_RES_MSG(cmd->result, srb->end_message);
} else if (srb->status & PARITY_ERROR) { } else if (srb->status & PARITY_ERROR) {
SET_RES_DID(cmd->result, DID_PARITY); set_host_byte(cmd, DID_PARITY);
SET_RES_MSG(cmd->result, srb->end_message); set_msg_byte(cmd, srb->end_message);
} else { /* No error */ } else { /* No error */
srb->adapter_status = 0; srb->adapter_status = 0;
srb->target_status = 0; srb->target_status = 0;
SET_RES_DID(cmd->result, DID_OK);
} }
} }
...@@ -3315,15 +3298,15 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3315,15 +3298,15 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
base = scsi_kmap_atomic_sg(sg, scsi_sg_count(cmd), &offset, &len); base = scsi_kmap_atomic_sg(sg, scsi_sg_count(cmd), &offset, &len);
ptr = (struct ScsiInqData *)(base + offset); ptr = (struct ScsiInqData *)(base + offset);
if (!ckc_only && (cmd->result & RES_DID) == 0 if (!ckc_only && get_host_byte(cmd) == DID_OK
&& cmd->cmnd[2] == 0 && scsi_bufflen(cmd) >= 8 && cmd->cmnd[2] == 0 && scsi_bufflen(cmd) >= 8
&& dir != DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2) && dir != DMA_NONE && ptr && (ptr->Vers & 0x07) >= 2)
dcb->inquiry7 = ptr->Flags; dcb->inquiry7 = ptr->Flags;
/*if( srb->cmd->cmnd[0] == INQUIRY && */ /*if( srb->cmd->cmnd[0] == INQUIRY && */
/* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */ /* (host_byte(cmd->result) == DID_OK || status_byte(cmd->result) & CHECK_CONDITION) ) */
if ((cmd->result == (DID_OK << 16) || if ((get_host_byte(cmd) == DID_OK) ||
status_byte(cmd->result) == CHECK_CONDITION)) { (get_status_byte(cmd) == SAM_STAT_CHECK_CONDITION)) {
if (!dcb->init_tcq_flag) { if (!dcb->init_tcq_flag) {
add_dev(acb, dcb, ptr); add_dev(acb, dcb, ptr);
dcb->init_tcq_flag = 1; dcb->init_tcq_flag = 1;
...@@ -3350,7 +3333,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb, ...@@ -3350,7 +3333,7 @@ static void srb_done(struct AdapterCtlBlk *acb, struct DeviceCtlBlk *dcb,
if (srb != acb->tmp_srb) { if (srb != acb->tmp_srb) {
/* Add to free list */ /* Add to free list */
dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n", dprintkdbg(DBG_0, "srb_done: (0x%p) done result=0x%08x\n",
cmd, cmd->result); cmd, cmd->result);
list_move_tail(&srb->list, &acb->srb_free_list); list_move_tail(&srb->list, &acb->srb_free_list);
} else { } else {
dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n"); dprintkl(KERN_ERR, "srb_done: ERROR! Completed cmd with tmp_srb\n");
...@@ -3374,16 +3357,14 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag, ...@@ -3374,16 +3357,14 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
struct scsi_cmnd *p; struct scsi_cmnd *p;
list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) { list_for_each_entry_safe(srb, tmp, &dcb->srb_going_list, list) {
int result;
p = srb->cmd; p = srb->cmd;
result = MK_RES(0, did_flag, 0, 0);
printk("G:%p(%02i-%i) ", p, printk("G:%p(%02i-%i) ", p,
p->device->id, (u8)p->device->lun); p->device->id, (u8)p->device->lun);
list_del(&srb->list); list_del(&srb->list);
free_tag(dcb, srb); free_tag(dcb, srb);
list_add_tail(&srb->list, &acb->srb_free_list); list_add_tail(&srb->list, &acb->srb_free_list);
p->result = result; set_host_byte(p, did_flag);
set_status_byte(p, SAM_STAT_GOOD);
pci_unmap_srb_sense(acb, srb); pci_unmap_srb_sense(acb, srb);
pci_unmap_srb(acb, srb); pci_unmap_srb(acb, srb);
if (force) { if (force) {
...@@ -3404,14 +3385,13 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag, ...@@ -3404,14 +3385,13 @@ static void doing_srb_done(struct AdapterCtlBlk *acb, u8 did_flag,
/* Waiting queue */ /* Waiting queue */
list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) { list_for_each_entry_safe(srb, tmp, &dcb->srb_waiting_list, list) {
int result;
p = srb->cmd; p = srb->cmd;
result = MK_RES(0, did_flag, 0, 0);
printk("W:%p<%02i-%i>", p, p->device->id, printk("W:%p<%02i-%i>", p, p->device->id,
(u8)p->device->lun); (u8)p->device->lun);
list_move_tail(&srb->list, &acb->srb_free_list); list_move_tail(&srb->list, &acb->srb_free_list);
p->result = result; set_host_byte(p, did_flag);
set_status_byte(p, SAM_STAT_GOOD);
pci_unmap_srb_sense(acb, srb); pci_unmap_srb_sense(acb, srb);
pci_unmap_srb(acb, srb); pci_unmap_srb(acb, srb);
if (force) { if (force) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment