git: 9front

Download patch

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;
--