summaryrefslogtreecommitdiffstats
path: root/sys/dev
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2002-04-10 14:32:55 +0000
committerbrian <brian@FreeBSD.org>2002-04-10 14:32:55 +0000
commit509170f4fdd4981277ef3ceeb7b316809aef7646 (patch)
tree936b451fce5ff110c440e80715c4c5eede96cd23 /sys/dev
parent67f2ae40b7bb0998d355aba8b77adea0e9102d9d (diff)
downloadFreeBSD-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')
-rw-r--r--sys/dev/digi/digi.c16
-rw-r--r--sys/dev/digi/digi.h3
-rw-r--r--sys/dev/digi/digi_isa.c18
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);
OpenPOWER on IntegriCloud