diff options
| -rw-r--r-- | sys/src/9/pc/sdide.c | 24 |
1 files changed, 9 insertions, 15 deletions
diff --git a/sys/src/9/pc/sdide.c b/sys/src/9/pc/sdide.c index 071431aae..3d94cd77f 100644 --- a/sys/src/9/pc/sdide.c +++ b/sys/src/9/pc/sdide.c @@ -1066,7 +1066,7 @@ static int atapktio0(Drive *drive, SDreq *r) { uchar *cmd; - int as, cmdport, ctlport, len, rv; + int as, cmdport, ctlport, rv; Ctlr *ctlr; rv = SDok; @@ -1074,6 +1074,8 @@ atapktio0(Drive *drive, SDreq *r) drive->command = Cpkt; memmove(drive->pktcmd, cmd, r->clen); memset(drive->pktcmd+r->clen, 0, drive->pkt-r->clen); + if(drive->dlen > 0x8000) + drive->dlen = 0x8000; drive->limit = drive->data+drive->dlen; ctlr = drive->ctlr; @@ -1086,21 +1088,15 @@ atapktio0(Drive *drive, SDreq *r) return SDnostatus; ilock(ctlr); - if(drive->dlen && drive->dmactl && !atadmasetup(drive, drive->dlen)){ + if(drive->dlen && drive->dmactl && !atadmasetup(drive, drive->dlen)) drive->pktdma = Dma; - len = 0; /* bytecount should be 0 for dma */ - }else{ + else drive->pktdma = 0; - if(drive->secsize) - len = 16*drive->secsize; - else - len = 0x8000; - } outb(cmdport+Features, drive->pktdma); outb(cmdport+Count, 0); outb(cmdport+Sector, 0); - outb(cmdport+Bytelo, len); - outb(cmdport+Bytehi, len>>8); + outb(cmdport+Bytelo, drive->dlen); + outb(cmdport+Bytehi, drive->dlen>>8); outb(cmdport+Dh, drive->dev); ctlr->done = 0; ctlr->curdrive = drive; @@ -1374,10 +1370,8 @@ atario(SDreq* r) SDunit *unit; unit = r->unit; - if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil){ - r->status = SDtimeout; - return SDtimeout; - } + if((ctlr = unit->dev->ctlr) == nil || ctlr->drive[unit->subno] == nil) + return r->status = SDtimeout; drive = ctlr->drive[unit->subno]; qlock(drive); for(;;){ |
