mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
scsi: aha152x: Modify done() to use separate status bytes
Instead of passing in the combined SCSI result values, split them off into separate status, message, and host byte values. Link: https://lore.kernel.org/r/20210427083046.31620-30-hare@suse.de Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
a9d2d80658
commit
aec166fde7
@ -619,7 +619,8 @@ static struct {
|
||||
static irqreturn_t intr(int irq, void *dev_id);
|
||||
static void reset_ports(struct Scsi_Host *shpnt);
|
||||
static void aha152x_error(struct Scsi_Host *shpnt, char *msg);
|
||||
static void done(struct Scsi_Host *shpnt, int error);
|
||||
static void done(struct Scsi_Host *shpnt, unsigned char status_byte,
|
||||
unsigned char msg_byte, unsigned char host_byte);
|
||||
|
||||
/* diagnostics */
|
||||
static void show_command(struct scsi_cmnd * ptr);
|
||||
@ -1271,7 +1272,8 @@ static int aha152x_biosparam(struct scsi_device *sdev, struct block_device *bdev
|
||||
* Internal done function
|
||||
*
|
||||
*/
|
||||
static void done(struct Scsi_Host *shpnt, int error)
|
||||
static void done(struct Scsi_Host *shpnt, unsigned char status_byte,
|
||||
unsigned char msg_byte, unsigned char host_byte)
|
||||
{
|
||||
if (CURRENT_SC) {
|
||||
if(DONE_SC)
|
||||
@ -1281,7 +1283,9 @@ static void done(struct Scsi_Host *shpnt, int error)
|
||||
|
||||
DONE_SC = CURRENT_SC;
|
||||
CURRENT_SC = NULL;
|
||||
DONE_SC->result = error;
|
||||
DONE_SC->result = status_byte;
|
||||
set_msg_byte(DONE_SC, msg_byte);
|
||||
set_host_byte(DONE_SC, host_byte);
|
||||
} else
|
||||
printk(KERN_ERR "aha152x: done() called outside of command\n");
|
||||
}
|
||||
@ -1376,13 +1380,16 @@ static void busfree_run(struct Scsi_Host *shpnt)
|
||||
|
||||
if(CURRENT_SC->SCp.phase & completed) {
|
||||
/* target sent COMMAND COMPLETE */
|
||||
done(shpnt, (CURRENT_SC->SCp.Status & 0xff) | ((CURRENT_SC->SCp.Message & 0xff) << 8) | (DID_OK << 16));
|
||||
done(shpnt, CURRENT_SC->SCp.Status,
|
||||
CURRENT_SC->SCp.Message, DID_OK);
|
||||
|
||||
} else if(CURRENT_SC->SCp.phase & aborted) {
|
||||
done(shpnt, (CURRENT_SC->SCp.Status & 0xff) | ((CURRENT_SC->SCp.Message & 0xff) << 8) | (DID_ABORT << 16));
|
||||
done(shpnt, CURRENT_SC->SCp.Status,
|
||||
CURRENT_SC->SCp.Message, DID_ABORT);
|
||||
|
||||
} else if(CURRENT_SC->SCp.phase & resetted) {
|
||||
done(shpnt, (CURRENT_SC->SCp.Status & 0xff) | ((CURRENT_SC->SCp.Message & 0xff) << 8) | (DID_RESET << 16));
|
||||
done(shpnt, CURRENT_SC->SCp.Status,
|
||||
CURRENT_SC->SCp.Message, DID_RESET);
|
||||
|
||||
} else if(CURRENT_SC->SCp.phase & disconnected) {
|
||||
/* target sent DISCONNECT */
|
||||
@ -1394,7 +1401,8 @@ static void busfree_run(struct Scsi_Host *shpnt)
|
||||
CURRENT_SC = NULL;
|
||||
|
||||
} else {
|
||||
done(shpnt, DID_ERROR << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_ERROR);
|
||||
}
|
||||
#if defined(AHA152X_STAT)
|
||||
} else {
|
||||
@ -1515,7 +1523,8 @@ static void seldo_run(struct Scsi_Host *shpnt)
|
||||
if (TESTLO(SSTAT0, SELDO)) {
|
||||
scmd_printk(KERN_ERR, CURRENT_SC,
|
||||
"aha152x: passing bus free condition\n");
|
||||
done(shpnt, DID_NO_CONNECT << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_NO_CONNECT);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -1552,12 +1561,15 @@ static void selto_run(struct Scsi_Host *shpnt)
|
||||
CURRENT_SC->SCp.phase &= ~selecting;
|
||||
|
||||
if (CURRENT_SC->SCp.phase & aborted)
|
||||
done(shpnt, DID_ABORT << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_ABORT);
|
||||
else if (TESTLO(SSTAT0, SELINGO))
|
||||
done(shpnt, DID_BUS_BUSY << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_BUS_BUSY);
|
||||
else
|
||||
/* ARBITRATION won, but SELECTION failed */
|
||||
done(shpnt, DID_NO_CONNECT << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_NO_CONNECT);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1891,7 +1903,8 @@ static void cmd_init(struct Scsi_Host *shpnt)
|
||||
if (CURRENT_SC->SCp.sent_command) {
|
||||
scmd_printk(KERN_ERR, CURRENT_SC,
|
||||
"command already sent\n");
|
||||
done(shpnt, DID_ERROR << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -2231,7 +2244,8 @@ static int update_state(struct Scsi_Host *shpnt)
|
||||
static void parerr_run(struct Scsi_Host *shpnt)
|
||||
{
|
||||
scmd_printk(KERN_ERR, CURRENT_SC, "parity error\n");
|
||||
done(shpnt, DID_PARITY << 16);
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_PARITY);
|
||||
}
|
||||
|
||||
/*
|
||||
@ -2262,7 +2276,8 @@ static void rsti_run(struct Scsi_Host *shpnt)
|
||||
}
|
||||
|
||||
if(CURRENT_SC && !CURRENT_SC->device->soft_reset)
|
||||
done(shpnt, DID_RESET << 16 );
|
||||
done(shpnt, SAM_STAT_GOOD,
|
||||
COMMAND_COMPLETE, DID_RESET);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user