- Fix WaitOnBusy, WaitOnBaseBusy and Wait[Short]ForDrq to wait and loop exactly the same as our existing atapi driver. This greatly enhances uniata's compatibility, especially on modern highspeed hardware where a controller usually didn't have enough time to change its state and was considered invalid.

svn path=/trunk/; revision=40896
This commit is contained in:
Aleksey Bragin 2009-05-12 13:27:45 +00:00
parent 737dbd6105
commit e74bb0e059

View file

@ -493,10 +493,10 @@ WaitOnBusy(
{
ULONG i;
UCHAR Status;
for (i=0; i<200; i++) {
for (i=0; i<20000; i++) {
GetStatus(chan, Status);
if (Status & IDE_STATUS_BUSY) {
AtapiStallExecution(10);
AtapiStallExecution(150);
continue;
} else {
break;
@ -537,10 +537,10 @@ WaitOnBaseBusy(
{
ULONG i;
UCHAR Status;
for (i=0; i<200; i++) {
for (i=0; i<20000; i++) {
GetBaseStatus(chan, Status);
if (Status & IDE_STATUS_BUSY) {
AtapiStallExecution(10);
AtapiStallExecution(150);
continue;
} else {
break;
@ -640,11 +640,11 @@ WaitForDrq(
for (i=0; i<1000; i++) {
GetStatus(chan, Status);
if (Status & IDE_STATUS_BUSY) {
AtapiStallExecution(10);
AtapiStallExecution(100);
} else if (Status & IDE_STATUS_DRQ) {
break;
} else {
AtapiStallExecution(10);
AtapiStallExecution(200);
}
}
return Status;
@ -661,11 +661,11 @@ WaitShortForDrq(
for (i=0; i<2; i++) {
GetStatus(chan, Status);
if (Status & IDE_STATUS_BUSY) {
AtapiStallExecution(10);
AtapiStallExecution(100);
} else if (Status & IDE_STATUS_DRQ) {
break;
} else {
AtapiStallExecution(10);
AtapiStallExecution(100);
}
}
return Status;