From bb8a0cf2cfe5e59256a015dde2d9c1f4495e6330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Schmidt?= Date: Fri, 13 May 2005 07:58:05 +0000 Subject: [PATCH] Fix more ATAPI breakage. Apparently some devices are very picky on details :) --- sys/dev/ata/ata-lowlevel.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/sys/dev/ata/ata-lowlevel.c b/sys/dev/ata/ata-lowlevel.c index cb8ca58d8ef..0f74bc3b6fc 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 */