mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 08:31:55 +00:00
[SCSI] a100u2w: 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 <jens.axboe@oracle.com> did the for_each_sg cleanup. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
parent
e1eaf46009
commit
985c0a7277
@ -796,7 +796,7 @@ static void orc_interrupt(
|
|||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
static void inia100BuildSCB(ORC_HCS * pHCB, ORC_SCB * pSCB, struct scsi_cmnd * SCpnt)
|
static void inia100BuildSCB(ORC_HCS * pHCB, ORC_SCB * pSCB, struct scsi_cmnd * SCpnt)
|
||||||
{ /* Create corresponding SCB */
|
{ /* Create corresponding SCB */
|
||||||
struct scatterlist *pSrbSG;
|
struct scatterlist *sg;
|
||||||
ORC_SG *pSG; /* Pointer to SG list */
|
ORC_SG *pSG; /* Pointer to SG list */
|
||||||
int i, count_sg;
|
int i, count_sg;
|
||||||
ESCB *pEScb;
|
ESCB *pEScb;
|
||||||
@ -813,30 +813,22 @@ static void inia100BuildSCB(ORC_HCS * pHCB, ORC_SCB * pSCB, struct scsi_cmnd * S
|
|||||||
pSCB->SCB_Reserved1 = 0;
|
pSCB->SCB_Reserved1 = 0;
|
||||||
pSCB->SCB_SGLen = 0;
|
pSCB->SCB_SGLen = 0;
|
||||||
|
|
||||||
if ((pSCB->SCB_XferLen = (U32) SCpnt->request_bufflen)) {
|
pSCB->SCB_XferLen = (U32) scsi_bufflen(SCpnt);
|
||||||
pSG = (ORC_SG *) & pEScb->ESCB_SGList[0];
|
pSG = (ORC_SG *) & pEScb->ESCB_SGList[0];
|
||||||
if (SCpnt->use_sg) {
|
|
||||||
pSrbSG = (struct scatterlist *) SCpnt->request_buffer;
|
count_sg = scsi_dma_map(SCpnt);
|
||||||
count_sg = pci_map_sg(pHCB->pdev, pSrbSG, SCpnt->use_sg,
|
BUG_ON(count_sg < 0);
|
||||||
SCpnt->sc_data_direction);
|
if (count_sg) {
|
||||||
pSCB->SCB_SGLen = (U32) (count_sg * 8);
|
pSCB->SCB_SGLen = (U32) (count_sg * 8);
|
||||||
for (i = 0; i < count_sg; i++, pSG++, pSrbSG++) {
|
scsi_for_each_sg(SCpnt, sg, count_sg, i) {
|
||||||
pSG->SG_Ptr = (U32) sg_dma_address(pSrbSG);
|
pSG->SG_Ptr = (U32) sg_dma_address(sg);
|
||||||
pSG->SG_Len = (U32) sg_dma_len(pSrbSG);
|
pSG->SG_Len = (U32) sg_dma_len(sg);
|
||||||
}
|
pSG++;
|
||||||
} else if (SCpnt->request_bufflen != 0) {/* Non SG */
|
|
||||||
pSCB->SCB_SGLen = 0x8;
|
|
||||||
SCpnt->SCp.dma_handle = pci_map_single(pHCB->pdev,
|
|
||||||
SCpnt->request_buffer,
|
|
||||||
SCpnt->request_bufflen,
|
|
||||||
SCpnt->sc_data_direction);
|
|
||||||
pSG->SG_Ptr = (U32) SCpnt->SCp.dma_handle;
|
|
||||||
pSG->SG_Len = (U32) SCpnt->request_bufflen;
|
|
||||||
} else {
|
|
||||||
pSCB->SCB_SGLen = 0;
|
|
||||||
pSG->SG_Ptr = 0;
|
|
||||||
pSG->SG_Len = 0;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
pSCB->SCB_SGLen = 0;
|
||||||
|
pSG->SG_Ptr = 0;
|
||||||
|
pSG->SG_Len = 0;
|
||||||
}
|
}
|
||||||
pSCB->SCB_SGPAddr = (U32) pSCB->SCB_SensePAddr;
|
pSCB->SCB_SGPAddr = (U32) pSCB->SCB_SensePAddr;
|
||||||
pSCB->SCB_HaStat = 0;
|
pSCB->SCB_HaStat = 0;
|
||||||
@ -995,15 +987,7 @@ static void inia100SCBPost(BYTE * pHcb, BYTE * pScb)
|
|||||||
}
|
}
|
||||||
pSRB->result = pSCB->SCB_TaStat | (pSCB->SCB_HaStat << 16);
|
pSRB->result = pSCB->SCB_TaStat | (pSCB->SCB_HaStat << 16);
|
||||||
|
|
||||||
if (pSRB->use_sg) {
|
scsi_dma_unmap(pSRB);
|
||||||
pci_unmap_sg(pHCB->pdev,
|
|
||||||
(struct scatterlist *)pSRB->request_buffer,
|
|
||||||
pSRB->use_sg, pSRB->sc_data_direction);
|
|
||||||
} else if (pSRB->request_bufflen != 0) {
|
|
||||||
pci_unmap_single(pHCB->pdev, pSRB->SCp.dma_handle,
|
|
||||||
pSRB->request_bufflen,
|
|
||||||
pSRB->sc_data_direction);
|
|
||||||
}
|
|
||||||
|
|
||||||
pSRB->scsi_done(pSRB); /* Notify system DONE */
|
pSRB->scsi_done(pSRB); /* Notify system DONE */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user