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/arm_scsi.h | |
parent | 8c97e2f390f56ea81e71abf02af3a6cf4de598f0 (diff) |
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/arm_scsi.h')
-rw-r--r-- | drivers/scsi/arm/arm_scsi.h | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/drivers/scsi/arm/arm_scsi.h b/drivers/scsi/arm/arm_scsi.h index 3eb5c6aa93c9..ea9fcd92c6de 100644 --- a/drivers/scsi/arm/arm_scsi.h +++ b/drivers/scsi/arm/arm_scsi.h @@ -9,6 +9,17 @@ #define BELT_AND_BRACES +struct arm_cmd_priv { + struct scsi_pointer scsi_pointer; +}; + +static inline struct scsi_pointer *arm_scsi_pointer(struct scsi_cmnd *cmd) +{ + struct arm_cmd_priv *acmd = scsi_cmd_priv(cmd); + + return &acmd->scsi_pointer; +} + /* * The scatter-gather list handling. This contains all * the yucky stuff that needs to be fixed properly. @@ -76,16 +87,18 @@ static inline void put_next_SCp_byte(struct scsi_pointer *SCp, unsigned char c) static inline void init_SCp(struct scsi_cmnd *SCpnt) { - memset(&SCpnt->SCp, 0, sizeof(struct scsi_pointer)); + struct scsi_pointer *scsi_pointer = arm_scsi_pointer(SCpnt); + + memset(scsi_pointer, 0, sizeof(struct scsi_pointer)); if (scsi_bufflen(SCpnt)) { unsigned long len = 0; - SCpnt->SCp.buffer = scsi_sglist(SCpnt); - SCpnt->SCp.buffers_residual = scsi_sg_count(SCpnt) - 1; - SCpnt->SCp.ptr = sg_virt(SCpnt->SCp.buffer); - SCpnt->SCp.this_residual = SCpnt->SCp.buffer->length; - SCpnt->SCp.phase = scsi_bufflen(SCpnt); + scsi_pointer->buffer = scsi_sglist(SCpnt); + scsi_pointer->buffers_residual = scsi_sg_count(SCpnt) - 1; + scsi_pointer->ptr = sg_virt(scsi_pointer->buffer); + scsi_pointer->this_residual = scsi_pointer->buffer->length; + scsi_pointer->phase = scsi_bufflen(SCpnt); #ifdef BELT_AND_BRACES { /* @@ -109,15 +122,15 @@ static inline void init_SCp(struct scsi_cmnd *SCpnt) * FIXME: Totaly naive fixup. We should abort * with error */ - SCpnt->SCp.phase = + scsi_pointer->phase = min_t(unsigned long, len, scsi_bufflen(SCpnt)); } } #endif } else { - SCpnt->SCp.ptr = NULL; - SCpnt->SCp.this_residual = 0; - SCpnt->SCp.phase = 0; + scsi_pointer->ptr = NULL; + scsi_pointer->this_residual = 0; + scsi_pointer->phase = 0; } } |