git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
refactor: separate syscall interfaces from kernel space, into posix compliant structure.
[lunaix-os.git]
/
lunaix-os
/
kernel
/
tty
/
lxconsole.c
diff --git
a/lunaix-os/kernel/tty/lxconsole.c
b/lunaix-os/kernel/tty/lxconsole.c
index ad3fc420af8520413ee46e1036b5e1daa62c7e77..adf577a6ed5339c6d98b22229abe6d7d67460cb8 100644
(file)
--- a/
lunaix-os/kernel/tty/lxconsole.c
+++ b/
lunaix-os/kernel/tty/lxconsole.c
@@
-8,11
+8,10
@@
#include <lunaix/mm/valloc.h>
#include <lunaix/mm/vmm.h>
#include <lunaix/sched.h>
#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/tty/console.h>
#include <lunaix/tty/tty.h>
-#include <lunaix/lxsignal.h>
-
static struct console lx_console;
int
static struct console lx_console;
int
@@
-27,9
+26,9
@@
console_flush();
static waitq_t lx_reader;
static volatile char ttychr;
static waitq_t lx_reader;
static volatile char ttychr;
-static pid_t fg_pgid = 0;
+static
volatile
pid_t fg_pgid = 0;
-inline void
+
static
inline void
print_control_code(const char cntrl)
{
console_write_char('^');
print_control_code(const char cntrl)
{
console_write_char('^');
@@
-39,8
+38,8
@@
print_control_code(const char cntrl)
int
__lxconsole_listener(struct input_device* dev)
{
int
__lxconsole_listener(struct input_device* dev)
{
- u
int
32_t key = dev->current_pkt.sys_code;
- u
int
32_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;
kbd_kstate_t state = key >> 16;
ttychr = key & 0xff;
key = key & 0xffff;
@@
-86,7
+85,7
@@
done:
}
int
}
int
-__tty_exec_cmd(struct device* dev, u
int
32_t req, va_list args)
+__tty_exec_cmd(struct device* dev, u32_t req, va_list args)
{
switch (req) {
case TIOCGPGRP:
{
switch (req) {
case TIOCGPGRP:
@@
-119,10
+118,28
@@
lxconsole_init()
fifo_init(&lx_console.input, valloc(4096), 4096, 0);
lx_console.flush_timer = NULL;
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;
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 = __tty_read;
+ tty_dev->read_page = __tty_read_pg;
tty_dev->exec_cmd = __tty_exec_cmd;
waitq_init(&lx_reader);
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);
console->wnd_start = rd_ptr;
fbuf->flags |= FIFO_DIRTY;
mutex_unlock(&fbuf->lock);
+
+ if (!lx_console.flush_timer) {
+ console_flush();
+ }
}
void
}
void