summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-09-02 01:44:40 +0200
committerMiguel <m.i@gmx.at>2018-09-02 01:44:40 +0200
commitc459fab7662eaf45df9994c828065b9fc8d4a8ac (patch)
treedf1504de1c254a18b44bad24d530531790ad8aef /kernel/interrupts.c
parent8e3411139b27a3421e9ac75c13f14f99f6dd3137 (diff)
syscalls fine
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index cf75798..3ce33c4 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -58,8 +58,13 @@ static void int_install()
uint32_t interrupt_handler(uint32_t esp, uint32_t irq)
{
if(irq==0)asm_pit_tick();
- if(irq==1)asm_kb_handler(); // TODO: put in ringbuff
- if(irq==12)asm_mouse_handler();// TODO: put in ringbuff
+
+ // mouse and kb
+ if(irq==1 || irq==12 ){
+ uint32_t in=x86_inb(0x60);
+ if(irq=1)keyboard_handle(in); // do this in separate thread!
+// klog("0x60 in %d",in);
+ }
// 0x80 - a syscall is coming in
if(irq==128){
@@ -73,9 +78,10 @@ uint32_t interrupt_handler(uint32_t esp, uint32_t irq)
// klog("syscall: %d (ebx=0x%08X,ecx=0x%08X,edx=0x%08X)",eax,ebx,ecx,edx);
task_syscall(eax,ebx,ecx,edx);
+ esp=my_scheduler(esp,2); // force scheduling of pid=2 (kernel worker)
}
- if(irq==0 || irq==129 || irq==128)esp=my_scheduler(esp);
+ if(irq==0 || irq==129)esp=my_scheduler(esp,-1); // autoschedule
if(irq==255)kpanic("Unhandled Interrupt!");