- 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
This commit is contained in:
Aleksey Bragin 2009-05-28 12:13:17 +00:00
parent b231782314
commit b5000fe04d
2 changed files with 4 additions and 4 deletions

View file

@ -4305,7 +4305,7 @@ continue_err:
for (k = atapiDev ? 0 : 200; k; k--) { for (k = atapiDev ? 0 : 200; k; k--) {
GetStatus(chan, statusByte); GetStatus(chan, statusByte);
if (!(statusByte & IDE_STATUS_DRQ)) { if (!(statusByte & IDE_STATUS_DRQ)) {
AtapiStallExecution(50); AtapiStallExecution(100);
} else { } else {
break; break;
} }
@ -6365,7 +6365,7 @@ make_reset:
InterlockedExchange(&(chan->CheckIntr), InterlockedExchange(&(chan->CheckIntr),
CHECK_INTR_IDLE); CHECK_INTR_IDLE);
AtapiDisableInterrupts(deviceExtension, lChannel); //AtapiDisableInterrupts(deviceExtension, lChannel);
// Write ATAPI packet command. // Write ATAPI packet command.
AtapiWritePort1(chan, IDX_IO1_o_Command, IDE_COMMAND_ATAPI_PACKET); AtapiWritePort1(chan, IDX_IO1_o_Command, IDE_COMMAND_ATAPI_PACKET);
@ -6400,7 +6400,7 @@ make_reset:
GetBaseStatus(chan, statusByte); GetBaseStatus(chan, statusByte);
AtapiEnableInterrupts(deviceExtension, lChannel); //AtapiEnableInterrupts(deviceExtension, lChannel);
WriteBuffer(chan, WriteBuffer(chan,
(PUSHORT)Srb->Cdb, (PUSHORT)Srb->Cdb,

View file

@ -1279,7 +1279,7 @@ AtapiReadChipConfig(
} }
deviceExtension->opt_AtapiDmaZeroTransfer = FALSE; deviceExtension->opt_AtapiDmaZeroTransfer = FALSE;
deviceExtension->opt_AtapiDmaControlCmd = FALSE; deviceExtension->opt_AtapiDmaControlCmd = FALSE;
deviceExtension->opt_AtapiDmaRawRead = TRUE; deviceExtension->opt_AtapiDmaRawRead = FALSE;//TRUE; // Disabling that for VirtualBox
deviceExtension->opt_AtapiDmaReadWrite = TRUE; deviceExtension->opt_AtapiDmaReadWrite = TRUE;
} }