summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsos <sos@FreeBSD.org>2005-05-13 07:58:05 +0000
committersos <sos@FreeBSD.org>2005-05-13 07:58:05 +0000
commit9f93814a13c1d1b9c01e99eeedf3cbe884502932 (patch)
tree68100d8957c9f3757f90b802d8215280376cadb3
parent591461b255820286bc3bff9255be4670505ef9f6 (diff)
downloadFreeBSD-src-9f93814a13c1d1b9c01e99eeedf3cbe884502932.zip
FreeBSD-src-9f93814a13c1d1b9c01e99eeedf3cbe884502932.tar.gz
Fix more ATAPI breakage.
Apparently some devices are very picky on details :)
-rw-r--r--sys/dev/ata/ata-lowlevel.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c
index cb8ca58..0f74bc3 100644
--- a/sys/dev/ata/ata-lowlevel.c
+++ b/sys/dev/ata/ata-lowlevel.c
@@ -670,10 +670,16 @@ ata_generic_command(struct ata_request *request)
int timeout = 5000;
/* issue packet command to controller */
- if (request->flags & ATA_R_DMA)
+ 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_CYL_LSB, 0);
+ ATA_IDX_OUTB(ch, ATA_CYL_MSB, 0);
+ }
+ else {
+ ATA_IDX_OUTB(ch, ATA_FEATURE, 0);
+ 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);
/* command interrupt device ? just return and wait for interrupt */
OpenPOWER on IntegriCloud