#include #include #include "kprintf.h" #include "hal/hal.h" #include "ps2kbdev.h" #include "dev.h" #include "errors.h" #include "dlmalloc/malloc.h" #include "util/util.h" #include "hshtb.h" Ps2KbFastBuf PS2KB_BUF; int32_t ps2kbdev_readch(uint8_t *buffer, size_t len, void *extra) { (void)buffer; (void)len; (void)extra; uint8_t b = 0; spinlock_acquire(&PS2KB_BUF.spinlock); int32_t r = rbuf_pop(&PS2KB_BUF.rbuf, &b); spinlock_release(&PS2KB_BUF.spinlock); if (r == 0) { return b; } else { return E_NOTYET; } } void ps2kbdev_init(void) { const int bufsz = 0x1000; uint8_t *buf = dlmalloc(bufsz); rbuf_init(&PS2KB_BUF.rbuf, buf, bufsz); PS2KB_BUF.init = true; Dev *ps2kbdev; HSHTB_ALLOC(DEVTABLE.devs, ident, "ps2kbdev", ps2kbdev); ps2kbdev->fns[0] = &ps2kbdev_readch; }