Commit 41ce639a authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by James Bottomley

[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: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Acked-by: default avatarMike Miller <Mike.Miller@hp.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent fb119935
...@@ -555,7 +555,6 @@ complete_scsi_command( CommandList_struct *cp, int timeout, __u32 tag) ...@@ -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) ...@@ -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) ...@@ -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, ...@@ -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? */
if (!cmd->use_sg) { BUG_ON(scsi_sg_count(cmd) > MAXSGENTRIES);
if (cmd->request_bufflen) { /* anything to xfer? */
use_sg = scsi_dma_map(cmd);
addr64 = (__u64) pci_map_single(pdev, if (use_sg) { /* not too many addrs? */
cmd->request_buffer, scsi_for_each_sg(cmd, sg, use_sg, i) {
cmd->request_bufflen, addr64 = (__u64) sg_dma_address(sg);
cmd->sc_data_direction); len = sg_dma_len(sg);
cp->SG[i].Addr.lower =
cp->SG[0].Addr.lower = (__u32) (addr64 & (__u64) 0x00000000FFFFFFFF);
(__u32) (addr64 & (__u64) 0x00000000FFFFFFFF); cp->SG[i].Addr.upper =
cp->SG[0].Addr.upper = (__u32) ((addr64 >> 32) & (__u64) 0x00000000FFFFFFFF);
(__u32) ((addr64 >> 32) & (__u64) 0x00000000FFFFFFFF); cp->SG[i].Len = len;
cp->SG[0].Len = cmd->request_bufflen; cp->SG[i].Ext = 0; // we are not chaining
nsegs=1;
}
} /* 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;
} }
......
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