svn commit: r231251 - stable/9/sys/cam/ata
Alexander Motin
mav at FreeBSD.org
Thu Feb 9 07:38:57 UTC 2012
Author: mav
Date: Thu Feb 9 07:38:56 2012
New Revision: 231251
URL: http://svn.freebsd.org/changeset/base/231251
Log:
MFC r230912:
Make CAM ATA honor old hw.ata.ata_dma and hw.ata.atapi_dma tunables.
Even having more specific hint.ata.X.mode controls, global ones are
still could be useful from some points, including compatibility.
PR: kern/164651
Modified:
stable/9/sys/cam/ata/ata_xpt.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/cam/ata/ata_xpt.c
==============================================================================
--- stable/9/sys/cam/ata/ata_xpt.c Thu Feb 9 07:28:17 2012 (r231250)
+++ stable/9/sys/cam/ata/ata_xpt.c Thu Feb 9 07:38:56 2012 (r231251)
@@ -186,6 +186,12 @@ static void ata_dev_async(u_int32_t asy
static void ata_action(union ccb *start_ccb);
static void ata_announce_periph(struct cam_periph *periph);
+static int ata_dma = 1;
+static int atapi_dma = 1;
+
+TUNABLE_INT("hw.ata.ata_dma", &ata_dma);
+TUNABLE_INT("hw.ata.atapi_dma", &atapi_dma);
+
static struct xpt_xport ata_xport = {
.alloc_device = ata_alloc_device,
.action = ata_action,
@@ -356,6 +362,13 @@ probestart(struct cam_periph *periph, un
if (cts.xport_specific.sata.valid & CTS_SATA_VALID_MODE)
mode = cts.xport_specific.sata.mode;
}
+ if (periph->path->device->protocol == PROTO_ATA) {
+ if (ata_dma == 0 && (mode == 0 || mode > ATA_PIO_MAX))
+ mode = ATA_PIO_MAX;
+ } else {
+ if (atapi_dma == 0 && (mode == 0 || mode > ATA_PIO_MAX))
+ mode = ATA_PIO_MAX;
+ }
negotiate:
/* Honor device capabilities. */
wantmode = mode = ata_max_mode(ident_buf, mode);
More information about the svn-src-stable-9
mailing list