[Midnightbsd-cvs] src [8394] trunk/sys/dev/ata/ata-all.c: only for specific ata pio commands transfer several sectors per DRQ block.

laffer1 at midnightbsd.org laffer1 at midnightbsd.org
Sun Sep 18 15:23:58 EDT 2016


Revision: 8394
          http://svnweb.midnightbsd.org/src/?rev=8394
Author:   laffer1
Date:     2016-09-18 15:23:58 -0400 (Sun, 18 Sep 2016)
Log Message:
-----------
only for specific ata pio commands transfer several sectors per DRQ block. All others transfer one sector or 512 bytes at one time.

Modified Paths:
--------------
    trunk/sys/dev/ata/ata-all.c

Modified: trunk/sys/dev/ata/ata-all.c
===================================================================
--- trunk/sys/dev/ata/ata-all.c	2016-09-18 19:23:12 UTC (rev 8393)
+++ trunk/sys/dev/ata/ata-all.c	2016-09-18 19:23:58 UTC (rev 8394)
@@ -1501,6 +1501,14 @@
 			request->flags |= ATA_R_READ;
 		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT)
 			request->flags |= ATA_R_WRITE;
+		if (ccb->ataio.cmd.command == ATA_READ_MUL ||
+		    ccb->ataio.cmd.command == ATA_READ_MUL48 ||
+		    ccb->ataio.cmd.command == ATA_WRITE_MUL ||
+		    ccb->ataio.cmd.command == ATA_WRITE_MUL48) {
+			request->transfersize = min(request->bytecount,
+			    ch->curr[ccb->ccb_h.target_id].bytecount);
+		} else
+			request->transfersize = min(request->bytecount, 512);
 	} else {
 		request->data = ccb->csio.data_ptr;
 		request->bytecount = ccb->csio.dxfer_len;
@@ -1517,9 +1525,9 @@
 			request->flags |= ATA_R_READ;
 		if ((ccb->ccb_h.flags & CAM_DIR_MASK) == CAM_DIR_OUT)
 			request->flags |= ATA_R_WRITE;
+		request->transfersize = min(request->bytecount,
+		    ch->curr[ccb->ccb_h.target_id].bytecount);
 	}
-	request->transfersize = min(request->bytecount,
-	    ch->curr[ccb->ccb_h.target_id].bytecount);
 	request->retries = 0;
 	request->timeout = (ccb->ccb_h.timeout + 999) / 1000;
 	callout_init_mtx(&request->callout, &ch->state_mtx, CALLOUT_RETURNUNLOCKED);



More information about the Midnightbsd-cvs mailing list