sdide: inquery times on qemu, make pktio timeout
This commit is contained in:
parent
1c5d8e24e3
commit
ab80f73f61
1 changed files with 9 additions and 16 deletions
|
@ -640,6 +640,7 @@ retry:
|
||||||
if(drive->feat & Datapi16)
|
if(drive->feat & Datapi16)
|
||||||
drive->pkt = 16;
|
drive->pkt = 16;
|
||||||
}else{
|
}else{
|
||||||
|
drive->pkt = 0;
|
||||||
if(drive->feat & Dlba)
|
if(drive->feat & Dlba)
|
||||||
drive->dev |= Lba;
|
drive->dev |= Lba;
|
||||||
atarwmmode(drive, cmdport, ctlport, dev);
|
atarwmmode(drive, cmdport, ctlport, dev);
|
||||||
|
@ -1165,7 +1166,7 @@ static int
|
||||||
atapktio0(Drive *drive, SDreq *r)
|
atapktio0(Drive *drive, SDreq *r)
|
||||||
{
|
{
|
||||||
uchar *cmd;
|
uchar *cmd;
|
||||||
int as, cmdport, ctlport, len, rv, timeo;
|
int as, cmdport, ctlport, len, rv;
|
||||||
Ctlr *ctlr;
|
Ctlr *ctlr;
|
||||||
|
|
||||||
rv = SDok;
|
rv = SDok;
|
||||||
|
@ -1217,21 +1218,14 @@ atapktio0(Drive *drive, SDreq *r)
|
||||||
}
|
}
|
||||||
iunlock(ctlr);
|
iunlock(ctlr);
|
||||||
|
|
||||||
while(waserror())
|
if(iowait(drive, 20*1000, 1) <= 0){
|
||||||
;
|
|
||||||
if(!drive->pktdma)
|
|
||||||
sleep(ctlr, atadone, ctlr);
|
|
||||||
else for(timeo = 0; !ctlr->done; timeo++){
|
|
||||||
tsleep(ctlr, atadone, ctlr, 1000);
|
|
||||||
if(ctlr->done)
|
|
||||||
break;
|
|
||||||
ilock(ctlr);
|
ilock(ctlr);
|
||||||
atadmainterrupt(drive, 0);
|
if(!drive->error){
|
||||||
if(!drive->error && timeo > 20){
|
|
||||||
ataabort(drive, 0);
|
ataabort(drive, 0);
|
||||||
atadmastop(ctlr);
|
if(drive->pktdma){
|
||||||
drive->dmactl = 0;
|
atadmastop(ctlr);
|
||||||
drive->error |= Abrt;
|
drive->dmactl = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(drive->error){
|
if(drive->error){
|
||||||
drive->status |= Chk;
|
drive->status |= Chk;
|
||||||
|
@ -1239,7 +1233,6 @@ atapktio0(Drive *drive, SDreq *r)
|
||||||
}
|
}
|
||||||
iunlock(ctlr);
|
iunlock(ctlr);
|
||||||
}
|
}
|
||||||
poperror();
|
|
||||||
|
|
||||||
if(drive->status & Chk)
|
if(drive->status & Chk)
|
||||||
rv = SDcheck;
|
rv = SDcheck;
|
||||||
|
@ -1456,7 +1449,7 @@ atagenio(Drive* drive, SDreq *r)
|
||||||
|
|
||||||
if(drive->status & Err){
|
if(drive->status & Err){
|
||||||
qunlock(ctlr);
|
qunlock(ctlr);
|
||||||
print("atagenio: %llud:%d\n", lba, drive->count);
|
print("atagenio: %llud:%d\n", lba, drive->count);
|
||||||
return sdsetsense(r, SDcheck, 4, 8, drive->error);
|
return sdsetsense(r, SDcheck, 4, 8, drive->error);
|
||||||
}
|
}
|
||||||
count -= drive->count;
|
count -= drive->count;
|
||||||
|
|
Loading…
Reference in a new issue