diff options
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 784fecad98e2..9aa2c23386d6 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() { |
