summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>2004-06-01 13:39:02 +0000
committerphk <phk@FreeBSD.org>2004-06-01 13:39:02 +0000
commit3521579704b6a092199dccaeecd4b1561e5ca508 (patch)
treed06c6c2c9937f4c1df88b6066f8bc9b869ecb7d6 /sys
parent44888b6a3f857798f7c387043ff15f26a8b025d1 (diff)
downloadFreeBSD-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.c1
-rw-r--r--sys/kern/tty.c15
-rw-r--r--sys/sys/conf.h1
-rw-r--r--sys/sys/linedisc.h1
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;
OpenPOWER on IntegriCloud