feat: (vfs) write_page and read_page file operations
[lunaix-os.git] / lunaix-os / kernel / tty / lxconsole.c
index 3404450048a9802cd638e0bdac58170db5abc902..80a7be6de25fd2b3140a54ff95da5eba0295f0d4 100644 (file)
@@ -29,7 +29,7 @@ static volatile char ttychr;
 
 static volatile pid_t fg_pgid = 0;
 
-inline void
+static inline void
 print_control_code(const char cntrl)
 {
     console_write_char('^');
@@ -119,10 +119,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 +312,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