ref: f7b947cde9062149846a1be65d9627b5b0aefb93
parent: 0872cc95cc4d3146adc0eb217efef3a462b31f02
author: cinap_lenrek <cinap_lenrek@gmx.de>
date: Thu Dec 27 22:39:39 EST 2012
sdide: confusion
--- a/sys/src/9/pc/sdide.c
+++ b/sys/src/9/pc/sdide.c
@@ -1066,7 +1066,7 @@
atapktio0(Drive *drive, SDreq *r)
{uchar *cmd;
- int as, cmdport, ctlport, rv;
+ int as, len, cmdport, ctlport, rv;
Ctlr *ctlr;
rv = SDok;
@@ -1074,8 +1074,6 @@
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;
@@ -1092,11 +1090,12 @@
drive->pktdma = Dma;
else
drive->pktdma = 0;
+ len = drive->secsize > 0 ? 16*drive->secsize : 0x8000;
outb(cmdport+Features, drive->pktdma);
outb(cmdport+Count, 0);
outb(cmdport+Sector, 0);
- outb(cmdport+Bytelo, drive->dlen);
- outb(cmdport+Bytehi, drive->dlen>>8);
+ outb(cmdport+Bytelo, len);
+ outb(cmdport+Bytehi, len>>8);
outb(cmdport+Dh, drive->dev);
ctlr->done = 0;
ctlr->curdrive = drive;
--
⑨