diff options
author | sos <sos@FreeBSD.org> | 2005-05-13 07:58:05 +0000 |
---|---|---|
committer | sos <sos@FreeBSD.org> | 2005-05-13 07:58:05 +0000 |
commit | 9f93814a13c1d1b9c01e99eeedf3cbe884502932 (patch) | |
tree | 68100d8957c9f3757f90b802d8215280376cadb3 /sys/dev/ata | |
parent | 591461b255820286bc3bff9255be4670505ef9f6 (diff) | |
download | FreeBSD-src-9f93814a13c1d1b9c01e99eeedf3cbe884502932.zip FreeBSD-src-9f93814a13c1d1b9c01e99eeedf3cbe884502932.tar.gz |
Fix more ATAPI breakage.
Apparently some devices are very picky on details :)
Diffstat (limited to 'sys/dev/ata')
-rw-r--r-- | sys/dev/ata/ata-lowlevel.c | 12 |
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 */ |