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