diff options
author | Anton Kling <anton@kling.gg> | 2024-04-26 19:06:46 +0200 |
---|---|---|
committer | Anton Kling <anton@kling.gg> | 2024-04-26 19:06:46 +0200 |
commit | 7ab3153f92f38223157c4c1f4af1c30e33c94a76 (patch) | |
tree | 301f950cd6dc8fde244e9b5c1201ec01d964347b /kernel/drivers/keyboard.c | |
parent | 2e2805c88789c148cce0118d3a4ff0212458bb86 (diff) |
Kernel/VFS: Change polling from variables to functions
Instead of having to store state in variables functions are called to
check the object directly.
Diffstat (limited to 'kernel/drivers/keyboard.c')
-rw-r--r-- | kernel/drivers/keyboard.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/kernel/drivers/keyboard.c b/kernel/drivers/keyboard.c index fe4fe16..ab61d58 100644 --- a/kernel/drivers/keyboard.c +++ b/kernel/drivers/keyboard.c @@ -155,9 +155,11 @@ void int_keyboard(reg_t *frame) { ev.mode |= is_alt_down << 1; ev.mode |= is_ctrl_down << 2; fifo_object_write((u8 *)&ev, 0, sizeof(ev), keyboard_fifo); - if (kb_inode) { - kb_inode->has_data = keyboard_fifo->has_data; - } +} + +int keyboard_has_data(vfs_inode_t *inode) { + (void)inode; + return keyboard_fifo->has_data; } void install_keyboard(void) { @@ -168,15 +170,14 @@ void install_keyboard(void) { int keyboard_read(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { (void)offset; - if (0 == fd->inode->has_data) { + int rc = fifo_object_read(buffer, 0, len, keyboard_fifo); + if (0 == rc) { return -EAGAIN; } - int rc = fifo_object_read(buffer, 0, len, keyboard_fifo); - fd->inode->has_data = keyboard_fifo->has_data; return rc; } void add_keyboard(void) { - kb_inode = devfs_add_file("/keyboard", keyboard_read, NULL, NULL, 0, 0, - FS_TYPE_CHAR_DEVICE); + kb_inode = devfs_add_file("/keyboard", keyboard_read, NULL, NULL, + keyboard_has_data, NULL, FS_TYPE_CHAR_DEVICE); } |