aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/sym53c8xx_2/sym_glue.c33
1 files changed, 3 insertions, 30 deletions
diff --git a/drivers/scsi/sym53c8xx_2/sym_glue.c b/drivers/scsi/sym53c8xx_2/sym_glue.c
index e053222a10a3..cfce00ba2b6e 100644
--- a/drivers/scsi/sym53c8xx_2/sym_glue.c
+++ b/drivers/scsi/sym53c8xx_2/sym_glue.c
@@ -134,8 +134,6 @@ static struct scsi_transport_template *sym2_transport_template = NULL;
134 * Driver private area in the SCSI command structure. 134 * Driver private area in the SCSI command structure.
135 */ 135 */
136struct sym_ucmd { /* Override the SCSI pointer structure */ 136struct sym_ucmd { /* Override the SCSI pointer structure */
137 dma_addr_t data_mapping;
138 unsigned char data_mapped;
139 unsigned char to_do; /* For error handling */ 137 unsigned char to_do; /* For error handling */
140 void (*old_done)(struct scsi_cmnd *); /* For error handling */ 138 void (*old_done)(struct scsi_cmnd *); /* For error handling */
141 struct completion *eh_done; /* For error handling */ 139 struct completion *eh_done; /* For error handling */
@@ -144,37 +142,12 @@ struct sym_ucmd { /* Override the SCSI pointer structure */
144#define SYM_UCMD_PTR(cmd) ((struct sym_ucmd *)(&(cmd)->SCp)) 142#define SYM_UCMD_PTR(cmd) ((struct sym_ucmd *)(&(cmd)->SCp))
145#define SYM_SOFTC_PTR(cmd) sym_get_hcb(cmd->device->host) 143#define SYM_SOFTC_PTR(cmd) sym_get_hcb(cmd->device->host)
146 144
147static void __unmap_scsi_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
148{
149 if (SYM_UCMD_PTR(cmd)->data_mapped)
150 scsi_dma_unmap(cmd);
151
152 SYM_UCMD_PTR(cmd)->data_mapped = 0;
153}
154
155static int __map_scsi_sg_data(struct pci_dev *pdev, struct scsi_cmnd *cmd)
156{
157 int use_sg;
158
159 use_sg = scsi_dma_map(cmd);
160 if (use_sg > 0) {
161 SYM_UCMD_PTR(cmd)->data_mapped = 2;
162 SYM_UCMD_PTR(cmd)->data_mapping = use_sg;
163 }
164
165 return use_sg;
166}
167
168#define unmap_scsi_data(np, cmd) \
169 __unmap_scsi_data(np->s.device, cmd)
170#define map_scsi_sg_data(np, cmd) \
171 __map_scsi_sg_data(np->s.device, cmd)
172/* 145/*
173 * Complete a pending CAM CCB. 146 * Complete a pending CAM CCB.
174 */ 147 */
175void sym_xpt_done(struct sym_hcb *np, struct scsi_cmnd *cmd) 148void sym_xpt_done(struct sym_hcb *np, struct scsi_cmnd *cmd)
176{ 149{
177 unmap_scsi_data(np, cmd); 150 scsi_dma_unmap(cmd);
178 cmd->scsi_done(cmd); 151 cmd->scsi_done(cmd);
179} 152}
180 153
@@ -307,14 +280,14 @@ static int sym_scatter(struct sym_hcb *np, struct sym_ccb *cp, struct scsi_cmnd
307 280
308 cp->data_len = 0; 281 cp->data_len = 0;
309 282
310 use_sg = map_scsi_sg_data(np, cmd); 283 use_sg = scsi_dma_map(cmd);
311 if (use_sg > 0) { 284 if (use_sg > 0) {
312 struct scatterlist *sg; 285 struct scatterlist *sg;
313 struct sym_tcb *tp = &np->target[cp->target]; 286 struct sym_tcb *tp = &np->target[cp->target];
314 struct sym_tblmove *data; 287 struct sym_tblmove *data;
315 288
316 if (use_sg > SYM_CONF_MAX_SG) { 289 if (use_sg > SYM_CONF_MAX_SG) {
317 unmap_scsi_data(np, cmd); 290 scsi_dma_unmap(cmd);
318 return -1; 291 return -1;
319 } 292 }
320 293