diff options
author | Bart Van Assche <bvanassche@acm.org> | 2022-02-18 11:50:38 -0800 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2022-02-22 21:11:03 -0500 |
commit | dc41754590998b7d164ed39038cbed324928b0bd (patch) | |
tree | 85bb1dcf0c7de56436c38280b563c22395e93589 /drivers/scsi/arm/fas216.c | |
parent | 8c97e2f390f56ea81e71abf02af3a6cf4de598f0 (diff) | |
download | lwn-dc41754590998b7d164ed39038cbed324928b0bd.tar.gz lwn-dc41754590998b7d164ed39038cbed324928b0bd.zip |
scsi: arm: Move the SCSI pointer to private command data
Set .cmd_size in the SCSI host template instead of using the SCSI pointer
from struct scsi_cmnd. This patch prepares for removal of the SCSI pointer
from struct scsi_cmnd. The ARM SCSI drivers have been identified as follows:
$ git grep -l '#include.*arm_scsi.h'
drivers/scsi/arm/acornscsi.c
drivers/scsi/arm/cumana_2.c
drivers/scsi/arm/eesox.c
drivers/scsi/arm/fas216.c
drivers/scsi/arm/powertec.c
Link: https://lore.kernel.org/r/20220218195117.25689-11-bvanassche@acm.org
Cc: Russell King <linux@armlinux.org.uk>
Reviewed-by: Hannes Reinecke <hare@suse.de>
Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Diffstat (limited to 'drivers/scsi/arm/fas216.c')
-rw-r--r-- | drivers/scsi/arm/fas216.c | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/scsi/arm/fas216.c b/drivers/scsi/arm/fas216.c index a23e34c9f7de..4ce0b2d73614 100644 --- a/drivers/scsi/arm/fas216.c +++ b/drivers/scsi/arm/fas216.c @@ -761,7 +761,7 @@ static void fas216_transfer(FAS216_Info *info) fas216_log(info, LOG_ERROR, "null buffer passed to " "fas216_starttransfer"); print_SCp(&info->scsi.SCp, "SCp: ", "\n"); - print_SCp(&info->SCpnt->SCp, "Cmnd SCp: ", "\n"); + print_SCp(arm_scsi_pointer(info->SCpnt), "Cmnd SCp: ", "\n"); return; } @@ -1011,7 +1011,7 @@ fas216_reselected_intr(FAS216_Info *info) /* * Restore data pointer from SAVED data pointer */ - info->scsi.SCp = info->SCpnt->SCp; + info->scsi.SCp = *arm_scsi_pointer(info->SCpnt); fas216_log(info, LOG_CONNECT, "data pointers: [%p, %X]", info->scsi.SCp.ptr, info->scsi.SCp.this_residual); @@ -1054,6 +1054,7 @@ fas216_reselected_intr(FAS216_Info *info) static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int msglen) { + struct scsi_pointer *scsi_pointer; int i; switch (message[0]) { @@ -1078,8 +1079,9 @@ static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int * as required by the SCSI II standard. These always * point to the start of their respective areas. */ - info->SCpnt->SCp = info->scsi.SCp; - info->SCpnt->SCp.sent_command = 0; + scsi_pointer = arm_scsi_pointer(info->SCpnt); + *scsi_pointer = info->scsi.SCp; + scsi_pointer->sent_command = 0; fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER, "save data pointers: [%p, %X]", info->scsi.SCp.ptr, info->scsi.SCp.this_residual); @@ -1092,7 +1094,7 @@ static void fas216_parse_message(FAS216_Info *info, unsigned char *message, int /* * Restore current data pointer from SAVED data pointer */ - info->scsi.SCp = info->SCpnt->SCp; + info->scsi.SCp = *arm_scsi_pointer(info->SCpnt); fas216_log(info, LOG_CONNECT | LOG_MESSAGES | LOG_BUFFER, "restore data pointers: [%p, 0x%x]", info->scsi.SCp.ptr, info->scsi.SCp.this_residual); @@ -1770,7 +1772,7 @@ static void fas216_start_command(FAS216_Info *info, struct scsi_cmnd *SCpnt) * claim host busy */ info->scsi.phase = PHASE_SELECTION; - info->scsi.SCp = SCpnt->SCp; + info->scsi.SCp = *arm_scsi_pointer(SCpnt); info->SCpnt = SCpnt; info->dma.transfer_type = fasdma_none; @@ -1849,7 +1851,7 @@ static void fas216_do_bus_device_reset(FAS216_Info *info, * claim host busy */ info->scsi.phase = PHASE_SELECTION; - info->scsi.SCp = SCpnt->SCp; + info->scsi.SCp = *arm_scsi_pointer(SCpnt); info->SCpnt = SCpnt; info->dma.transfer_type = fasdma_none; @@ -1999,11 +2001,13 @@ static void fas216_devicereset_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) { + struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt); + fas216_log_target(info, LOG_CONNECT, SCpnt->device->id, "request sense complete, result=0x%04x%02x%02x", - result, SCpnt->SCp.Message, SCpnt->SCp.Status); + result, scsi_pointer->Message, scsi_pointer->Status); - if (result != DID_OK || SCpnt->SCp.Status != SAM_STAT_GOOD) + if (result != DID_OK || scsi_pointer->Status != SAM_STAT_GOOD) /* * Something went wrong. Make sure that we don't * have valid data in the sense buffer that could @@ -2033,6 +2037,8 @@ static void fas216_rq_sns_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, static void fas216_std_done(FAS216_Info *info, struct scsi_cmnd *SCpnt, unsigned int result) { + struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt); + info->stats.fins += 1; set_host_byte(SCpnt, result); @@ -2107,8 +2113,8 @@ request_sense: fas216_log_target(info, LOG_CONNECT, SCpnt->device->id, "requesting sense"); init_SCp(SCpnt); - SCpnt->SCp.Message = 0; - SCpnt->SCp.Status = 0; + scsi_pointer->Message = 0; + scsi_pointer->Status = 0; SCpnt->host_scribble = (void *)fas216_rq_sns_done; /* |