summaryrefslogtreecommitdiffstats
path: root/sys/kern/tty_cons.c
diff options
context:
space:
mode:
authorjlemon <jlemon@FreeBSD.org>2001-02-15 16:34:11 +0000
committerjlemon <jlemon@FreeBSD.org>2001-02-15 16:34:11 +0000
commit11781a7431fab609cd00058a63ac09ccddb16854 (patch)
treeee46dbf40488c941cf17b05e69bfe21e4f2d7128 /sys/kern/tty_cons.c
parent5655168b87e22a331c5fc3b603901647ff90b2e4 (diff)
downloadFreeBSD-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.c20
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()
{
OpenPOWER on IntegriCloud