Merge branch 'master' into prog-loader
[lunaix-os.git] / lunaix-os / kernel / tty / lxconsole.c
index ae5701b5002f8f752032d3e3d6eee6712f610032..adf577a6ed5339c6d98b22229abe6d7d67460cb8 100644 (file)
@@ -8,11 +8,10 @@
 #include <lunaix/mm/valloc.h>
 #include <lunaix/mm/vmm.h>
 #include <lunaix/sched.h>
+#include <lunaix/signal.h>
 #include <lunaix/tty/console.h>
 #include <lunaix/tty/tty.h>
 
-#include <lunaix/lxsignal.h>
-
 static struct console lx_console;
 
 int
@@ -39,8 +38,8 @@ print_control_code(const char cntrl)
 int
 __lxconsole_listener(struct input_device* dev)
 {
-    uint32_t key = dev->current_pkt.sys_code;
-    uint32_t type = dev->current_pkt.pkt_type;
+    u32_t key = dev->current_pkt.sys_code;
+    u32_t type = dev->current_pkt.pkt_type;
     kbd_kstate_t state = key >> 16;
     ttychr = key & 0xff;
     key = key & 0xffff;
@@ -86,7 +85,7 @@ done:
 }
 
 int
-__tty_exec_cmd(struct device* dev, uint32_t req, va_list args)
+__tty_exec_cmd(struct device* dev, u32_t req, va_list args)
 {
     switch (req) {
         case TIOCGPGRP:
@@ -119,10 +118,28 @@ lxconsole_init()
     fifo_init(&lx_console.input, valloc(4096), 4096, 0);
 
     lx_console.flush_timer = NULL;
+}
+
+int
+__tty_write_pg(struct device* dev, void* buf, size_t offset)
+{
+    return __tty_write(dev, buf, offset, PG_SIZE);
+}
+
+int
+__tty_read_pg(struct device* dev, void* buf, size_t offset)
+{
+    return __tty_read(dev, buf, offset, PG_SIZE);
+}
 
+void
+lxconsole_spawn_ttydev()
+{
     struct device* tty_dev = device_addseq(NULL, &lx_console, "tty");
     tty_dev->write = __tty_write;
+    tty_dev->write_page = __tty_write_pg;
     tty_dev->read = __tty_read;
+    tty_dev->read_page = __tty_read_pg;
     tty_dev->exec_cmd = __tty_exec_cmd;
 
     waitq_init(&lx_reader);
@@ -294,6 +311,10 @@ console_write(struct console* console, uint8_t* data, size_t size)
     console->wnd_start = rd_ptr;
     fbuf->flags |= FIFO_DIRTY;
     mutex_unlock(&fbuf->lock);
+
+    if (!lx_console.flush_timer) {
+        console_flush();
+    }
 }
 
 void