diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/pccard/card.h | 2 | ||||
-rw-r--r-- | sys/pccard/cardinfo.h | 2 | ||||
-rw-r--r-- | sys/pccard/pccard.c | 19 |
3 files changed, 13 insertions, 10 deletions
diff --git a/sys/pccard/card.h b/sys/pccard/card.h index 159a8e7..91da726 100644 --- a/sys/pccard/card.h +++ b/sys/pccard/card.h @@ -54,7 +54,7 @@ /* * Slot states for PIOCGSTATE */ -enum cardstate { noslot, empty, filled }; +enum cardstate { noslot, empty, suspend, filled }; /* * Descriptor structure for memory map. diff --git a/sys/pccard/cardinfo.h b/sys/pccard/cardinfo.h index 159a8e7..91da726 100644 --- a/sys/pccard/cardinfo.h +++ b/sys/pccard/cardinfo.h @@ -54,7 +54,7 @@ /* * Slot states for PIOCGSTATE */ -enum cardstate { noslot, empty, filled }; +enum cardstate { noslot, empty, suspend, filled }; /* * Descriptor structure for memory map. diff --git a/sys/pccard/pccard.c b/sys/pccard/pccard.c index 549f215..d0507b3 100644 --- a/sys/pccard/pccard.c +++ b/sys/pccard/pccard.c @@ -372,6 +372,14 @@ slot_suspend(void *arg) { struct slot *slt = arg; + /* This code stolen from pccard_event:card_removed */ + if (slt->state == filled) { + int s = splhigh(); + disable_slot(slt); + slt->state = suspend; + splx(s); + printf("Card disabled, slot %d\n", slt->slotnum); + } slt->ctrl->disable(slt); return (0); } @@ -383,16 +391,11 @@ slot_resume(void *arg) if (pcic_resume_reset) slt->ctrl->resume(slt); - /* Fake card removal/insertion events */ - if (slt->state == filled) { - int s; - - s = splhigh(); - disable_slot(slt); + /* This code stolen from pccard_event:card_inserted */ + if (slt->state == suspend) { slt->state = empty; - splx(s); slt->insert_seq = 1; - slt->insert_ch = timeout(inserted, (void *)slt, hz); + slt->insert_ch = timeout(inserted, (void *)slt, hz/4); selwakeup(&slt->selp); } return (0); |