Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c66cc13c16377d177d8887f15a3cc42ab3866f57
Commit:     c66cc13c16377d177d8887f15a3cc42ab3866f57
Parent:     985c0a7277760512c65bda2eb12c1c7213233eeb
Author:     FUJITA Tomonori <[EMAIL PROTECTED]>
AuthorDate: Mon May 14 20:26:06 2007 +0900
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Sat May 26 19:12:56 2007 -0500

    [SCSI] aha1740: convert to use the data buffer accessors
    
    - remove the unnecessary map_single path.
    
    - convert to use the new accessors for the sg lists and the
    parameters.
    
    Jens Axboe <[EMAIL PROTECTED]> did the for_each_sg cleanup.
    
    Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/aha1740.c |   48 +++++++++++++++---------------------------------
 1 files changed, 15 insertions(+), 33 deletions(-)

diff --git a/drivers/scsi/aha1740.c b/drivers/scsi/aha1740.c
index d7af9c6..e4a4f3a 100644
--- a/drivers/scsi/aha1740.c
+++ b/drivers/scsi/aha1740.c
@@ -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 */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to