Commit 4a904a65 authored by Guennadi Liakhovetski's avatar Guennadi Liakhovetski Committed by James Bottomley

[SCSI] tmscsim: clean-up status codes

Remove redundant defines from the header, replace all occurances in the
code with standard SAM_STAT_ macros. Also fix what seems to be a typo in
testing for (status == H_OVER_UNDER_RUN)...
Signed-off-by: default avatarG. Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 462b7859
...@@ -1564,7 +1564,8 @@ dc390_Disconnect( struct dc390_acb* pACB ) ...@@ -1564,7 +1564,8 @@ dc390_Disconnect( struct dc390_acb* pACB )
if( (pSRB->SRBState & (SRB_START_+SRB_MSGOUT)) || if( (pSRB->SRBState & (SRB_START_+SRB_MSGOUT)) ||
!(pSRB->SRBState & (SRB_DISCONNECT+SRB_COMPLETED)) ) !(pSRB->SRBState & (SRB_DISCONNECT+SRB_COMPLETED)) )
{ /* Selection time out */ { /* Selection time out */
pSRB->TargetStatus = SCSI_STAT_SEL_TIMEOUT; pSRB->AdaptStatus = H_SEL_TIMEOUT;
pSRB->TargetStatus = 0;
goto disc1; goto disc1;
} }
else if (!(pSRB->SRBState & SRB_DISCONNECT) && (pSRB->SRBState & SRB_COMPLETED)) else if (!(pSRB->SRBState & SRB_DISCONNECT) && (pSRB->SRBState & SRB_COMPLETED))
...@@ -1713,17 +1714,17 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* ...@@ -1713,17 +1714,17 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb*
{ /* Last command was a Request Sense */ { /* Last command was a Request Sense */
pSRB->SRBFlag &= ~AUTO_REQSENSE; pSRB->SRBFlag &= ~AUTO_REQSENSE;
pSRB->AdaptStatus = 0; pSRB->AdaptStatus = 0;
pSRB->TargetStatus = CHECK_CONDITION << 1; pSRB->TargetStatus = SAM_STAT_CHECK_CONDITION;
//pcmd->result = MK_RES(DRIVER_SENSE,DID_OK,0,status); //pcmd->result = MK_RES(DRIVER_SENSE,DID_OK,0,status);
if (status == (CHECK_CONDITION << 1)) if (status == SAM_STAT_CHECK_CONDITION)
pcmd->result = MK_RES_LNX(0, DID_BAD_TARGET, 0, /*CHECK_CONDITION*/0); pcmd->result = MK_RES_LNX(0, DID_BAD_TARGET, 0, /*CHECK_CONDITION*/0);
else /* Retry */ else /* Retry */
{ {
if( pSRB->pcmd->cmnd[0] == TEST_UNIT_READY /* || pSRB->pcmd->cmnd[0] == START_STOP */) if( pSRB->pcmd->cmnd[0] == TEST_UNIT_READY /* || pSRB->pcmd->cmnd[0] == START_STOP */)
{ {
/* Don't retry on TEST_UNIT_READY */ /* Don't retry on TEST_UNIT_READY */
pcmd->result = MK_RES_LNX(DRIVER_SENSE,DID_OK,0,CHECK_CONDITION); pcmd->result = MK_RES_LNX(DRIVER_SENSE, DID_OK, 0, SAM_STAT_CHECK_CONDITION);
REMOVABLEDEBUG(printk(KERN_INFO "Cmd=%02x, Result=%08x, XferL=%08x\n",pSRB->pcmd->cmnd[0],\ REMOVABLEDEBUG(printk(KERN_INFO "Cmd=%02x, Result=%08x, XferL=%08x\n",pSRB->pcmd->cmnd[0],\
(u32) pcmd->result, (u32) pSRB->TotalXferredLen)); (u32) pcmd->result, (u32) pSRB->TotalXferredLen));
} else { } else {
...@@ -1739,7 +1740,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* ...@@ -1739,7 +1740,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb*
} }
if( status ) if( status )
{ {
if( status_byte(status) == CHECK_CONDITION ) if (status == SAM_STAT_CHECK_CONDITION)
{ {
if (dc390_RequestSense(pACB, pDCB, pSRB)) { if (dc390_RequestSense(pACB, pDCB, pSRB)) {
SET_RES_DID(pcmd->result, DID_ERROR); SET_RES_DID(pcmd->result, DID_ERROR);
...@@ -1747,7 +1748,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* ...@@ -1747,7 +1748,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb*
} }
return; return;
} }
else if( status_byte(status) == QUEUE_FULL ) else if (status == SAM_STAT_TASK_SET_FULL)
{ {
scsi_track_queue_full(pcmd->device, pDCB->GoingSRBCnt - 1); scsi_track_queue_full(pcmd->device, pDCB->GoingSRBCnt - 1);
scsi_sg_count(pcmd) = pSRB->SavedSGCount; scsi_sg_count(pcmd) = pSRB->SavedSGCount;
...@@ -1755,14 +1756,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* ...@@ -1755,14 +1756,7 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb*
pSRB->TotalXferredLen = 0; pSRB->TotalXferredLen = 0;
SET_RES_DID(pcmd->result, DID_SOFT_ERROR); SET_RES_DID(pcmd->result, DID_SOFT_ERROR);
} }
else if(status == SCSI_STAT_SEL_TIMEOUT) else if (status == SAM_STAT_BUSY &&
{
pSRB->AdaptStatus = H_SEL_TIMEOUT;
pSRB->TargetStatus = 0;
pcmd->result = MK_RES(0,DID_NO_CONNECT,0,0);
/* Devices are removed below ... */
}
else if (status_byte(status) == BUSY &&
(pcmd->cmnd[0] == TEST_UNIT_READY || pcmd->cmnd[0] == INQUIRY) && (pcmd->cmnd[0] == TEST_UNIT_READY || pcmd->cmnd[0] == INQUIRY) &&
pACB->scan_devices) pACB->scan_devices)
{ {
...@@ -1780,12 +1774,17 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb* ...@@ -1780,12 +1774,17 @@ dc390_SRBdone( struct dc390_acb* pACB, struct dc390_dcb* pDCB, struct dc390_srb*
else else
{ /* Target status == 0 */ { /* Target status == 0 */
status = pSRB->AdaptStatus; status = pSRB->AdaptStatus;
if(status & H_OVER_UNDER_RUN) if (status == H_OVER_UNDER_RUN)
{ {
pSRB->TargetStatus = 0; pSRB->TargetStatus = 0;
SET_RES_DID(pcmd->result,DID_OK); SET_RES_DID(pcmd->result,DID_OK);
SET_RES_MSG(pcmd->result,pSRB->EndMessage); SET_RES_MSG(pcmd->result,pSRB->EndMessage);
} }
else if (status == H_SEL_TIMEOUT)
{
pcmd->result = MK_RES(0, DID_NO_CONNECT, 0, 0);
/* Devices are removed below ... */
}
else if( pSRB->SRBStatus & PARITY_ERROR) else if( pSRB->SRBStatus & PARITY_ERROR)
{ {
//pcmd->result = MK_RES(0,DID_PARITY,pSRB->EndMessage,0); //pcmd->result = MK_RES(0,DID_PARITY,pSRB->EndMessage,0);
......
...@@ -258,13 +258,6 @@ struct dc390_srb SRB_array[MAX_SRB_CNT]; /* 50 SRBs */ ...@@ -258,13 +258,6 @@ struct dc390_srb SRB_array[MAX_SRB_CNT]; /* 50 SRBs */
#define H_BAD_CCB_OR_SG 0x1A #define H_BAD_CCB_OR_SG 0x1A
#define H_ABORT 0x0FF #define H_ABORT 0x0FF
/*; SCSI Status byte codes*/
/* The values defined in include/scsi/scsi.h, to be shifted << 1 */
#define SCSI_STAT_UNEXP_BUS_F 0xFD /*; Unexpect Bus Free */
#define SCSI_STAT_BUS_RST_DETECT 0xFE /*; Scsi Bus Reset detected */
#define SCSI_STAT_SEL_TIMEOUT 0xFF /*; Selection Time out */
/* cmd->result */ /* cmd->result */
#define RES_TARGET 0x000000FF /* Target State */ #define RES_TARGET 0x000000FF /* Target State */
#define RES_TARGET_LNX STATUS_MASK /* Only official ... */ #define RES_TARGET_LNX STATUS_MASK /* Only official ... */
...@@ -273,7 +266,7 @@ struct dc390_srb SRB_array[MAX_SRB_CNT]; /* 50 SRBs */ ...@@ -273,7 +266,7 @@ struct dc390_srb SRB_array[MAX_SRB_CNT]; /* 50 SRBs */
#define RES_DRV 0xFF000000 /* DRIVER_ codes */ #define RES_DRV 0xFF000000 /* DRIVER_ codes */
#define MK_RES(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt)) #define MK_RES(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt))
#define MK_RES_LNX(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt)<<1) #define MK_RES_LNX(drv,did,msg,tgt) ((int)(drv)<<24 | (int)(did)<<16 | (int)(msg)<<8 | (int)(tgt))
#define SET_RES_TARGET(who, tgt) do { who &= ~RES_TARGET; who |= (int)(tgt); } while (0) #define SET_RES_TARGET(who, tgt) do { who &= ~RES_TARGET; who |= (int)(tgt); } while (0)
#define SET_RES_TARGET_LNX(who, tgt) do { who &= ~RES_TARGET_LNX; who |= (int)(tgt) << 1; } while (0) #define SET_RES_TARGET_LNX(who, tgt) do { who &= ~RES_TARGET_LNX; who |= (int)(tgt) << 1; } while (0)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment