[SCSI] cciss: 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. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Acked-by: Mike Miller <Mike.Miller@hp.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
fb119935e1
commit
41ce639a1c
@@ -555,7 +555,6 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
|
|||||||
{
|
{
|
||||||
struct scsi_cmnd *cmd;
|
struct scsi_cmnd *cmd;
|
||||||
ctlr_info_t *ctlr;
|
ctlr_info_t *ctlr;
|
||||||
u64bit addr64;
|
|
||||||
ErrorInfo_struct *ei;
|
ErrorInfo_struct *ei;
|
||||||
|
|
||||||
ei = cp->err_info;
|
ei = cp->err_info;
|
||||||
@@ -569,20 +568,7 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
|
|||||||
cmd = (struct scsi_cmnd *) cp->scsi_cmd;
|
cmd = (struct scsi_cmnd *) cp->scsi_cmd;
|
||||||
ctlr = hba[cp->ctlr];
|
ctlr = hba[cp->ctlr];
|
||||||
|
|
||||||
/* undo the DMA mappings */
|
scsi_dma_unmap(cmd);
|
||||||
|
|
||||||
if (cmd->use_sg) {
|
|
||||||
pci_unmap_sg(ctlr->pdev,
|
|
||||||
cmd->request_buffer, cmd->use_sg,
|
|
||||||
cmd->sc_data_direction);
|
|
||||||
}
|
|
||||||
else if (cmd->request_bufflen) {
|
|
||||||
addr64.val32.lower = cp->SG[0].Addr.lower;
|
|
||||||
addr64.val32.upper = cp->SG[0].Addr.upper;
|
|
||||||
pci_unmap_single(ctlr->pdev, (dma_addr_t) addr64.val,
|
|
||||||
cmd->request_bufflen,
|
|
||||||
cmd->sc_data_direction);
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd->result = (DID_OK << 16); /* host byte */
|
cmd->result = (DID_OK << 16); /* host byte */
|
||||||
cmd->result |= (COMMAND_COMPLETE << 8); /* msg byte */
|
cmd->result |= (COMMAND_COMPLETE << 8); /* msg byte */
|
||||||
@@ -597,7 +583,7 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag)
|
|||||||
ei->SenseLen > SCSI_SENSE_BUFFERSIZE ?
|
ei->SenseLen > SCSI_SENSE_BUFFERSIZE ?
|
||||||
SCSI_SENSE_BUFFERSIZE :
|
SCSI_SENSE_BUFFERSIZE :
|
||||||
ei->SenseLen);
|
ei->SenseLen);
|
||||||
cmd->resid = ei->ResidualCnt;
|
scsi_set_resid(cmd, ei->ResidualCnt);
|
||||||
|
|
||||||
if(ei->CommandStatus != 0)
|
if(ei->CommandStatus != 0)
|
||||||
{ /* an error has occurred */
|
{ /* an error has occurred */
|
||||||
@@ -1204,46 +1190,29 @@ cciss_scatter_gather(struct pci_dev *pdev,
|
|||||||
CommandList_struct *cp,
|
CommandList_struct *cp,
|
||||||
struct scsi_cmnd *cmd)
|
struct scsi_cmnd *cmd)
|
||||||
{
|
{
|
||||||
unsigned int use_sg, nsegs=0, len;
|
unsigned int len;
|
||||||
struct scatterlist *scatter = (struct scatterlist *) cmd->request_buffer;
|
struct scatterlist *sg;
|
||||||
__u64 addr64;
|
__u64 addr64;
|
||||||
|
int use_sg, i;
|
||||||
|
|
||||||
/* is it just one virtual address? */
|
BUG_ON(scsi_sg_count(cmd) > MAXSGENTRIES);
|
||||||
if (!cmd->use_sg) {
|
|
||||||
if (cmd->request_bufflen) { /* anything to xfer? */
|
|
||||||
|
|
||||||
addr64 = (__u64) pci_map_single(pdev,
|
use_sg = scsi_dma_map(cmd);
|
||||||
cmd->request_buffer,
|
if (use_sg) { /* not too many addrs? */
|
||||||
cmd->request_bufflen,
|
scsi_for_each_sg(cmd, sg, use_sg, i) {
|
||||||
cmd->sc_data_direction);
|
addr64 = (__u64) sg_dma_address(sg);
|
||||||
|
len = sg_dma_len(sg);
|
||||||
cp->SG[0].Addr.lower =
|
cp->SG[i].Addr.lower =
|
||||||
(__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
|
(__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
|
||||||
cp->SG[0].Addr.upper =
|
cp->SG[i].Addr.upper =
|
||||||
(__u32) ((addr64 >> 32) & (__u64) 0x00000000FFFFFFFF);
|
(__u32) ((addr64 >> 32) & (__u64) 0x00000000FFFFFFFF);
|
||||||
cp->SG[0].Len = cmd->request_bufflen;
|
cp->SG[i].Len = len;
|
||||||
nsegs=1;
|
cp->SG[i].Ext = 0; // we are not chaining
|
||||||
}
|
}
|
||||||
} /* else, must be a list of virtual addresses.... */
|
|
||||||
else if (cmd->use_sg <= MAXSGENTRIES) { /* not too many addrs? */
|
|
||||||
|
|
||||||
use_sg = pci_map_sg(pdev, cmd->request_buffer, cmd->use_sg,
|
|
||||||
cmd->sc_data_direction);
|
|
||||||
|
|
||||||
for (nsegs=0; nsegs < use_sg; nsegs++) {
|
|
||||||
addr64 = (__u64) sg_dma_address(&scatter[nsegs]);
|
|
||||||
len = sg_dma_len(&scatter[nsegs]);
|
|
||||||
cp->SG[nsegs].Addr.lower =
|
|
||||||
(__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
|
|
||||||
cp->SG[nsegs].Addr.upper =
|
|
||||||
(__u32) ((addr64 >> 32) & (__u64) 0x00000000FFFFFFFF);
|
|
||||||
cp->SG[nsegs].Len = len;
|
|
||||||
cp->SG[nsegs].Ext = 0; // we are not chaining
|
|
||||||
}
|
}
|
||||||
} else BUG();
|
|
||||||
|
|
||||||
cp->Header.SGList = (__u8) nsegs; /* no. SGs contig in this cmd */
|
cp->Header.SGList = (__u8) use_sg; /* no. SGs contig in this cmd */
|
||||||
cp->Header.SGTotal = (__u16) nsegs; /* total sgs in this cmd list */
|
cp->Header.SGTotal = (__u16) use_sg; /* total sgs in this cmd list */
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user