diff options
| author | Miguel <m.i@gmx.at> | 2018-09-02 01:44:40 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-09-02 01:44:40 +0200 |
| commit | c459fab7662eaf45df9994c828065b9fc8d4a8ac (patch) | |
| tree | df1504de1c254a18b44bad24d530531790ad8aef /kernel/interrupts.c | |
| parent | 8e3411139b27a3421e9ac75c13f14f99f6dd3137 (diff) | |
syscalls fine
Diffstat (limited to 'kernel/interrupts.c')
| -rw-r--r-- | kernel/interrupts.c | 12 |
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!"); |
