summaryrefslogtreecommitdiffstats
path: root/sys/dev/pccbb
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>2002-11-02 23:00:28 +0000
committerimp <imp@FreeBSD.org>2002-11-02 23:00:28 +0000
commitfd4399a908b17ed3577975df34051640916d35f4 (patch)
tree046b8dea6a0aac813e511aa6c7d3ea6b37bb59d8 /sys/dev/pccbb
parentb3cfb0145e43e4745858853a8baa5616bc1eff3c (diff)
downloadFreeBSD-src-fd4399a908b17ed3577975df34051640916d35f4.zip
FreeBSD-src-fd4399a908b17ed3577975df34051640916d35f4.tar.gz
MFp4:
o Always release the resources on device detach. o Attach resources the same with driver added as we do we do in the insert case (maybe this should be a routine). o signal the wakeup of the thread on resume instead of trying to force an interrupt. o Minor debug hacks. o use 0xffffffff instead of -1 for uint32_t items. o Don't complain when we're asked to detach no cards. This is normal. o Eliminate the now worthless second parameter to card_detach_card. o minor style(9)isms Some of these patches may be from: iwasaki-san, jhb, iadowse
Diffstat (limited to 'sys/dev/pccbb')
-rw-r--r--sys/dev/pccbb/pccbb.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/dev/pccbb/pccbb.c b/sys/dev/pccbb/pccbb.c
index bef8215..461c39d 100644
--- a/sys/dev/pccbb/pccbb.c
+++ b/sys/dev/pccbb/pccbb.c
@@ -843,11 +843,13 @@ cbb_driver_added(device_t brdev, driver_t *driver)
if (devlist[tmp] == NULL)
/* NOTHING */;
else if (strcmp(driver->name, "cardbus") == 0) {
+ printf("Adding cardbus\n");
sc->cbdev = devlist[tmp];
if (((sockstate & CBB_SOCKET_STAT_CD) == 0) &&
(sockstate & CBB_SOCKET_STAT_CB))
wake++;
} else if (strcmp(driver->name, "pccard") == 0) {
+ printf("Adding pccard\n");
sc->pccarddev = devlist[tmp];
if (((sockstate & CBB_SOCKET_STAT_CD) == 0) &&
(sockstate & CBB_SOCKET_STAT_16BIT))
@@ -991,9 +993,9 @@ static void
cbb_removal(struct cbb_softc *sc)
{
if (sc->flags & CBB_16BIT_CARD && sc->pccarddev != NULL)
- CARD_DETACH_CARD(sc->pccarddev, DETACH_FORCE);
+ CARD_DETACH_CARD(sc->cbdev);
else if ((!(sc->flags & CBB_16BIT_CARD)) && sc->cbdev != NULL)
- CARD_DETACH_CARD(sc->cbdev, DETACH_FORCE);
+ CARD_DETACH_CARD(sc->cbdev);
cbb_destroy_res(sc);
}
@@ -1872,6 +1874,7 @@ cbb_suspend(device_t self)
cbb_setb(sc, CBB_SOCKET_MASK, 0); /* Quiet hardware */
bus_teardown_intr(self, sc->irq_res, sc->intrhand);
+ sc->flags &= ~CBB_CARD_OK; /* Card is bogus now */
error = bus_generic_suspend(self);
return (error);
}
@@ -1917,8 +1920,10 @@ cbb_resume(device_t self)
/* CSC Interrupt: Card detect interrupt on */
cbb_setb(sc, CBB_SOCKET_MASK, CBB_SOCKET_MASK_CD);
- /* Force us to go query the socket state */
- cbb_setb(sc, CBB_SOCKET_FORCE, CBB_SOCKET_EVENT_CD);
+ /* Signal the thread to wakeup. */
+ mtx_lock(&sc->mtx);
+ cv_signal(&sc->cv);
+ mtx_unlock(&sc->mtx);
error = bus_generic_resume(self);
OpenPOWER on IntegriCloud