summaryrefslogtreecommitdiffstats
path: root/sys/dev/ata/ata-lowlevel.c
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2005-05-11 12:41:35 +0000
committersos <sos@FreeBSD.org>2005-05-11 12:41:35 +0000
commiteb109cd6d51514147a9c2d769779985b294d4574 (patch)
treedc73894672c909634df232648039664fe52cf440 /sys/dev/ata/ata-lowlevel.c
parent31532d6fec2c563dcbbf8aa9393bc7b667131871 (diff)
downloadFreeBSD-src-eb109cd6d51514147a9c2d769779985b294d4574.zip
FreeBSD-src-eb109cd6d51514147a9c2d769779985b294d4574.tar.gz
Fix ATAPI DMA. We need to set the proper flags for DMA modes.
Diffstat (limited to 'sys/dev/ata/ata-lowlevel.c')
-rw-r--r--sys/dev/ata/ata-lowlevel.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index c6aeb33..cb8ca58 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -670,9 +670,11 @@ ata_generic_command(struct ata_request *request)
int timeout = 5000;
/* issue packet command to controller */
+ if (request->flags & ATA_R_DMA)
+ ATA_IDX_OUTB(ch, ATA_FEATURE, ATA_F_DMA);
ATA_IDX_OUTB(ch, ATA_CYL_LSB, request->transfersize);
ATA_IDX_OUTB(ch, ATA_CYL_MSB, request->transfersize >> 8);
- ATA_IDX_OUTB(ch, ATA_COMMAND, ATA_PACKET_CMD);
+ ATA_IDX_OUTB(ch, ATA_COMMAND, ATA_PACKET_CMD);
/* command interrupt device ? just return and wait for interrupt */
if ((atadev->param.config & ATA_DRQ_MASK) == ATA_DRQ_INTR)
OpenPOWER on IntegriCloud