diff options
author | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-11-11 10:16:07 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@centraldogma> | 2011-11-11 10:16:07 +0100 |
commit | 807e8e69ec32e568b7025dd10f59bf2e6d225379 (patch) | |
tree | b49429c297f7c49c780a05e1918cdc806d111fb6 | |
parent | a863f7488158ef7e46671663b307ca3b2e7ca0af (diff) | |
download | plan9front-807e8e69ec32e568b7025dd10f59bf2e6d225379.tar.xz |
sdide: make pkt io non interruptable, do scsionline in pio mode
-rw-r--r-- | sys/src/9/pc/sdide.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/sys/src/9/pc/sdide.c b/sys/src/9/pc/sdide.c index 31a905bde..e2c264597 100644 --- a/sys/src/9/pc/sdide.c +++ b/sys/src/9/pc/sdide.c @@ -1228,7 +1228,7 @@ atapktio0(Drive *drive, SDreq *r) atadmastart(ctlr, drive->write); iunlock(ctlr); - if(iowait(drive, 20*1000, 1) <= 0){ + if(iowait(drive, 30*1000, 0) <= 0){ ilock(ctlr); ataabort(drive, 0); } else @@ -1244,7 +1244,7 @@ atapktio0(Drive *drive, SDreq *r) if(drive->status & Chk){ if(drive->pktdma){ print("atapktio: disabling dma\n"); - drive->dmactl=0; + drive->dmactl = 0; rv = SDretry; } else rv = SDcheck; @@ -1446,7 +1446,7 @@ atagenio(Drive* drive, SDreq *r) qunlock(ctlr); return atagenioretry(drive, r, lba, count); } - iowait(drive, 60*1000, 0); + iowait(drive, 30*1000, 0); if(!ctlr->done){ /* * What should the above timeout be? In @@ -2400,11 +2400,13 @@ atadisable(SDev *sdev) static int ataonline(SDunit *unit) { - Ctlr *ctlr; Drive *drive; + Ctlr *ctlr; + int ret; if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil) return 0; + ret = 1; drive = ctlr->drive[unit->subno]; if((drive->flags & Online) == 0){ drive->flags |= Online; @@ -2412,9 +2414,15 @@ ataonline(SDunit *unit) } unit->sectors = drive->sectors; unit->secsize = drive->secsize; - if(drive->feat & Datapi) - return scsionline(unit); - return 1; + if(drive->feat & Datapi){ + ulong dma; + + dma = drive->dmactl; + drive->dmactl = 0; + ret = scsionline(unit); + drive->dmactl = dma; + } + return ret; } static int |