diff options
author | jlemon <jlemon@FreeBSD.org> | 2001-02-15 16:34:11 +0000 |
---|---|---|
committer | jlemon <jlemon@FreeBSD.org> | 2001-02-15 16:34:11 +0000 |
commit | 11781a7431fab609cd00058a63ac09ccddb16854 (patch) | |
tree | ee46dbf40488c941cf17b05e69bfe21e4f2d7128 /sys/kern/tty_cons.c | |
parent | 5655168b87e22a331c5fc3b603901647ff90b2e4 (diff) | |
download | FreeBSD-src-11781a7431fab609cd00058a63ac09ccddb16854.zip FreeBSD-src-11781a7431fab609cd00058a63ac09ccddb16854.tar.gz |
Extend kqueue down to the device layer.
Backwards compatible approach suggested by: peter
Diffstat (limited to 'sys/kern/tty_cons.c')
-rw-r--r-- | sys/kern/tty_cons.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/sys/kern/tty_cons.c b/sys/kern/tty_cons.c index 784feca..9aa2c23 100644 --- a/sys/kern/tty_cons.c +++ b/sys/kern/tty_cons.c @@ -58,6 +58,7 @@ static d_read_t cnread; static d_write_t cnwrite; static d_ioctl_t cnioctl; static d_poll_t cnpoll; +static d_kqfilter_t cnkqfilter; #define CDEV_MAJOR 0 static struct cdevsw cn_cdevsw = { @@ -73,8 +74,9 @@ static struct cdevsw cn_cdevsw = { /* maj */ CDEV_MAJOR, /* dump */ nodump, /* psize */ nopsize, - /* flags */ D_TTY, - /* bmaj */ -1 + /* flags */ D_TTY | D_KQFILTER, + /* bmaj */ -1, + /* kqfilter */ cnkqfilter, }; static dev_t cn_dev_t; /* seems to be never really used */ @@ -398,6 +400,20 @@ cnpoll(dev, events, p) return ((*devsw(dev)->d_poll)(dev, events, p)); } +static int +cnkqfilter(dev, kn) + dev_t dev; + struct knote *kn; +{ + if ((cn_tab == NULL) || cn_mute) + return (1); + + dev = cn_tab->cn_dev; + if (devsw(dev)->d_flags & D_KQFILTER) + return ((*devsw(dev)->d_kqfilter)(dev, kn)); + return (1); +} + int cngetc() { |