]> pilppa.com Git - linux-2.6-omap-h63xx.git/commitdiff
[SCSI] fusion: convert to use the data buffer accessors
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Fri, 25 May 2007 15:37:15 +0000 (00:37 +0900)
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>
Tue, 29 May 2007 22:19:07 +0000 (17:19 -0500)
- remove the unnecessary map_single path.

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

TODO: use scsi_for_each_sg().

Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Acked-by: Eric Moore <eric.moore@lsi.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
drivers/message/fusion/mptscsih.c

index fa0f7761652a47b0aff19b1ea420d0edf963fdf9..561074a04b03ce83b381c68201986b78763e46ea 100644 (file)
@@ -260,30 +260,13 @@ mptscsih_AddSGE(MPT_ADAPTER *ioc, struct scsi_cmnd *SCpnt,
        /* Map the data portion, if any.
         * sges_left  = 0 if no data transfer.
         */
-       if ( (sges_left = SCpnt->use_sg) ) {
-               sges_left = pci_map_sg(ioc->pcidev,
-                              (struct scatterlist *) SCpnt->request_buffer,
-                              SCpnt->use_sg,
-                              SCpnt->sc_data_direction);
-               if (sges_left == 0)
-                       return FAILED;
-       } else if (SCpnt->request_bufflen) {
-               SCpnt->SCp.dma_handle = pci_map_single(ioc->pcidev,
-                                     SCpnt->request_buffer,
-                                     SCpnt->request_bufflen,
-                                     SCpnt->sc_data_direction);
-               dsgprintk((MYIOC_s_INFO_FMT "SG: non-SG for %p, len=%d\n",
-                               ioc->name, SCpnt, SCpnt->request_bufflen));
-               mptscsih_add_sge((char *) &pReq->SGL,
-                       0xD1000000|MPT_SGE_FLAGS_ADDRESSING|sgdir|SCpnt->request_bufflen,
-                       SCpnt->SCp.dma_handle);
-
-               return SUCCESS;
-       }
+       sges_left = scsi_dma_map(SCpnt);
+       if (sges_left < 0)
+               return FAILED;
 
        /* Handle the SG case.
         */
-       sg = (struct scatterlist *) SCpnt->request_buffer;
+       sg = scsi_sglist(SCpnt);
        sg_done  = 0;
        sgeOffset = sizeof(SCSIIORequest_t) - sizeof(SGE_IO_UNION);
        chainSge = NULL;
@@ -662,7 +645,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                scsi_state = pScsiReply->SCSIState;
                scsi_status = pScsiReply->SCSIStatus;
                xfer_cnt = le32_to_cpu(pScsiReply->TransferCount);
-               sc->resid = sc->request_bufflen - xfer_cnt;
+               scsi_set_resid(sc, scsi_bufflen(sc) - xfer_cnt);
                log_info = le32_to_cpu(pScsiReply->IOCLogInfo);
 
                /*
@@ -767,7 +750,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                        break;
 
                case MPI_IOCSTATUS_SCSI_RESIDUAL_MISMATCH:      /* 0x0049 */
-                       sc->resid = sc->request_bufflen - xfer_cnt;
+                       scsi_set_resid(sc, scsi_bufflen(sc) - xfer_cnt);
                        if((xfer_cnt==0)||(sc->underflow > xfer_cnt))
                                sc->result=DID_SOFT_ERROR << 16;
                        else /* Sufficient data transfer occurred */
@@ -816,7 +799,7 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                        break;
 
                case MPI_IOCSTATUS_SCSI_DATA_OVERRUN:           /* 0x0044 */
-                       sc->resid=0;
+                       scsi_set_resid(sc, 0);
                case MPI_IOCSTATUS_SCSI_RECOVERED_ERROR:        /* 0x0040 */
                case MPI_IOCSTATUS_SUCCESS:                     /* 0x0000 */
                        sc->result = (DID_OK << 16) | scsi_status;
@@ -899,23 +882,18 @@ mptscsih_io_done(MPT_ADAPTER *ioc, MPT_FRAME_HDR *mf, MPT_FRAME_HDR *mr)
                            scsi_state, scsi_status, log_info));
 
                        dreplyprintk(("%s: [%d:%d:%d:%d] resid=%d "
-                           "bufflen=%d xfer_cnt=%d\n", __FUNCTION__,
-                           sc->device->host->host_no, sc->device->channel, sc->device->id,
-                           sc->device->lun, sc->resid, sc->request_bufflen,
-                           xfer_cnt));
+                                     "bufflen=%d xfer_cnt=%d\n", __FUNCTION__,
+                                     sc->device->host->host_no,
+                                     sc->device->channel, sc->device->id,
+                                     sc->device->lun, scsi_get_resid(sc),
+                                     scsi_bufflen(sc), xfer_cnt));
                }
 #endif
 
        } /* end of address reply case */
 
        /* Unmap the DMA buffers, if any. */
-       if (sc->use_sg) {
-               pci_unmap_sg(ioc->pcidev, (struct scatterlist *) sc->request_buffer,
-                           sc->use_sg, sc->sc_data_direction);
-       } else if (sc->request_bufflen) {
-               pci_unmap_single(ioc->pcidev, sc->SCp.dma_handle,
-                               sc->request_bufflen, sc->sc_data_direction);
-       }
+       scsi_dma_unmap(sc);
 
        sc->scsi_done(sc);              /* Issue the command callback */
 
@@ -970,17 +948,8 @@ mptscsih_flush_running_cmds(MPT_SCSI_HOST *hd)
                        /* Set status, free OS resources (SG DMA buffers)
                         * Do OS callback
                         */
-                       if (SCpnt->use_sg) {
-                               pci_unmap_sg(ioc->pcidev,
-                                       (struct scatterlist *) SCpnt->request_buffer,
-                                       SCpnt->use_sg,
-                                       SCpnt->sc_data_direction);
-                       } else if (SCpnt->request_bufflen) {
-                               pci_unmap_single(ioc->pcidev,
-                                       SCpnt->SCp.dma_handle,
-                                       SCpnt->request_bufflen,
-                                       SCpnt->sc_data_direction);
-                       }
+                       scsi_dma_unmap(SCpnt);
+
                        SCpnt->result = DID_RESET << 16;
                        SCpnt->host_scribble = NULL;
 
@@ -1039,17 +1008,8 @@ mptscsih_search_running_cmds(MPT_SCSI_HOST *hd, VirtDevice *vdevice)
                        mpt_free_msg_frame(hd->ioc, (MPT_FRAME_HDR *)mf);
                        if ((unsigned char *)mf != sc->host_scribble)
                                continue;
-                       if (sc->use_sg) {
-                               pci_unmap_sg(hd->ioc->pcidev,
-                               (struct scatterlist *) sc->request_buffer,
-                                       sc->use_sg,
-                                       sc->sc_data_direction);
-                       } else if (sc->request_bufflen) {
-                               pci_unmap_single(hd->ioc->pcidev,
-                                       sc->SCp.dma_handle,
-                                       sc->request_bufflen,
-                                       sc->sc_data_direction);
-                       }
+                       scsi_dma_unmap(sc);
+
                        sc->host_scribble = NULL;
                        sc->result = DID_NO_CONNECT << 16;
                        sc->scsi_done(sc);
@@ -1380,10 +1340,10 @@ mptscsih_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
         *    will be no data transfer!  GRRRRR...
         */
        if (SCpnt->sc_data_direction == DMA_FROM_DEVICE) {
-               datalen = SCpnt->request_bufflen;
+               datalen = scsi_bufflen(SCpnt);
                scsidir = MPI_SCSIIO_CONTROL_READ;      /* DATA IN  (host<--ioc<--dev) */
        } else if (SCpnt->sc_data_direction == DMA_TO_DEVICE) {
-               datalen = SCpnt->request_bufflen;
+               datalen = scsi_bufflen(SCpnt);
                scsidir = MPI_SCSIIO_CONTROL_WRITE;     /* DATA OUT (host-->ioc-->dev) */
        } else {
                datalen = 0;