• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/scsi/

Lines Matching refs:pSRB

92  *				for pSRB==0. Better locking during init.*
254 static void dc390_DataOut_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
255 static void dc390_DataIn_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
256 static void dc390_Command_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
257 static void dc390_Status_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
258 static void dc390_MsgOut_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
259 static void dc390_MsgIn_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
260 static void dc390_DataOutPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
261 static void dc390_DataInPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
262 static void dc390_CommandPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
263 static void dc390_StatusPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
264 static void dc390_MsgOutPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
265 static void dc390_MsgInPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
266 static void dc390_Nop_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
267 static void dc390_Nop_1( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus);
272 static void dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB );
275 static void dc390_dumpinfo(struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB);
354 static void inline dc390_start_segment(struct dc390_srb* pSRB)
356 struct scatterlist *psgl = pSRB->pSegmentList;
359 pSRB->SGBusAddr = sg_dma_address(psgl);
360 pSRB->SGToBeXferLen = sg_dma_len(psgl);
363 static unsigned long inline dc390_advance_segment(struct dc390_srb* pSRB, u32 residue)
365 unsigned long xfer = pSRB->SGToBeXferLen - residue;
368 pSRB->SGBusAddr += xfer;
369 pSRB->TotalXferredLen += xfer;
370 pSRB->SGToBeXferLen = residue;
390 static __inline__ void dc390_Free_insert (struct dc390_acb* pACB, struct dc390_srb* pSRB)
392 DEBUG0(printk ("DC390: Free SRB %p\n", pSRB));
393 pSRB->pNextSRB = pACB->pFreeSRB;
394 pACB->pFreeSRB = pSRB;
397 static __inline__ void dc390_Going_append (struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
400 DEBUG0(printk("DC390: Append SRB %p to Going\n", pSRB));
403 pDCB->pGoingLast->pNextSRB = pSRB;
405 pDCB->pGoingSRB = pSRB;
407 pDCB->pGoingLast = pSRB;
409 pSRB->pNextSRB = NULL;
412 static __inline__ void dc390_Going_remove (struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
414 DEBUG0(printk("DC390: Remove SRB %p from Going\n", pSRB));
415 if (pSRB == pDCB->pGoingSRB)
416 pDCB->pGoingSRB = pSRB->pNextSRB;
420 while (psrb && psrb->pNextSRB != pSRB)
423 { printk (KERN_ERR "DC390: Remove non-ex. SRB %p from Going!\n", pSRB); return; }
424 psrb->pNextSRB = pSRB->pNextSRB;
425 if (pSRB == pDCB->pGoingLast)
441 static int dc390_pci_map (struct dc390_srb* pSRB)
444 struct scsi_cmnd *pcmd = pSRB->pcmd;
445 struct pci_dev *pdev = pSRB->pSRBDCB->pDCBACB->pdev;
449 if (pSRB->SRBFlag & AUTO_REQSENSE) {
450 pSRB->pSegmentList = dc390_sg_build_single(&pSRB->Segmentx, pcmd->sense_buffer, sizeof(pcmd->sense_buffer));
451 pSRB->SGcount = pci_map_sg(pdev, pSRB->pSegmentList, 1,
453 cmdp->saved_dma_handle = sg_dma_address(pSRB->pSegmentList);
456 if (pSRB->SGcount != 1)
461 pSRB->pSegmentList = (struct scatterlist *) pcmd->request_buffer;
462 pSRB->SGcount = pci_map_sg(pdev, pSRB->pSegmentList, pcmd->use_sg,
465 if (!pSRB->SGcount)
468 __FUNCTION__, pcmd->request_buffer, pSRB->SGcount, pcmd->use_sg));
471 pSRB->pSegmentList = dc390_sg_build_single(&pSRB->Segmentx, pcmd->request_buffer, pcmd->request_bufflen);
472 pSRB->SGcount = pci_map_sg(pdev, pSRB->pSegmentList, 1,
474 cmdp->saved_dma_handle = sg_dma_address(pSRB->pSegmentList);
477 if (pSRB->SGcount != 1)
482 pSRB->SGcount = 0;
488 static void dc390_pci_unmap (struct dc390_srb* pSRB)
490 struct scsi_cmnd *pcmd = pSRB->pcmd;
491 struct pci_dev *pdev = pSRB->pSRBDCB->pDCBACB->pdev;
494 if (pSRB->SRBFlag) {
495 pci_unmap_sg(pdev, &pSRB->Segmentx, 1, DMA_FROM_DEVICE);
501 pci_unmap_sg(pdev, &pSRB->Segmentx, 1, pcmd->sc_data_direction);
507 dc390_freetag (struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
509 if (pSRB->TagNumber != SCSI_NO_TAG) {
510 pDCB->TagMask &= ~(1 << pSRB->TagNumber); /* free tag mask */
511 pSRB->TagNumber = SCSI_NO_TAG;
517 dc390_StartSCSI( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
519 struct scsi_cmnd *scmd = pSRB->pcmd;
524 pSRB->ScsiPhase = SCSI_NOP0;
530 pSRB->SRBState, pSRB->SRBFlag);
531 pSRB->SRBState = SRB_READY;
541 dc390_pci_map(pSRB);
558 if (! (pSRB->SRBFlag & AUTO_REQSENSE))
564 (((scmd->cmnd[0] == REQUEST_SENSE || (pSRB->SRBFlag & AUTO_REQSENSE)) &&
570 pSRB->MsgCnt = 0;
577 pSRB->TagNumber = tag[1];
579 DEBUG1(printk(KERN_INFO "DC390: Select w/DisCn for Cmd %li (SRB %p), block tag %02x\n", scmd->pid, pSRB, tag[1]));
584 DEBUG1(printk(KERN_INFO "DC390: Select w%s/DisCn for Cmd %li (SRB %p), No TagQ\n", disc_allowed ? "" : "o", scmd->pid, pSRB));
587 pSRB->SRBState = SRB_START_;
593 pSRB->MsgOutBuf[0] = EXTENDED_MESSAGE;
594 pSRB->MsgOutBuf[1] = 3;
595 pSRB->MsgOutBuf[2] = EXTENDED_SDTR;
596 pSRB->MsgOutBuf[3] = pDCB->NegoPeriod;
598 pSRB->MsgOutBuf[4] = Sync_Off;
599 pSRB->MsgCnt = 5;
600 //pSRB->SRBState = SRB_MSGOUT_;
601 pSRB->SRBState |= DO_SYNC_NEGO;
608 if( pSRB->SRBFlag & AUTO_REQSENSE )
633 dc390_freetag (pDCB, pSRB);
636 pSRB->SRBState = SRB_READY;
643 pDCB->pActiveSRB = pSRB;
645 pSRB->ScsiPhase = SCSI_NOP1;
663 struct dc390_srb *pSRB;
733 pSRB = pDCB->pActiveSRB;
735 dc390_EnableMsgOut_Abort (pACB, pSRB);
737 phase = pSRB->ScsiPhase;
740 ( *stateV )( pACB, pSRB, &sstatus );
742 pSRB->ScsiPhase = sstatus & 7;
746 ( *stateV )( pACB, pSRB, &sstatus );
765 dc390_DataOut_0(struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
773 if( !(pSRB->SRBState & SRB_XFERPAD) )
776 pSRB->SRBStatus |= PARITY_ERROR;
783 if (pSRB->SGToBeXferLen)
794 pSRB->TotalXferredLen += pSRB->SGToBeXferLen;
795 pSRB->SGIndex++;
796 if( pSRB->SGIndex < pSRB->SGcount )
798 pSRB->pSegmentList++;
800 dc390_start_segment(pSRB);
803 pSRB->SGToBeXferLen = 0;
812 dc390_advance_segment(pSRB, ResidCnt);
823 dc390_DataIn_0(struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
831 if( !(pSRB->SRBState & SRB_XFERPAD) )
834 pSRB->SRBStatus |= PARITY_ERROR;
842 if (pSRB->SGToBeXferLen)
858 DEBUG1(printk (KERN_DEBUG "Count_2_Zero (ResidCnt=%u,ToBeXfer=%lu),", ResidCnt, pSRB->SGToBeXferLen));
862 pSRB->TotalXferredLen += pSRB->SGToBeXferLen;
863 pSRB->SGIndex++;
864 if( pSRB->SGIndex < pSRB->SGcount )
866 pSRB->pSegmentList++;
868 dc390_start_segment(pSRB);
871 pSRB->SGToBeXferLen = 0;
916 xferCnt = dc390_advance_segment(pSRB, ResidCnt);
920 size_t offset = pSRB->SGBusAddr - sg_dma_address(pSRB->pSegmentList);
927 ptr = scsi_kmap_atomic_sg(pSRB->pSegmentList, pSRB->SGcount, &offset, &count);
936 xferCnt += dc390_advance_segment(pSRB, pSRB->SGToBeXferLen - 1);
939 pSRB->TotalXferredLen, pSRB->SGToBeXferLen));
950 dc390_Command_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
955 dc390_Status_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
958 pSRB->TargetStatus = DC390_read8 (ScsiFifo);
960 pSRB->EndMessage = DC390_read8 (ScsiFifo); /* get message */
963 pSRB->SRBState = SRB_COMPLETED;
968 dc390_MsgOut_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
970 if( pSRB->SRBState & (SRB_UNEXPECT_RESEL+SRB_ABORT_SENT) )
1003 dc390_MsgIn_reject (struct dc390_acb* pACB, struct dc390_srb* pSRB)
1005 pSRB->MsgOutBuf[0] = MESSAGE_REJECT;
1006 pSRB->MsgCnt = 1;
1013 dc390_EnableMsgOut_Abort ( struct dc390_acb* pACB, struct dc390_srb* pSRB )
1015 pSRB->MsgOutBuf[0] = ABORT;
1016 pSRB->MsgCnt = 1; DC390_ENABLE_MSGOUT;
1017 pSRB->pSRBDCB->DCBFlag &= ~ABORT_DEV_;
1023 struct dc390_srb* pSRB = pDCB->pGoingSRB;
1025 if (pSRB)
1027 struct scsi_cmnd *scmd = scsi_find_tag(pSRB->pcmd->device, tag);
1028 pSRB = (struct dc390_srb *)scmd->host_scribble;
1032 pSRB->SRBState = SRB_ABORT_SENT;
1033 dc390_EnableMsgOut_Abort( pACB, pSRB );
1036 if (!(pSRB->SRBState & SRB_DISCONNECT))
1039 pDCB->pActiveSRB = pSRB;
1040 pSRB->SRBState = SRB_DATA_XFER;
1045 pSRB = pACB->pTmpSRB;
1046 pSRB->SRBState = SRB_UNEXPECT_RESEL;
1047 pDCB->pActiveSRB = pSRB;
1048 pSRB->MsgOutBuf[0] = ABORT_TAG;
1049 pSRB->MsgCnt = 1; DC390_ENABLE_MSGOUT;
1051 return pSRB;
1057 dc390_MsgIn_set_async (struct dc390_acb* pACB, struct dc390_srb* pSRB)
1059 struct dc390_dcb* pDCB = pSRB->pSRBDCB;
1060 if (!(pSRB->SRBState & DO_SYNC_NEGO))
1062 pSRB->SRBState &= ~DO_SYNC_NEGO;
1075 dc390_MsgIn_set_sync (struct dc390_acb* pACB, struct dc390_srb* pSRB)
1079 struct dc390_dcb* pDCB = pSRB->pSRBDCB;
1083 if (!(pSRB->SRBState & DO_SYNC_NEGO))
1086 pDCB->TargetID, pSRB->MsgInBuf[3]<<2, pSRB->MsgInBuf[4]);
1089 //dc390_MsgIn_reject (pACB, pSRB);
1090 //return dc390_MsgIn_set_async (pACB, pSRB);
1093 if (pSRB->MsgInBuf[4] > 15)
1096 pSRB->MsgInBuf[4] = 15;
1098 if (pSRB->MsgInBuf[3] < pDCB->NegoPeriod)
1101 pSRB->MsgInBuf[3] = pDCB->NegoPeriod;
1103 memcpy (pSRB->MsgOutBuf, pSRB->MsgInBuf, 5);
1104 pSRB->MsgCnt = 5;
1108 pSRB->SRBState &= ~DO_SYNC_NEGO;
1111 pDCB->SyncOffset |= pSRB->MsgInBuf[4];
1112 pDCB->NegoPeriod = pSRB->MsgInBuf[3];
1114 wval = (u16) pSRB->MsgInBuf[3];
1150 dc390_restore_ptr (struct dc390_acb* pACB, struct dc390_srb* pSRB)
1152 struct scsi_cmnd *pcmd = pSRB->pcmd;
1154 pSRB->TotalXferredLen = 0;
1155 pSRB->SGIndex = 0;
1158 pSRB->pSegmentList = (struct scatterlist *)pcmd->request_buffer;
1159 psgl = pSRB->pSegmentList;
1160 //dc390_pci_sync(pSRB);
1162 while (pSRB->TotalXferredLen + (unsigned long) sg_dma_len(psgl) < pSRB->Saved_Ptr)
1164 pSRB->TotalXferredLen += (unsigned long) sg_dma_len(psgl);
1165 pSRB->SGIndex++;
1166 if( pSRB->SGIndex < pSRB->SGcount )
1168 pSRB->pSegmentList++;
1170 dc390_start_segment(pSRB);
1173 pSRB->SGToBeXferLen = 0;
1176 saved = pSRB->Saved_Ptr - pSRB->TotalXferredLen;
1177 pSRB->SGToBeXferLen -= saved;
1178 pSRB->SGBusAddr += saved;
1180 pSRB->SGIndex, pSRB->Saved_Ptr, pSRB->SGBusAddr);
1183 //dc390_pci_sync(pSRB);
1185 sg_dma_len(&pSRB->Segmentx) = pcmd->request_bufflen - pSRB->Saved_Ptr;
1186 pSRB->SGcount = 1;
1187 pSRB->pSegmentList = (struct scatterlist *) &pSRB->Segmentx;
1189 pSRB->SGcount = 0;
1193 pSRB->TotalXferredLen = pSRB->Saved_Ptr;
1223 dc390_MsgIn_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1229 pSRB->MsgInBuf[pACB->MsgLen++] = DC390_read8 (ScsiFifo);
1230 //pSRB->SRBState = 0;
1233 if (dc390_MsgIn_complete (pSRB->MsgInBuf, pACB->MsgLen))
1235 DEBUG0 (printk (KERN_INFO "DC390: MsgIn:"); dc390_printMsg (pSRB->MsgInBuf, pACB->MsgLen));
1237 switch (pSRB->MsgInBuf[0])
1240 pSRB->SRBState = SRB_DISCONNECT; break;
1245 pSRB = dc390_MsgIn_QTag (pACB, pDCB, pSRB->MsgInBuf[1]);
1251 if( pSRB->SRBState & DO_SYNC_NEGO)
1252 dc390_MsgIn_set_async (pACB, pSRB);
1257 if (pSRB->MsgInBuf[1] != 3 || pSRB->MsgInBuf[2] != EXTENDED_SDTR)
1258 dc390_MsgIn_reject (pACB, pSRB);
1261 if (pSRB->MsgInBuf[3] == 0 || pSRB->MsgInBuf[4] == 0)
1262 dc390_MsgIn_set_async (pACB, pSRB);
1264 dc390_MsgIn_set_sync (pACB, pSRB);
1273 pSRB->Saved_Ptr = pSRB->TotalXferredLen;
1278 dc390_restore_ptr (pACB, pSRB);
1282 default: dc390_MsgIn_reject (pACB, pSRB);
1286 pSRB->SRBState &= ~SRB_MSGIN;
1297 dc390_DataIO_Comm( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 ioDir)
1302 if (pSRB == pACB->pTmpSRB)
1305 printk(KERN_ERR "DC390: pSRB == pTmpSRB! (TagQ Error?) (%02i-%i)\n", pDCB->TargetID, pDCB->TargetLUN);
1307 printk(KERN_ERR "DC390: pSRB == pTmpSRB! (TagQ Error?) (DCB 0!)\n");
1311 pSRB = pDCB->pGoingSRB;
1312 pDCB->pActiveSRB = pSRB;
1314 pSRB->pSRBDCB = pDCB;
1315 dc390_EnableMsgOut_Abort(pACB, pSRB);
1322 if( pSRB->SGIndex < pSRB->SGcount )
1325 if( !pSRB->SGToBeXferLen )
1327 dc390_start_segment(pSRB);
1331 lval = pSRB->SGToBeXferLen;
1332 DEBUG1(printk (KERN_DEBUG " DC390: Start transfer: %li bytes (address %08lx)\n", lval, pSRB->SGBusAddr));
1339 DC390_write32 (DMA_XferCnt, pSRB->SGToBeXferLen);
1340 DC390_write32 (DMA_XferAddr, pSRB->SGBusAddr);
1343 pSRB->SRBState = SRB_DATA_XFER;
1354 if( pSRB->SGcount )
1356 pSRB->AdaptStatus = H_OVER_UNDER_RUN;
1357 pSRB->SRBStatus |= OVER_RUN;
1365 pSRB->SRBState |= SRB_XFERPAD;
1376 dc390_DataOutPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1378 dc390_DataIO_Comm (pACB, pSRB, WRITE_DIRECTION);
1382 dc390_DataInPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1384 dc390_DataIO_Comm (pACB, pSRB, READ_DIRECTION);
1388 dc390_CommandPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1396 if( !(pSRB->SRBFlag & AUTO_REQSENSE) )
1398 cnt = (u8) pSRB->pcmd->cmd_len;
1399 ptr = (u8 *) pSRB->pcmd->cmnd;
1410 DC390_write8 (ScsiFifo, sizeof(pSRB->pcmd->sense_buffer));
1414 pSRB->SRBState = SRB_COMMAND;
1419 dc390_StatusPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1422 pSRB->SRBState = SRB_STATUS;
1428 dc390_MsgOutPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1436 if( !(pSRB->SRBState & SRB_MSGOUT) )
1438 cnt = pSRB->MsgCnt;
1441 ptr = (u8 *) pSRB->MsgOutBuf;
1444 pSRB->MsgCnt = 0;
1446 (pSRB->MsgOutBuf[0] == ABORT) )
1447 pSRB->SRBState = SRB_ABORT_SENT;
1452 if( (pSRB->pcmd->cmnd[0] == INQUIRY ) ||
1453 (pSRB->pcmd->cmnd[0] == REQUEST_SENSE) ||
1454 (pSRB->SRBFlag & AUTO_REQSENSE) )
1475 pSRB->SRBState |= DO_SYNC_NEGO;
1481 dc390_MsgInPhase( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1484 if( !(pSRB->SRBState & SRB_MSGIN) )
1486 pSRB->SRBState &= ~SRB_DISCONNECT;
1487 pSRB->SRBState |= SRB_MSGIN;
1494 dc390_Nop_0( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1499 dc390_Nop_1( struct dc390_acb* pACB, struct dc390_srb* pSRB, u8 *psstatus)
1539 struct dc390_srb *pSRB, *psrb;
1557 pSRB = pDCB->pActiveSRB;
1559 pSRB->ScsiPhase = SCSI_NOP0;
1560 if( pSRB->SRBState & SRB_UNEXPECT_RESEL )
1561 pSRB->SRBState = 0;
1562 else if( pSRB->SRBState & SRB_ABORT_SENT )
1568 pSRB = pDCB->pGoingSRB;
1571 psrb = pSRB->pNextSRB;
1572 dc390_Free_insert (pACB, pSRB);
1573 pSRB = psrb;
1579 if( (pSRB->SRBState & (SRB_START_+SRB_MSGOUT)) ||
1580 !(pSRB->SRBState & (SRB_DISCONNECT+SRB_COMPLETED)) )
1582 pSRB->TargetStatus = SCSI_STAT_SEL_TIMEOUT;
1585 else if (!(pSRB->SRBState & SRB_DISCONNECT) && (pSRB->SRBState & SRB_COMPLETED))
1588 dc390_freetag (pDCB, pSRB);
1590 pSRB->SRBState = SRB_FREE;
1591 dc390_SRBdone( pACB, pDCB, pSRB);
1602 struct dc390_srb* pSRB;
1611 pSRB = pDCB->pActiveSRB;
1614 struct scsi_cmnd *pcmd = pSRB->pcmd;
1617 dc390_Going_remove(pDCB, pSRB);
1618 dc390_Free_insert(pACB, pSRB);
1620 DEBUG0(printk(KERN_DEBUG"DC390: Return SRB %p to free\n", pSRB));
1647 pSRB = pACB->pTmpSRB;
1648 pDCB->pActiveSRB = pSRB;
1652 pSRB = pDCB->pActiveSRB;
1653 if( !pSRB || !(pSRB->SRBState & SRB_DISCONNECT) )
1655 pSRB= pACB->pTmpSRB;
1656 pSRB->SRBState = SRB_UNEXPECT_RESEL;
1659 pDCB->pActiveSRB = pSRB;
1660 dc390_EnableMsgOut_Abort ( pACB, pSRB );
1666 pSRB->SRBState = SRB_ABORT_SENT;
1669 dc390_EnableMsgOut_Abort( pACB, pSRB );
1672 pSRB->SRBState = SRB_DATA_XFER;
1676 DEBUG1(printk (KERN_DEBUG "Resel SRB(%p): TagNum (%02x)\n", pSRB, pSRB->TagNumber));
1677 pSRB->ScsiPhase = SCSI_NOP0;
1688 dc390_RequestSense(struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
1692 pcmd = pSRB->pcmd;
1697 pSRB->SRBFlag |= AUTO_REQSENSE;
1698 pSRB->SavedSGCount = pcmd->use_sg;
1699 pSRB->SavedTotXLen = pSRB->TotalXferredLen;
1700 pSRB->AdaptStatus = 0;
1701 pSRB->TargetStatus = 0; /* CHECK_CONDITION<<1; */
1705 pSRB->SGIndex = 0;
1707 pSRB->TotalXferredLen = 0;
1708 pSRB->SGToBeXferLen = 0;
1709 return dc390_StartSCSI(pACB, pDCB, pSRB);
1714 dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB )
1719 pcmd = pSRB->pcmd;
1721 dc390_pci_unmap(pSRB);
1723 status = pSRB->TargetStatus;
1726 pSRB, pcmd->pid));
1727 if(pSRB->SRBFlag & AUTO_REQSENSE)
1729 pSRB->SRBFlag &= ~AUTO_REQSENSE;
1730 pSRB->AdaptStatus = 0;
1731 pSRB->TargetStatus = CHECK_CONDITION << 1;
1738 if( pSRB->pcmd->cmnd[0] == TEST_UNIT_READY /* || pSRB->pcmd->cmnd[0] == START_STOP */)
1742 REMOVABLEDEBUG(printk(KERN_INFO "Cmd=%02x, Result=%08x, XferL=%08x\n",pSRB->pcmd->cmnd[0],\
1743 (u32) pcmd->result, (u32) pSRB->TotalXferredLen));
1746 pcmd->use_sg = pSRB->SavedSGCount;
1747 //pSRB->ScsiCmdLen = (u8) (pSRB->Segment1[0] >> 8);
1749 pSRB->TotalXferredLen = 0;
1759 if (dc390_RequestSense(pACB, pDCB, pSRB)) {
1768 pcmd->use_sg = pSRB->SavedSGCount;
1770 pSRB->TotalXferredLen = 0;
1775 pSRB->AdaptStatus = H_SEL_TIMEOUT;
1776 pSRB->TargetStatus = 0;
1784 pSRB->AdaptStatus = 0;
1785 pSRB->TargetStatus = status;
1786 pcmd->result = MK_RES(0,0,pSRB->EndMessage,/*status*/0);
1790 pSRB->TotalXferredLen = 0;
1797 status = pSRB->AdaptStatus;
1800 pSRB->TargetStatus = 0;
1802 SET_RES_MSG(pcmd->result,pSRB->EndMessage);
1804 else if( pSRB->SRBStatus & PARITY_ERROR)
1806 //pcmd->result = MK_RES(0,DID_PARITY,pSRB->EndMessage,0);
1808 SET_RES_MSG(pcmd->result,pSRB->EndMessage);
1812 pSRB->AdaptStatus = 0;
1813 pSRB->TargetStatus = 0;
1819 pcmd->resid = pcmd->request_bufflen - pSRB->TotalXferredLen;
1821 dc390_Going_remove (pDCB, pSRB);
1823 dc390_Free_insert (pACB, pSRB);
1968 static void dc390_dumpinfo (struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* pSRB)
1974 if (!pSRB && pDCB) pSRB = pDCB->pActiveSRB;
1976 if (pSRB)
1979 pSRB->TotalXferredLen, pSRB->SGToBeXferLen, pSRB->SRBState,
1980 pSRB->ScsiPhase);
1981 printk ("DC390: AdpaterStatus: %02x, SRB Status %02x\n", pSRB->AdaptStatus, pSRB->SRBStatus);