From 6b7cbc2842354eabb7c3345390c5891a6f881f0c Mon Sep 17 00:00:00 2001 From: dzwdz Date: Wed, 30 Mar 2022 14:14:11 +0200 Subject: kernel: remove the keyboard driver, add a `/ps2` device --- src/kernel/arch/i386/driver/ps2.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/kernel/arch/i386/driver/ps2.c (limited to 'src/kernel/arch/i386/driver/ps2.c') diff --git a/src/kernel/arch/i386/driver/ps2.c b/src/kernel/arch/i386/driver/ps2.c new file mode 100644 index 0000000..1af3166 --- /dev/null +++ b/src/kernel/arch/i386/driver/ps2.c @@ -0,0 +1,28 @@ +#include +#include +#include + +#define BACKLOG_CAPACITY 16 + +/* TODO move away from tty/ */ + +static volatile uint8_t backlog[BACKLOG_CAPACITY] = {}; +static volatile size_t backlog_size = 0; + +void ps2_recv(uint8_t s) { + if (backlog_size >= BACKLOG_CAPACITY) return; + backlog[backlog_size++] = s; +} + +size_t ps2_read(uint8_t *buf, size_t max_len) { + irq_interrupt_flag(true); + while (backlog_size == 0) + asm("hlt" ::: "memory"); + irq_interrupt_flag(false); + + size_t len = backlog_size; + if (len > max_len) len = max_len; + backlog_size = 0; + memcpy(buf, (void*)backlog, len); + return len; +} -- cgit v1.2.3