- Use scsi_eh_prep/restore_cmnd() for synchronous
    REQUEST_SENSE invocation.
  - Use new sense accessors where needed.
  - Cleanup of no longer used bits

Signed-off-by: Boaz Harrosh <[EMAIL PROTECTED]>
---
 drivers/scsi/tmscsim.c |   72 ++++++-----------------------------------------
 drivers/scsi/tmscsim.h |   11 +------
 2 files changed, 12 insertions(+), 71 deletions(-)

diff --git a/drivers/scsi/tmscsim.c b/drivers/scsi/tmscsim.c
index 5b04ddf..2447da9 100644
--- a/drivers/scsi/tmscsim.c
+++ b/drivers/scsi/tmscsim.c
@@ -242,7 +242,6 @@
 #include <scsi/scsicam.h>
 #include <scsi/scsi_tcq.h>
 
-
 #define DC390_BANNER "Tekram DC390/AM53C974"
 #define DC390_VERSION "2.1d 2004-05-27"
 
@@ -428,33 +427,13 @@ static __inline__ void dc390_Going_remove (struct 
dc390_dcb* pDCB, struct dc390_
    pDCB->GoingSRBCnt--;
 }
 
-static struct scatterlist* dc390_sg_build_single(struct scatterlist *sg, void 
*addr, unsigned int length)
-{
-       sg_init_one(sg, addr, length);
-       return sg;
-}
-
 /* Create pci mapping */
 static int dc390_pci_map (struct dc390_srb* pSRB)
 {
        int error = 0;
        struct scsi_cmnd *pcmd = pSRB->pcmd;
-       struct pci_dev *pdev = pSRB->pSRBDCB->pDCBACB->pdev;
-       dc390_cmd_scp_t* cmdp = ((dc390_cmd_scp_t*)(&pcmd->SCp));
-
-       /* Map sense buffer */
-       if (pSRB->SRBFlag & AUTO_REQSENSE) {
-               pSRB->pSegmentList      = 
dc390_sg_build_single(&pSRB->Segmentx, pcmd->sense_buffer, 
SCSI_SENSE_BUFFERSIZE);
-               pSRB->SGcount           = pci_map_sg(pdev, pSRB->pSegmentList, 
1,
-                                                    DMA_FROM_DEVICE);
-               cmdp->saved_dma_handle  = sg_dma_address(pSRB->pSegmentList);
 
-               /* TODO: error handling */
-               if (pSRB->SGcount != 1)
-                       error = 1;
-               DEBUG1(printk("%s(): Mapped sense buffer %p at %x\n", 
__FUNCTION__, pcmd->sense_buffer, cmdp->saved_dma_handle));
-       /* Map SG list */
-       } else if (scsi_sg_count(pcmd)) {
+       if (scsi_sg_count(pcmd)) {
                int nseg;
 
                nseg = scsi_dma_map(pcmd);
@@ -478,17 +457,10 @@ static int dc390_pci_map (struct dc390_srb* pSRB)
 static void dc390_pci_unmap (struct dc390_srb* pSRB)
 {
        struct scsi_cmnd *pcmd = pSRB->pcmd;
-       struct pci_dev *pdev = pSRB->pSRBDCB->pDCBACB->pdev;
-       DEBUG1(dc390_cmd_scp_t* cmdp = ((dc390_cmd_scp_t*)(&pcmd->SCp)));
 
-       if (pSRB->SRBFlag) {
-               pci_unmap_sg(pdev, &pSRB->Segmentx, 1, DMA_FROM_DEVICE);
-               DEBUG1(printk("%s(): Unmapped sense buffer at %x\n", 
__FUNCTION__, cmdp->saved_dma_handle));
-       } else {
-               scsi_dma_unmap(pcmd);
-               DEBUG1(printk("%s(): Unmapped SG at %p with %d elements\n",
-                             __FUNCTION__, scsi_sglist(pcmd), 
scsi_sg_count(pcmd)));
-       }
+       scsi_dma_unmap(pcmd);
+       DEBUG1(printk("%s(): Unmapped SG at %p with %d elements\n",
+                     __FUNCTION__, scsi_sglist(pcmd), scsi_sg_count(pcmd)));
 }
 
 static void __inline__
@@ -593,23 +565,10 @@ dc390_StartSCSI( struct dc390_acb* pACB, struct 
dc390_dcb* pDCB, struct dc390_sr
     /* Command is written in CommandPhase, if SEL_W_ATN_STOP ... */
     if (cmd != SEL_W_ATN_STOP)
       {
-       if( pSRB->SRBFlag & AUTO_REQSENSE )
-         {
-           DC390_write8 (ScsiFifo, REQUEST_SENSE);
-           DC390_write8 (ScsiFifo, pDCB->TargetLUN << 5);
-           DC390_write8 (ScsiFifo, 0);
-           DC390_write8 (ScsiFifo, 0);
-           DC390_write8 (ScsiFifo, SCSI_SENSE_BUFFERSIZE);
-           DC390_write8 (ScsiFifo, 0);
-           DEBUG1(printk (KERN_DEBUG "DC390: AutoReqSense !\n"));
-         }
-       else    /* write cmnd to bus */ 
-         {
            u8 *ptr; u8 i;
            ptr = (u8 *)scmd->cmnd;
            for (i = 0; i < scmd->cmd_len; i++)
              DC390_write8 (ScsiFifo, *(ptr++));
-         }
       }
     DEBUG0(if (pACB->pActiveDCB)       \
           printk (KERN_WARNING "DC390: ActiveDCB != 0\n"));
@@ -1369,30 +1328,17 @@ dc390_DataInPhase( struct dc390_acb* pACB, struct 
dc390_srb* pSRB, u8 *psstatus)
 static void
 dc390_CommandPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 
*psstatus)
 {
-    struct dc390_dcb*   pDCB;
     u8  i, cnt;
     u8     *ptr;
 
     DC390_write8 (ScsiCmd, RESET_ATN_CMD);
     DC390_write8 (ScsiCmd, CLEAR_FIFO_CMD);
-    if( !(pSRB->SRBFlag & AUTO_REQSENSE) )
-    {
+
        cnt = (u8) pSRB->pcmd->cmd_len;
        ptr = (u8 *) pSRB->pcmd->cmnd;
        for(i=0; i < cnt; i++)
            DC390_write8 (ScsiFifo, *(ptr++));
-    }
-    else
-    {
-       DC390_write8 (ScsiFifo, REQUEST_SENSE);
-       pDCB = pACB->pActiveDCB;
-       DC390_write8 (ScsiFifo, pDCB->TargetLUN << 5);
-       DC390_write8 (ScsiFifo, 0);
-       DC390_write8 (ScsiFifo, 0);
-       DC390_write8 (ScsiFifo, SCSI_SENSE_BUFFERSIZE);
-       DC390_write8 (ScsiFifo, 0);
-       DEBUG0(printk(KERN_DEBUG "DC390: AutoReqSense (CmndPhase)!\n"));
-    }
+
     pSRB->SRBState = SRB_COMMAND;
     DC390_write8 (ScsiCmd, INFO_XFER_CMD);
 }
@@ -1678,16 +1624,16 @@ dc390_RequestSense(struct dc390_acb* pACB, struct 
dc390_dcb* pDCB, struct dc390_
                              pcmd->cmnd[0], pDCB->TargetID, pDCB->TargetLUN));
 
        pSRB->SRBFlag |= AUTO_REQSENSE;
-       pSRB->SavedTotXLen = pSRB->TotalXferredLen;
        pSRB->AdaptStatus = 0;
        pSRB->TargetStatus = 0; /* CHECK_CONDITION<<1; */
 
        /* We are called from SRBdone, original PCI mapping has been removed
         * already, new one is set up from StartSCSI */
        pSRB->SGIndex = 0;
-
        pSRB->TotalXferredLen = 0;
        pSRB->SGToBeXferLen = 0;
+
+       scsi_eh_prep_cmnd(pcmd, &pSRB->ses, NULL, 0, ~0);
        return dc390_StartSCSI(pACB, pDCB, pSRB);
 }
 
@@ -1708,6 +1654,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* 
pDCB, struct dc390_srb*
                pSRB, pcmd->serial_number));
     if(pSRB->SRBFlag & AUTO_REQSENSE)
     {  /* Last command was a Request Sense */
+       scsi_eh_restore_cmnd(pSRB->pcmd, &pSRB->ses);
        pSRB->SRBFlag &= ~AUTO_REQSENSE;
        pSRB->AdaptStatus = 0;
        pSRB->TargetStatus = SAM_STAT_CHECK_CONDITION;
@@ -2210,6 +2157,7 @@ static struct scsi_host_template driver_template = {
        .cmd_per_lun            = 1,
        .use_clustering         = ENABLE_CLUSTERING,
        .max_sectors            = 0x4000, /* 8MiB = 16 * 1024 * 512 */
+       .sense_buffsize         = SCSI_SENSE_BUFFERSIZE,
 };
 
 /***********************************************************************
diff --git a/drivers/scsi/tmscsim.h b/drivers/scsi/tmscsim.h
index 77adc54..909e9ac 100644
--- a/drivers/scsi/tmscsim.h
+++ b/drivers/scsi/tmscsim.h
@@ -9,6 +9,7 @@
 #define _TMSCSIM_H
 
 #include <linux/types.h>
+#include <scsi/scsi_eh.h>
 
 #define SCSI_IRQ_NONE 255
 
@@ -26,7 +27,7 @@
 */
 struct dc390_srb
 {
-//u8           CmdBlock[12];
+struct scsi_eh_save    ses;
 
 struct dc390_srb       *pNextSRB;
 struct dc390_dcb       *pSRBDCB;
@@ -40,7 +41,6 @@ unsigned long SGBusAddr;      /*;a segment starting address 
as seen by AM53C974A
                                  addresses by default */
 unsigned long  SGToBeXferLen;  /*; to be xfer length */
 unsigned long  TotalXferredLen;
-unsigned long  SavedTotXLen;
 unsigned long  Saved_Ptr;
 u32            SRBState;
 
@@ -298,13 +298,6 @@ struct dc390_srb   SRB_array[MAX_SRB_CNT];         /* 50 
SRBs */
 #define ABORT_TAG      0x0d
 
 /*
- *     SISC query queue
- */
-typedef struct {
-       dma_addr_t              saved_dma_handle;
-} dc390_cmd_scp_t;
-
-/*
 ;==========================================================
 ; EEPROM byte offset
 ;==========================================================
-- 
1.5.3.3

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to