- Really perform a controller hard-reset if it can't recover from a soft reset. Fixes VirtualBox one IDE controller configuration (master - IDE, slave - ATAPI).
See issue #5145 for more details.

svn path=/trunk/; revision=45869
This commit is contained in:
Aleksey Bragin 2010-03-05 13:23:43 +00:00
parent ebfc115694
commit eb6bae0c08

View file

@ -2723,6 +2723,7 @@ CheckDevice(
signatureHigh;
UCHAR statusByte;
ULONG RetVal=0;
ULONG waitCount = 10000;
KdPrint2((PRINT_PREFIX "CheckDevice: Device %#x\n",
deviceNumber));
@ -2745,7 +2746,22 @@ CheckDevice(
// Perform hard-reset.
KdPrint2((PRINT_PREFIX
"CheckDevice: BUSY\n"));
AtapiWritePort1(chan, IDX_IO2_o_Control, IDE_DC_RESET_CONTROLLER );
AtapiStallExecution(500 * 1000);
AtapiWritePort1(chan, IDX_IO2_o_Control, IDE_DC_REENABLE_CONTROLLER);
SelectDrive(chan, deviceNumber & 0x01);
do {
// Wait for Busy to drop.
AtapiStallExecution(100);
GetStatus(chan, statusByte);
} while ((statusByte & IDE_STATUS_BUSY) && waitCount--);
GetBaseStatus(chan, statusByte);
KdPrint2((PRINT_PREFIX
"CheckDevice: status after hard reset %x\n", statusByte));
}
if((statusByte | IDE_STATUS_BUSY) == 0xff) {