Commit 69eca4f5 authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by James Bottomley

[SCSI] ncr53c8xx: 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: default avatarFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: Matthew Wilcox <matthew@wil.cx>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 938febd6
...@@ -529,43 +529,20 @@ static void __unmap_scsi_data(struct device *dev, struct scsi_cmnd *cmd) ...@@ -529,43 +529,20 @@ static void __unmap_scsi_data(struct device *dev, struct scsi_cmnd *cmd)
{ {
switch(cmd->__data_mapped) { switch(cmd->__data_mapped) {
case 2: case 2:
dma_unmap_sg(dev, cmd->request_buffer, cmd->use_sg, scsi_dma_unmap(cmd);
cmd->sc_data_direction);
break;
case 1:
dma_unmap_single(dev, cmd->__data_mapping,
cmd->request_bufflen,
cmd->sc_data_direction);
break; break;
} }
cmd->__data_mapped = 0; cmd->__data_mapped = 0;
} }
static u_long __map_scsi_single_data(struct device *dev, struct scsi_cmnd *cmd)
{
dma_addr_t mapping;
if (cmd->request_bufflen == 0)
return 0;
mapping = dma_map_single(dev, cmd->request_buffer,
cmd->request_bufflen,
cmd->sc_data_direction);
cmd->__data_mapped = 1;
cmd->__data_mapping = mapping;
return mapping;
}
static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd) static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd)
{ {
int use_sg; int use_sg;
if (cmd->use_sg == 0) use_sg = scsi_dma_map(cmd);
if (!use_sg)
return 0; return 0;
use_sg = dma_map_sg(dev, cmd->request_buffer, cmd->use_sg,
cmd->sc_data_direction);
cmd->__data_mapped = 2; cmd->__data_mapped = 2;
cmd->__data_mapping = use_sg; cmd->__data_mapping = use_sg;
...@@ -573,7 +550,6 @@ static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd) ...@@ -573,7 +550,6 @@ static int __map_scsi_sg_data(struct device *dev, struct scsi_cmnd *cmd)
} }
#define unmap_scsi_data(np, cmd) __unmap_scsi_data(np->dev, cmd) #define unmap_scsi_data(np, cmd) __unmap_scsi_data(np->dev, cmd)
#define map_scsi_single_data(np, cmd) __map_scsi_single_data(np->dev, cmd)
#define map_scsi_sg_data(np, cmd) __map_scsi_sg_data(np->dev, cmd) #define map_scsi_sg_data(np, cmd) __map_scsi_sg_data(np->dev, cmd)
/*========================================================== /*==========================================================
...@@ -7667,39 +7643,16 @@ static struct lcb *ncr_setup_lcb (struct ncb *np, struct scsi_device *sdev) ...@@ -7667,39 +7643,16 @@ static struct lcb *ncr_setup_lcb (struct ncb *np, struct scsi_device *sdev)
** sizes to the data segment array. ** sizes to the data segment array.
*/ */
static int ncr_scatter_no_sglist(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd)
{
struct scr_tblmove *data = &cp->phys.data[MAX_SCATTER - 1];
int segment;
cp->data_len = cmd->request_bufflen;
if (cmd->request_bufflen) {
dma_addr_t baddr = map_scsi_single_data(np, cmd);
if (baddr) {
ncr_build_sge(np, data, baddr, cmd->request_bufflen);
segment = 1;
} else {
segment = -2;
}
} else {
segment = 0;
}
return segment;
}
static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd) static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd)
{ {
int segment = 0; int segment = 0;
int use_sg = (int) cmd->use_sg; int use_sg = scsi_sg_count(cmd);
cp->data_len = 0; cp->data_len = 0;
if (!use_sg) use_sg = map_scsi_sg_data(np, cmd);
segment = ncr_scatter_no_sglist(np, cp, cmd); if (use_sg > 0) {
else if ((use_sg = map_scsi_sg_data(np, cmd)) > 0) { struct scatterlist *sg;
struct scatterlist *scatter = (struct scatterlist *)cmd->request_buffer;
struct scr_tblmove *data; struct scr_tblmove *data;
if (use_sg > MAX_SCATTER) { if (use_sg > MAX_SCATTER) {
...@@ -7709,16 +7662,15 @@ static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd) ...@@ -7709,16 +7662,15 @@ static int ncr_scatter(struct ncb *np, struct ccb *cp, struct scsi_cmnd *cmd)
data = &cp->phys.data[MAX_SCATTER - use_sg]; data = &cp->phys.data[MAX_SCATTER - use_sg];
for (segment = 0; segment < use_sg; segment++) { scsi_for_each_sg(cmd, sg, use_sg, segment) {
dma_addr_t baddr = sg_dma_address(&scatter[segment]); dma_addr_t baddr = sg_dma_address(sg);
unsigned int len = sg_dma_len(&scatter[segment]); unsigned int len = sg_dma_len(sg);
ncr_build_sge(np, &data[segment], baddr, len); ncr_build_sge(np, &data[segment], baddr, len);
cp->data_len += len; cp->data_len += len;
} }
} else { } else
segment = -2; segment = -2;
}
return segment; return segment;
} }
......
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