From b5000fe04dfb4d6f15557656f5b6e37486f641cc Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Thu, 28 May 2009 12:13:17 +0000 Subject: [PATCH] - Increase waiting time for DRQ removal inside AtapiInterrupt twice. - Don't disable/enable IDE controller interrupts in AtapiSendCommand. This confuses Virtual Box's controller (it consumes one interrupt without ever emitting it) and thus sending any ATAPI command fails. - Turn off ATAPI DMA raw read support by default. It seems to be incompatible with (at least) Virtual Box IDE controller. See issue #3645 for more details. svn path=/trunk/; revision=41173 --- reactos/drivers/storage/ide/uniata/id_ata.cpp | 6 +++--- reactos/drivers/storage/ide/uniata/id_init.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index ebb03cfe4ce..f869d479e3d 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -4305,7 +4305,7 @@ continue_err: for (k = atapiDev ? 0 : 200; k; k--) { GetStatus(chan, statusByte); if (!(statusByte & IDE_STATUS_DRQ)) { - AtapiStallExecution(50); + AtapiStallExecution(100); } else { break; } @@ -6365,7 +6365,7 @@ make_reset: InterlockedExchange(&(chan->CheckIntr), CHECK_INTR_IDLE); - AtapiDisableInterrupts(deviceExtension, lChannel); + //AtapiDisableInterrupts(deviceExtension, lChannel); // Write ATAPI packet command. AtapiWritePort1(chan, IDX_IO1_o_Command, IDE_COMMAND_ATAPI_PACKET); @@ -6400,7 +6400,7 @@ make_reset: GetBaseStatus(chan, statusByte); - AtapiEnableInterrupts(deviceExtension, lChannel); + //AtapiEnableInterrupts(deviceExtension, lChannel); WriteBuffer(chan, (PUSHORT)Srb->Cdb, diff --git a/reactos/drivers/storage/ide/uniata/id_init.cpp b/reactos/drivers/storage/ide/uniata/id_init.cpp index e3903c57e8a..602abcdb463 100644 --- a/reactos/drivers/storage/ide/uniata/id_init.cpp +++ b/reactos/drivers/storage/ide/uniata/id_init.cpp @@ -1279,7 +1279,7 @@ AtapiReadChipConfig( } deviceExtension->opt_AtapiDmaZeroTransfer = FALSE; deviceExtension->opt_AtapiDmaControlCmd = FALSE; - deviceExtension->opt_AtapiDmaRawRead = TRUE; + deviceExtension->opt_AtapiDmaRawRead = FALSE;//TRUE; // Disabling that for VirtualBox deviceExtension->opt_AtapiDmaReadWrite = TRUE; }