summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/dev/ic/rt2860.c4
-rw-r--r--sys/dev/pci/if_ral_pci.c16
2 files changed, 16 insertions, 4 deletions
diff --git a/sys/dev/ic/rt2860.c b/sys/dev/ic/rt2860.c
index 24e8496b0c3..f0b452d9ae6 100644
--- a/sys/dev/ic/rt2860.c
+++ b/sys/dev/ic/rt2860.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rt2860.c,v 1.6 2007/11/19 21:26:19 damien Exp $ */
+/* $OpenBSD: rt2860.c,v 1.7 2007/12/04 22:26:55 deraadt Exp $ */
/*-
* Copyright (c) 2007
@@ -1140,6 +1140,8 @@ rt2860_intr(void *arg)
uint32_t r;
r = RAL_READ(sc, RT2860_INT_STATUS);
+ if (r == 0xffffffff)
+ return 0; /* device likely went away */
if (r == 0)
return 0; /* not for us */
diff --git a/sys/dev/pci/if_ral_pci.c b/sys/dev/pci/if_ral_pci.c
index 0a398bc5eea..370f05763e7 100644
--- a/sys/dev/pci/if_ral_pci.c
+++ b/sys/dev/pci/if_ral_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_ral_pci.c,v 1.10 2007/11/15 21:40:47 deraadt Exp $ */
+/* $OpenBSD: if_ral_pci.c,v 1.11 2007/12/04 22:26:54 deraadt Exp $ */
/*-
* Copyright (c) 2005-2007
@@ -186,9 +186,19 @@ ral_pci_detach(struct device *self, int flags)
{
struct ral_pci_softc *psc = (struct ral_pci_softc *)self;
struct rt2560_softc *sc = &psc->sc_sc;
+ int error;
+
+ error = (*psc->sc_opns->detach)(sc);
+ if (error != 0)
+ return error;
+
+ if (psc->sc_ih != NULL) {
+ pci_intr_disestablish(psc->sc_pc, psc->sc_ih);
+ psc->sc_ih = NULL;
+ }
- (*psc->sc_opns->detach)(sc);
- pci_intr_disestablish(psc->sc_pc, psc->sc_ih);
+ if (psc->sc_mapsize > 0)
+ bus_space_unmap(sc->sc_st, sc->sc_sh, psc->sc_mapsize);
return 0;
}