diff options
author | brian <brian@FreeBSD.org> | 2002-04-10 14:32:55 +0000 |
---|---|---|
committer | brian <brian@FreeBSD.org> | 2002-04-10 14:32:55 +0000 |
commit | 509170f4fdd4981277ef3ceeb7b316809aef7646 (patch) | |
tree | 936b451fce5ff110c440e80715c4c5eede96cd23 /sys/dev/digi | |
parent | 67f2ae40b7bb0998d355aba8b77adea0e9102d9d (diff) | |
download | FreeBSD-src-509170f4fdd4981277ef3ceeb7b316809aef7646.zip FreeBSD-src-509170f4fdd4981277ef3ceeb7b316809aef7646.tar.gz |
Yet another adjustment of digi_delay(). The delay is now consistent
irrespective of whether tsleep() or DELAY() is used.
Diffstat (limited to 'sys/dev/digi')
-rw-r--r-- | sys/dev/digi/digi.c | 16 | ||||
-rw-r--r-- | sys/dev/digi/digi.h | 3 | ||||
-rw-r--r-- | sys/dev/digi/digi_isa.c | 18 |
3 files changed, 19 insertions, 18 deletions
diff --git a/sys/dev/digi/digi.c b/sys/dev/digi/digi.c index 4111e15..0f82ef1 100644 --- a/sys/dev/digi/digi.c +++ b/sys/dev/digi/digi.c @@ -222,12 +222,12 @@ digi_bcopy(const void *vfrom, void *vto, size_t sz) } void -digi_delay(struct digi_softc *sc, const char *txt) +digi_delay(struct digi_softc *sc, const char *txt, u_long timo) { if (cold) - DELAY(1000); + DELAY(timo * 1000000 / hz); else - tsleep(sc, PUSER | PCATCH, txt, 5); + tsleep(sc, PUSER | PCATCH, txt, timo); } static int @@ -319,7 +319,7 @@ digi_init(struct digi_softc *sc) sc->res.unit, sc->name); return (EIO); } - digi_delay(sc, "digiinit0"); + digi_delay(sc, "digiinit0", 5); } DLOG(DIGIDB_INIT, (sc->dev, "Got init reset after %d us\n", i)); @@ -375,7 +375,7 @@ digi_init(struct digi_softc *sc) sc->res.unit); return (EIO); } - digi_delay(sc, "digibios0"); + digi_delay(sc, "digibios0", 5); } DLOG(DIGIDB_INIT, (sc->dev, "BIOS started after %d us\n", i)); @@ -387,7 +387,7 @@ digi_init(struct digi_softc *sc) sc->res.unit, vW(ptr), *(u_short *)"GD"); return (EIO); } - digi_delay(sc, "digibios1"); + digi_delay(sc, "digibios1", 5); } DLOG(DIGIDB_INIT, (sc->dev, "BIOS booted after %d iterations\n", i)); @@ -427,7 +427,7 @@ digi_init(struct digi_softc *sc) sc->hidewin(sc); return (EIO); } - digi_delay(sc, "digifep0"); + digi_delay(sc, "digifep0", 5); } DLOG(DIGIDB_INIT, (sc->dev, "FEP/OS moved after %d iterations\n", i)); @@ -513,7 +513,7 @@ digi_init(struct digi_softc *sc) sc->hidewin(sc); return (EIO); } - digi_delay(sc, "digifep1"); + digi_delay(sc, "digifep1", 5); } DLOG(DIGIDB_INIT, (sc->dev, "FEP/OS started after %d iterations\n", i)); diff --git a/sys/dev/digi/digi.h b/sys/dev/digi/digi.h index 17906d1..e8f9e0f 100644 --- a/sys/dev/digi/digi.h +++ b/sys/dev/digi/digi.h @@ -215,4 +215,5 @@ const char *digi_errortxt(int _id); int digi_attach(struct digi_softc *); int digi_detach(device_t _dev); int digi_shutdown(device_t _dev); -void digi_delay(struct digi_softc *_sc, const char *_txt); +void digi_delay(struct digi_softc *_sc, const char *_txt, + u_long _timo); diff --git a/sys/dev/digi/digi_isa.c b/sys/dev/digi/digi_isa.c index 463a38b..4b606fa 100644 --- a/sys/dev/digi/digi_isa.c +++ b/sys/dev/digi/digi_isa.c @@ -112,12 +112,12 @@ digi_isa_check(struct digi_softc *sc) /* Invasive probe - reset the card */ outb(sc->port, FEPRST); - for (i = 0; i < 100; i++) { + for (i = 0; i < 10; i++) { if ((inb(sc->port) & FEPMASK) == FEPRST) break; - digi_delay(sc, "digirst"); + digi_delay(sc, "digirst", 1); } - if (i == 100) + if (i == 10) return (NULL); DLOG(DIGIDB_INIT, (sc->dev, "got reset after %d delays\n", i)); @@ -375,12 +375,12 @@ digi_isa_attach(device_t dev) reset |= FEPMEM; outb(sc->port, reset); - for (i = 0; i < 100; i++) { + for (i = 0; i < 10; i++) { if ((inb(sc->port) & FEPMASK) == reset) break; - digi_delay(sc, "digirst1"); + digi_delay(sc, "digirst1", 1); } - if (i == 100) { + if (i == 10) { device_printf(dev, "1st reset failed\n"); sc->hidewin(sc); goto failed; @@ -397,12 +397,12 @@ digi_isa_attach(device_t dev) if (sc->model == PCXI || sc->model == PCXE) { outb(sc->port, FEPRST | FEPMEM); - for (i = 0; i < 100; i++) { + for (i = 0; i < 10; i++) { if ((inb(sc->port) & FEPMASK) != FEPRST) break; - digi_delay(sc, "digirst2"); + digi_delay(sc, "digirst2", 1); } - if (i == 100) { + if (i == 10) { device_printf(dev, "2nd reset failed (0x%02x)\n", inb(sc->port)); sc->hidewin(sc); |