[ros-diffs] [fireball] 41173: - 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.

fireball at svn.reactos.org fireball at svn.reactos.org
Thu May 28 14:13:18 CEST 2009


Author: fireball
Date: Thu May 28 16:13:17 2009
New Revision: 41173

URL: http://svn.reactos.org/svn/reactos?rev=41173&view=rev
Log:
- 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.

Modified:
    trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
    trunk/reactos/drivers/storage/ide/uniata/id_init.cpp

Modified: trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp?rev=41173&r1=41172&r2=41173&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/id_ata.cpp [iso-8859-1] Thu May 28 16:13:17 2009
@@ -4305,7 +4305,7 @@
         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 @@
         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 @@
 
     GetBaseStatus(chan, statusByte);
 
-    AtapiEnableInterrupts(deviceExtension, lChannel);
+    //AtapiEnableInterrupts(deviceExtension, lChannel);
 
     WriteBuffer(chan,
                 (PUSHORT)Srb->Cdb,

Modified: trunk/reactos/drivers/storage/ide/uniata/id_init.cpp
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/storage/ide/uniata/id_init.cpp?rev=41173&r1=41172&r2=41173&view=diff
==============================================================================
--- trunk/reactos/drivers/storage/ide/uniata/id_init.cpp [iso-8859-1] (original)
+++ trunk/reactos/drivers/storage/ide/uniata/id_init.cpp [iso-8859-1] Thu May 28 16:13:17 2009
@@ -1279,7 +1279,7 @@
         }
         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;
     }
 



More information about the Ros-diffs mailing list