diff options
Diffstat (limited to 'kernel/scheduler.c')
| -rw-r--r-- | kernel/scheduler.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/kernel/scheduler.c b/kernel/scheduler.c index 5382053..20b69ed 100644 --- a/kernel/scheduler.c +++ b/kernel/scheduler.c @@ -16,15 +16,13 @@ #include "spinlock.h" #include "ringbuffer.h" #include "keyboard.h" +#include "mouse.h" #include "syscalls.h" #include "fs/ext2.h" #define NO_TASK 0xffffffff -//TODO: ugly! -extern ringbuffer kb_in; - -static volatile uint32_t pid=0; +static volatile uint32_t pid=0; // holds next pid, to be assigned to a process. static uint32_t nextPID() { @@ -278,13 +276,12 @@ void task_syscall_worker() while(1) { bool wake=false; - - // TODO: move to user programm! - x86_cli(); // disable temporarily mouse/kb/timer interrupts. - while(ringbuffer_has(&kb_in)){ - wake=true; - keyboard_handle(ringbuffer_get(&kb_in)); - } + + + //TODO: would be enough only to lock during ringbuffer acces!? + x86_cli(); // disable temporarily mouse/kb/timer interrupts. + wake|=keyboard_worker(); + wake|=mouse_worker(); x86_sti(); if(wake)scheduler_wake_all(); |
