aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_tty.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_tty.c')
-rw-r--r--sys/kern/kern_tty.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/sys/kern/kern_tty.c b/sys/kern/kern_tty.c
index cb3e30a..5c060a4 100644
--- a/sys/kern/kern_tty.c
+++ b/sys/kern/kern_tty.c
@@ -28,6 +28,7 @@
*/
#include <sys/tty.h>
+#include <sys/system.h>
#include <sys/cdefs.h>
#include <sys/errno.h>
#include <sys/syslog.h>
@@ -153,6 +154,26 @@ tty_dev_read(struct device *dev, struct sio_txn *sio)
return len;
}
+static int
+tty_ioctl(struct device *dev, uint32_t cmd, uintptr_t arg)
+{
+ /* TODO: Support multiple TTYs */
+ struct termios *tp = &g_root_tty.termios;
+
+ switch (cmd) {
+ case TCGETS:
+ copyout(tp, arg, sizeof(struct termios));
+ break;
+ case TCSETS:
+ copyin(arg, tp, sizeof(struct termios));
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
/*
* Serialized wrapper over __tty_flush()
*/
@@ -264,6 +285,7 @@ tty_attach(struct tty *tty)
return tmp;
dev->read = tty_dev_read;
+ dev->ioctl = tty_ioctl;
dev->blocksize = 1;
snprintf(devname, sizeof(devname), "tty%d", tty->id);