summaryrefslogtreecommitdiffstats
path: root/sys/pccard/pccard.c
diff options
context:
space:
mode:
authorimp <imp@FreeBSD.org>1999-12-02 05:46:22 +0000
committerimp <imp@FreeBSD.org>1999-12-02 05:46:22 +0000
commitbe66291a6b80a37ccc47113c6fff10720aa29c24 (patch)
treec3aa980a36599bcbbe987e69cbab4aea5c6dd7a0 /sys/pccard/pccard.c
parent267971fd82f09d6d9035eeb7469165e7eecebe60 (diff)
downloadFreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.zip
FreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.tar.gz
/tmp/msg
Diffstat (limited to 'sys/pccard/pccard.c')
-rw-r--r--sys/pccard/pccard.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/sys/pccard/pccard.c b/sys/pccard/pccard.c
index ae09a7f..43404ad 100644
--- a/sys/pccard/pccard.c
+++ b/sys/pccard/pccard.c
@@ -265,7 +265,7 @@ slot_resume(void *arg)
slt->state = empty;
slt->insert_seq = 1;
untimeout(inserted, (void *)slt, slt->insert_ch);
- slt->insert_ch = timeout(inserted, (void *)slt, hz/4);
+ inserted((void *) slt);
selwakeup(&slt->selp);
}
return (0);
@@ -579,6 +579,7 @@ crdioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct proc *p)
struct mem_desc *mp;
struct io_desc *ip;
int s, err;
+ int pwval;
/* beep is disabled until the 1st call of crdioctl() */
pccard_beep_select(BEEP_ON);
@@ -709,6 +710,20 @@ crdioctl(dev_t dev, u_long cmd, caddr_t data, int fflag, struct proc *p)
else
pccard_failure_beep();
return err;
+ /*
+ * Virtual removal/insertion
+ */
+ case PIOCSVIR:
+ pwval = *(int *)data;
+ if (!pwval) {
+ if (slt->state != filled)
+ return EINVAL;
+ } else {
+ if (slt->state != empty)
+ return EINVAL;
+ }
+ pccard_event(slt, pwval == 0 ? card_removed : card_inserted);
+ break;
case PIOCSBEEP:
if (pccard_beep_select(*(int *)data)) {
return EINVAL;
OpenPOWER on IntegriCloud