From 696d66b49925f56ad7bca3da98011e0908fdf543 Mon Sep 17 00:00:00 2001 From: David du Colombier <0intro@gmail.com> Date: Fri, 28 Jul 1995 00:00:00 +0000 Subject: [PATCH] Plan 9 from Bell Labs 1995-07-28 --- pc/devata.c | 5 +++++ pc/devfloppy.c | 8 ++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/pc/devata.c b/pc/devata.c index e41271b2fa1f14eae5dea82957bea32129ed99f0..d2c174872f2c6102889ff0b224ce5a0e792c61a3 100644 --- a/pc/devata.c +++ b/pc/devata.c @@ -813,6 +813,7 @@ ataprobe(Drive *dp, int cyl, int sec, int head) cp->status = 0; cp->nsecs = 1; cp->sofar = 0; + cp->buf = buf; outb(cp->pbase+Pcount, 1); outb(cp->pbase+Psector, sec+1); @@ -1120,6 +1121,10 @@ ataintr(Ureg *ur, void *arg) if(addr){ addr += cp->sofar*dp->bytes; inss(cp->pbase+Pdata, addr, dp->bytes/2); + } else { + /* old drives/controllers hang unless the buffer is emptied */ + for(loop = dp->bytes/2; --loop >= 0;) + ins(cp->pbase+Pdata); } cp->sofar++; if(cp->sofar > cp->nsecs) diff --git a/pc/devfloppy.c b/pc/devfloppy.c index 88f7b86684691ce2bf109fb378ce5ed275ad396d..0acb8d612ca2c1ae36ad14b3be8a666392f7e6c8 100644 --- a/pc/devfloppy.c +++ b/pc/devfloppy.c @@ -946,11 +946,11 @@ floppyxfer(Drive *dp, int cmd, void *a, long off, long n) if(off + n > dp->t->cap) n = dp->t->cap - off; - /* retry on error 3 times */ + /* retry on error */ tries = 0; while(waserror()){ DPRINT("floppyxfer: retrying\n"); - if(tries++ >= 3) + if(tries++ > 20) nexterror(); } @@ -973,9 +973,9 @@ floppyxfer(Drive *dp, int cmd, void *a, long off, long n) /* * start operation */ - cmd = cmd | (dp->t->heads > 1 ? Fmulti : 0); + cmd = cmd; fl.ncmd = 0; - fl.cmd[fl.ncmd++] = cmd; + fl.cmd[fl.ncmd++] = cmd | (dp->t->heads > 1 ? Fmulti : 0); fl.cmd[fl.ncmd++] = (dp->thead<<2) | dp->dev; fl.cmd[fl.ncmd++] = dp->tcyl; fl.cmd[fl.ncmd++] = dp->thead;