Commit e7d6cf55 authored by FUJITA Tomonori's avatar FUJITA Tomonori Committed by James Bottomley

[SCSI] wd7000: 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>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 58e2a02e
...@@ -1091,6 +1091,7 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt, ...@@ -1091,6 +1091,7 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt,
unchar *cdb = (unchar *) SCpnt->cmnd; unchar *cdb = (unchar *) SCpnt->cmnd;
unchar idlun; unchar idlun;
short cdblen; short cdblen;
int nseg;
Adapter *host = (Adapter *) SCpnt->device->host->hostdata; Adapter *host = (Adapter *) SCpnt->device->host->hostdata;
cdblen = SCpnt->cmd_len; cdblen = SCpnt->cmd_len;
...@@ -1106,28 +1107,29 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt, ...@@ -1106,28 +1107,29 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt,
SCpnt->host_scribble = (unchar *) scb; SCpnt->host_scribble = (unchar *) scb;
scb->host = host; scb->host = host;
if (SCpnt->use_sg) { nseg = scsi_sg_count(SCpnt);
struct scatterlist *sg = (struct scatterlist *) SCpnt->request_buffer; if (nseg) {
struct scatterlist *sg;
unsigned i; unsigned i;
if (SCpnt->device->host->sg_tablesize == SG_NONE) { if (SCpnt->device->host->sg_tablesize == SG_NONE) {
panic("wd7000_queuecommand: scatter/gather not supported.\n"); panic("wd7000_queuecommand: scatter/gather not supported.\n");
} }
dprintk("Using scatter/gather with %d elements.\n", SCpnt->use_sg); dprintk("Using scatter/gather with %d elements.\n", nseg);
sgb = scb->sgb; sgb = scb->sgb;
scb->op = 1; scb->op = 1;
any2scsi(scb->dataptr, (int) sgb); any2scsi(scb->dataptr, (int) sgb);
any2scsi(scb->maxlen, SCpnt->use_sg * sizeof(Sgb)); any2scsi(scb->maxlen, nseg * sizeof(Sgb));
for (i = 0; i < SCpnt->use_sg; i++) { scsi_for_each_sg(SCpnt, sg, nseg, i) {
any2scsi(sgb[i].ptr, isa_page_to_bus(sg[i].page) + sg[i].offset); any2scsi(sgb[i].ptr, isa_page_to_bus(sg->page) + sg->offset);
any2scsi(sgb[i].len, sg[i].length); any2scsi(sgb[i].len, sg->length);
} }
} else { } else {
scb->op = 0; scb->op = 0;
any2scsi(scb->dataptr, isa_virt_to_bus(SCpnt->request_buffer)); any2scsi(scb->dataptr, isa_virt_to_bus(scsi_sglist(SCpnt)));
any2scsi(scb->maxlen, SCpnt->request_bufflen); any2scsi(scb->maxlen, scsi_bufflen(SCpnt));
} }
/* FIXME: drop lock and yield here ? */ /* FIXME: drop lock and yield here ? */
......
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