[SCSI] aha1740: convert to use the data buffer accessors
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Mon, 14 May 2007 11:26:06 +0000 (20:26 +0900)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Sun, 27 May 2007 00:12:56 +0000 (19:12 -0500)
- remove the unnecessary map_single path.

- convert to use the new accessors for the sg lists and the
parameters.

Jens Axboe <jens.axboe@oracle.com> did the for_each_sg cleanup.

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/scsi/aha1740.c

index d7af9c63a04d66d2f4dd2536725c39a901fe7d6f..e4a4f3a965d9a9ce3f4b79c7f140c8e42ba63870 100644 (file)
@@ -271,20 +271,8 @@ static irqreturn_t aha1740_intr_handle(int irq, void *dev_id)
                                continue;
                        }
                        sgptr = (struct aha1740_sg *) SCtmp->host_scribble;
-                       if (SCtmp->use_sg) {
-                               /* We used scatter-gather.
-                                  Do the unmapping dance. */
-                               dma_unmap_sg (&edev->dev,
-                                             (struct scatterlist *) SCtmp->request_buffer,
-                                             SCtmp->use_sg,
-                                             SCtmp->sc_data_direction);
-                       } else {
-                               dma_unmap_single (&edev->dev,
-                                                 sgptr->buf_dma_addr,
-                                                 SCtmp->request_bufflen,
-                                                 DMA_BIDIRECTIONAL);
-                       }
-           
+                       scsi_dma_unmap(SCtmp);
+
                        /* Free the sg block */
                        dma_free_coherent (&edev->dev,
                                           sizeof (struct aha1740_sg),
@@ -349,11 +337,9 @@ static int aha1740_queuecommand(Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
        unchar target = scmd_id(SCpnt);
        struct aha1740_hostdata *host = HOSTDATA(SCpnt->device->host);
        unsigned long flags;
-       void *buff = SCpnt->request_buffer;
-       int bufflen = SCpnt->request_bufflen;
        dma_addr_t sg_dma;
        struct aha1740_sg *sgptr;
-       int ecbno;
+       int ecbno, nseg;
        DEB(int i);
 
        if(*cmd == REQUEST_SENSE) {
@@ -423,24 +409,23 @@ static int aha1740_queuecommand(Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
        }
        sgptr = (struct aha1740_sg *) SCpnt->host_scribble;
        sgptr->sg_dma_addr = sg_dma;
-    
-       if (SCpnt->use_sg) {
-               struct scatterlist * sgpnt;
+
+       nseg = scsi_dma_map(SCpnt);
+       BUG_ON(nseg < 0);
+       if (nseg) {
+               struct scatterlist *sg;
                struct aha1740_chain * cptr;
-               int i, count;
+               int i;
                DEB(unsigned char * ptr);
 
                host->ecb[ecbno].sg = 1;  /* SCSI Initiator Command
                                           * w/scatter-gather*/
-               sgpnt = (struct scatterlist *) SCpnt->request_buffer;
                cptr = sgptr->sg_chain;
-               count = dma_map_sg (&host->edev->dev, sgpnt, SCpnt->use_sg,
-                                   SCpnt->sc_data_direction);
-               for(i=0; i < count; i++) {
-                       cptr[i].datalen = sg_dma_len (sgpnt + i);
-                       cptr[i].dataptr = sg_dma_address (sgpnt + i);
+               scsi_for_each_sg(SCpnt, sg, nseg, i) {
+                       cptr[i].datalen = sg_dma_len (sg);
+                       cptr[i].dataptr = sg_dma_address (sg);
                }
-               host->ecb[ecbno].datalen = count*sizeof(struct aha1740_chain);
+               host->ecb[ecbno].datalen = nseg * sizeof(struct aha1740_chain);
                host->ecb[ecbno].dataptr = sg_dma;
 #ifdef DEBUG
                printk("cptr %x: ",cptr);
@@ -448,11 +433,8 @@ static int aha1740_queuecommand(Scsi_Cmnd * SCpnt, void (*done)(Scsi_Cmnd *))
                for(i=0;i<24;i++) printk("%02x ", ptr[i]);
 #endif
        } else {
-               host->ecb[ecbno].datalen = bufflen;
-               sgptr->buf_dma_addr =  dma_map_single (&host->edev->dev,
-                                                      buff, bufflen,
-                                                      DMA_BIDIRECTIONAL);
-               host->ecb[ecbno].dataptr = sgptr->buf_dma_addr;
+               host->ecb[ecbno].datalen = 0;
+               host->ecb[ecbno].dataptr = 0;
        }
        host->ecb[ecbno].lun = SCpnt->device->lun;
        host->ecb[ecbno].ses = 1; /* Suppress underrun errors */