diff options
author | Poul-Henning Kamp <phk@FreeBSD.org> | 2004-06-01 13:39:02 +0000 |
---|---|---|
committer | Poul-Henning Kamp <phk@FreeBSD.org> | 2004-06-01 13:39:02 +0000 |
commit | 3a95025ffc97244af8fb6e1e3ea92bafe527f9a5 (patch) | |
tree | d06c6c2c9937f4c1df88b6066f8bc9b869ecb7d6 /sys | |
parent | 58acf05adef4fbe7be5bb9c0072a94d0f7a52487 (diff) | |
download | src-3a95025ffc97244af8fb6e1e3ea92bafe527f9a5.tar.gz src-3a95025ffc97244af8fb6e1e3ea92bafe527f9a5.zip |
Introduce a ttyioctl() cdevsw default function.
Notes
Notes:
svn path=/head/; revision=129943
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 1a3eaea33bfb..18ede10cbabe 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 e3bee61ff6c8..86581649b4c6 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 1278fadb55f6..c45b14131f4c 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 1278fadb55f6..c45b14131f4c 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; |