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/mouse.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/mouse.c')
-rw-r--r-- | kernel/drivers/mouse.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/kernel/drivers/mouse.c b/kernel/drivers/mouse.c index 4b0696a..93e3be6 100644 --- a/kernel/drivers/mouse.c +++ b/kernel/drivers/mouse.c @@ -19,26 +19,25 @@ struct mouse_event { u8 y; }; +int fs_mouse_has_data(vfs_inode_t *inode) { + FIFO_FILE *f = inode->internal_object; + return f->has_data; +} + int fs_mouse_write(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { - int rc = fifo_object_write(buffer, offset, len, fd->inode->internal_object); FIFO_FILE *f = fd->inode->internal_object; - mouse_inode->has_data = f->has_data; - return rc; + return fifo_object_write(buffer, offset, len, f); } int fs_mouse_read(u8 *buffer, u64 offset, u64 len, vfs_fd_t *fd) { FIFO_FILE *f = fd->inode->internal_object; - if (!mouse_inode->has_data) { - return 0; - } - int rc = fifo_object_read(buffer, offset, len, f); - mouse_inode->has_data = f->has_data; - return rc; + return fifo_object_read(buffer, offset, len, f); } void add_mouse(void) { - mouse_inode = devfs_add_file("/mouse", fs_mouse_read, fs_mouse_write, NULL, 0, - 0, FS_TYPE_CHAR_DEVICE); + mouse_inode = + devfs_add_file("/mouse", fs_mouse_read, fs_mouse_write, NULL, + fs_mouse_has_data, always_can_write, FS_TYPE_CHAR_DEVICE); mouse_inode->internal_object = create_fifo_object(); // Don't look at this int fd = vfs_open("/dev/mouse", O_RDWR, 0); |