diff options
author | imp <imp@FreeBSD.org> | 1999-12-02 05:46:22 +0000 |
---|---|---|
committer | imp <imp@FreeBSD.org> | 1999-12-02 05:46:22 +0000 |
commit | be66291a6b80a37ccc47113c6fff10720aa29c24 (patch) | |
tree | c3aa980a36599bcbbe987e69cbab4aea5c6dd7a0 /sys/pccard | |
parent | 267971fd82f09d6d9035eeb7469165e7eecebe60 (diff) | |
download | FreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.zip FreeBSD-src-be66291a6b80a37ccc47113c6fff10720aa29c24.tar.gz |
/tmp/msg
Diffstat (limited to 'sys/pccard')
-rw-r--r-- | sys/pccard/cardinfo.h | 3 | ||||
-rw-r--r-- | sys/pccard/pccard.c | 17 |
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; |