summaryrefslogtreecommitdiffstats
path: root/sys/dev/pccard
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2002-08-31 16:07:17 +0000
committerphk <phk@FreeBSD.org>2002-08-31 16:07:17 +0000
commitbcd9be0b7da57c3da51db182c09d945109ad003d (patch)
tree8f6926aaaaa7ed87ce4012025fa5be7ef651d8ce /sys/dev/pccard
parent15f3647566289e640e4848030510e74ca48996d8 (diff)
downloadFreeBSD-src-bcd9be0b7da57c3da51db182c09d945109ad003d.zip
FreeBSD-src-bcd9be0b7da57c3da51db182c09d945109ad003d.tar.gz
Different and more correct workaround for broken cards under NEWCARD:
don't spam the configuration index register. I'm not sure where those bits truly belong, but spamming the config index sure doesn't do us any good.
Diffstat (limited to 'sys/dev/pccard')
-rw-r--r--sys/dev/pccard/pccard.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/sys/dev/pccard/pccard.c b/sys/dev/pccard/pccard.c
index f96ab59..a34b761 100644
--- a/sys/dev/pccard/pccard.c
+++ b/sys/dev/pccard/pccard.c
@@ -404,11 +404,7 @@ pccard_function_init(struct pccard_function *pf)
for (i = 0; i < cfe->num_iospace; i++) {
start = cfe->iospace[i].start;
if (start)
-#ifdef COOKIE_FOR_IMP
end = start + cfe->iospace[i].length - 1;
-#else
- goto not_this_one;
-#endif
else
end = ~0;
cfe->iorid[i] = i;
@@ -590,11 +586,13 @@ pccard_function_enable(struct pccard_function *pf)
reg = (pf->cfe->number & PCCARD_CCR_OPTION_CFINDEX);
reg |= PCCARD_CCR_OPTION_LEVIREQ;
+#ifdef COOKIE_FOR_WARNER
if (pccard_mfc(pf->sc)) {
reg |= (PCCARD_CCR_OPTION_FUNC_ENABLE |
PCCARD_CCR_OPTION_ADDR_DECODE);
/* PCCARD_CCR_OPTION_IRQ_ENABLE set elsewhere as needed */
}
+#endif
pccard_ccr_write(pf, PCCARD_CCR_OPTION, reg);
reg = 0;
@@ -761,9 +759,11 @@ pccard_io_map(struct pccard_function *pf, int width, bus_addr_t offset,
pccard_ccr_write(pf, PCCARD_CCR_IOSIZE, iosize);
+#ifdef COOKIE_FOR_WARNER
reg = pccard_ccr_read(pf, PCCARD_CCR_OPTION);
reg |= PCCARD_CCR_OPTION_ADDR_DECODE;
pccard_ccr_write(pf, PCCARD_CCR_OPTION, reg);
+#endif
}
return (0);
}
@@ -1205,10 +1205,12 @@ pccard_setup_intr(device_t dev, device_t child, struct resource *irq,
func->intr_handler = intr;
func->intr_handler_arg = arg;
func->intr_handler_cookie = *cookiep;
+#ifdef COOKIE_FOR_WARNER
/* XXX Not sure this is right to write to ccr */
pccard_ccr_write(func, PCCARD_CCR_OPTION,
pccard_ccr_read(func, PCCARD_CCR_OPTION) |
PCCARD_CCR_OPTION_IREQ_ENABLE);
+#endif
return (0);
}
@@ -1220,10 +1222,12 @@ pccard_teardown_intr(device_t dev, device_t child, struct resource *r,
struct pccard_function *func = ivar->fcn;
int ret;
+#ifdef COOKIE_FOR_WARNER
/* XXX Not sure this is right to write to ccr */
pccard_ccr_write(func, PCCARD_CCR_OPTION,
pccard_ccr_read(func, PCCARD_CCR_OPTION) &
~PCCARD_CCR_OPTION_IREQ_ENABLE);
+#endif
ret = bus_generic_teardown_intr(dev, child, r, cookie);
if (ret == 0) {
func->intr_handler = NULL;
OpenPOWER on IntegriCloud