From c459fab7662eaf45df9994c828065b9fc8d4a8ac Mon Sep 17 00:00:00 2001 From: Miguel Date: Sun, 2 Sep 2018 01:44:40 +0200 Subject: syscalls fine --- kernel/interrupts.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'kernel/interrupts.c') 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!"); -- cgit v1.2.3