diff options
author | phk <phk@FreeBSD.org> | 2004-06-01 13:39:02 +0000 |
---|---|---|
committer | phk <phk@FreeBSD.org> | 2004-06-01 13:39:02 +0000 |
commit | 3521579704b6a092199dccaeecd4b1561e5ca508 (patch) | |
tree | d06c6c2c9937f4c1df88b6066f8bc9b869ecb7d6 /sys | |
parent | 44888b6a3f857798f7c387043ff15f26a8b025d1 (diff) | |
download | FreeBSD-src-3521579704b6a092199dccaeecd4b1561e5ca508.zip FreeBSD-src-3521579704b6a092199dccaeecd4b1561e5ca508.tar.gz |
Introduce a ttyioctl() cdevsw default function.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_conf.c | 1 | ||||
-rw-r--r-- | sys/kern/tty.c | 15 | ||||
-rw-r--r-- | sys/sys/conf.h | 1 | ||||
-rw-r--r-- | sys/sys/linedisc.h | 1 |
4 files changed, 18 insertions, 0 deletions
diff --git a/sys/kern/kern_conf.c b/sys/kern/kern_conf.c index 1a3eaea..18ede10 100644 --- a/sys/kern/kern_conf.c +++ b/sys/kern/kern_conf.c @@ -428,6 +428,7 @@ prep_cdevsw(struct cdevsw *devsw) } if (devsw->d_flags & D_TTY) { + if (devsw->d_ioctl == NULL) devsw->d_ioctl = ttyioctl; if (devsw->d_read == NULL) devsw->d_read = ttyread; if (devsw->d_write == NULL) devsw->d_write = ttywrite; if (devsw->d_kqfilter == NULL) devsw->d_kqfilter = ttykqfilter; diff --git a/sys/kern/tty.c b/sys/kern/tty.c index e3bee61..8658164 100644 --- a/sys/kern/tty.c +++ b/sys/kern/tty.c @@ -2751,3 +2751,18 @@ ttywrite(dev_t dev, struct uio *uio, int flag) return (ENODEV); return ((*linesw[tp->t_line].l_write)(tp, uio, flag)); } + +int +ttyioctl(dev_t dev, u_long cmd, caddr_t data, int flag, struct thread *td) +{ + struct tty *tp; + int error; + + tp = dev->si_tty; + error = (*linesw[tp->t_line].l_ioctl)(tp, cmd, data, flag, td); + if (error == ENOIOCTL) + error = ttioctl(tp, cmd, data, flag); + if (error != ENOIOCTL) + return (error); + return (ENOTTY); +} diff --git a/sys/sys/conf.h b/sys/sys/conf.h index 1278fad..c45b141 100644 --- a/sys/sys/conf.h +++ b/sys/sys/conf.h @@ -353,6 +353,7 @@ void dumpsys(struct dumperinfo *); extern int dumping; /* system is dumping */ /* D_TTY related functions */ +d_ioctl_t ttyioctl; d_kqfilter_t ttykqfilter; d_poll_t ttypoll; d_read_t ttyread; diff --git a/sys/sys/linedisc.h b/sys/sys/linedisc.h index 1278fad..c45b141 100644 --- a/sys/sys/linedisc.h +++ b/sys/sys/linedisc.h @@ -353,6 +353,7 @@ void dumpsys(struct dumperinfo *); extern int dumping; /* system is dumping */ /* D_TTY related functions */ +d_ioctl_t ttyioctl; d_kqfilter_t ttykqfilter; d_poll_t ttypoll; d_read_t ttyread; |