summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/pccard/card.h2
-rw-r--r--sys/pccard/cardinfo.h2
-rw-r--r--sys/pccard/pccard.c19
-rw-r--r--usr.sbin/pccard/pccardd/cardd.c5
4 files changed, 17 insertions, 11 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);
diff --git a/usr.sbin/pccard/pccardd/cardd.c b/usr.sbin/pccard/pccardd/cardd.c
index e2237f3..64c31a0 100644
--- a/usr.sbin/pccard/pccardd/cardd.c
+++ b/usr.sbin/pccard/pccardd/cardd.c
@@ -26,7 +26,7 @@
#ifndef lint
static const char rcsid[] =
- "$Id: cardd.c,v 1.18 1997/10/06 11:36:06 charnier Exp $";
+ "$Id: cardd.c,v 1.19 1997/10/26 04:36:24 nate Exp $";
#endif /* not lint */
#include <fcntl.h>
@@ -227,6 +227,9 @@ slot_change(struct slot *sp)
case filled:
card_inserted(sp);
break;
+ case suspend:
+ /* ignored */
+ break;
}
}
OpenPOWER on IntegriCloud