summaryrefslogtreecommitdiffstats
path: root/sys/pccard
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
parent267971fd82f09d6d9035eeb7469165e7eecebe60 (diff)
downloadFreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.zip
FreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.tar.gz
/tmp/msg
Diffstat (limited to 'sys/pccard')
-rw-r--r--sys/pccard/cardinfo.h3
-rw-r--r--sys/pccard/pccard.c17
2 files changed, 19 insertions, 1 deletions
diff --git a/sys/pccard/cardinfo.h b/sys/pccard/cardinfo.h
index ed11af8..599188a 100644
--- a/sys/pccard/cardinfo.h
+++ b/sys/pccard/cardinfo.h
@@ -28,6 +28,8 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+/* $FreeBSD$ */
+
#ifndef _PCCARD_CARDINFO_H_
#define _PCCARD_CARDINFO_H_
@@ -45,6 +47,7 @@
#define PIOCRWFLAG _IOW('P', 7, int) /* Set flags for drv use */
#define PIOCRWMEM _IOWR('P', 8, unsigned long) /* Set mem for drv use */
#define PIOCSPOW _IOW('P', 9, struct power) /* Set power structure */
+#define PIOCSVIR _IOW('P', 10, int) /* Virtual insert/remove */
#define PIOCSBEEP _IOW('P', 11, int) /* Select Beep */
/*
* Debug codes.
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