diff --git a/kernel-src/include/kernel/console.h b/kernel-src/include/kernel/console.h index ddf43d6e..995d0f89 100644 --- a/kernel-src/include/kernel/console.h +++ b/kernel-src/include/kernel/console.h @@ -2,11 +2,15 @@ #define _CONSOLE_H #include +#include #include +#include void console_init(); void console_putc(char c); size_t console_write(char *str, size_t size); void console_process_events(input_event_t *events, int count); +int console_set_lock(bool lock); +bool console_is_tty(tty_t *p); #endif diff --git a/kernel-src/io/console.c b/kernel-src/io/console.c index bc1eda7a..7d98191d 100644 --- a/kernel-src/io/console.c +++ b/kernel-src/io/console.c @@ -17,11 +17,24 @@ static semaphore_t input_sem; static mutex_t writemutex; static thread_t *thread; static tty_t *tty; +static bool locked; static size_t console_ttywrite(void *internal, char *str, size_t count) { return console_write(str, count); } +int console_set_lock(bool lock) { + bool expected = !lock; + if (!__atomic_compare_exchange_n(&locked, &expected, lock, false, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)) + return EBUSY; + + return 0; +} + +bool console_is_tty(tty_t *p) { + return p == tty; +} + void console_putc(char c) { if (c == '\n') { console_write("\r\n", 2);