summaryrefslogtreecommitdiff
path: root/kernel/scheduler.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/scheduler.c')
-rw-r--r--kernel/scheduler.c19
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();