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

[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
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -1091,6 +1091,7 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt,
	unchar *cdb = (unchar *) SCpnt->cmnd;
	unchar idlun;
	short cdblen;
	int nseg;
	Adapter *host = (Adapter *) SCpnt->device->host->hostdata;

	cdblen = SCpnt->cmd_len;
@@ -1106,28 +1107,29 @@ static int wd7000_queuecommand(struct scsi_cmnd *SCpnt,
	SCpnt->host_scribble = (unchar *) scb;
	scb->host = host;

	if (SCpnt->use_sg) {
		struct scatterlist *sg = (struct scatterlist *) SCpnt->request_buffer;
	nseg = scsi_sg_count(SCpnt);
	if (nseg) {
		struct scatterlist *sg;
		unsigned i;

		if (SCpnt->device->host->sg_tablesize == SG_NONE) {
			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;
		scb->op = 1;
		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++) {
			any2scsi(sgb[i].ptr, isa_page_to_bus(sg[i].page) + sg[i].offset);
			any2scsi(sgb[i].len, sg[i].length);
		scsi_for_each_sg(SCpnt, sg, nseg, i) {
			any2scsi(sgb[i].ptr, isa_page_to_bus(sg->page) + sg->offset);
			any2scsi(sgb[i].len, sg->length);
		}
	} else {
		scb->op = 0;
		any2scsi(scb->dataptr, isa_virt_to_bus(SCpnt->request_buffer));
		any2scsi(scb->maxlen, SCpnt->request_bufflen);
		any2scsi(scb->dataptr, isa_virt_to_bus(scsi_sglist(SCpnt)));
		any2scsi(scb->maxlen, scsi_bufflen(SCpnt));
	}

	/* FIXME: drop lock and yield here ? */