diff options
| author | Miguel <m.i@gmx.at> | 2018-08-31 11:49:07 +0200 |
|---|---|---|
| committer | Miguel <m.i@gmx.at> | 2018-08-31 11:49:07 +0200 |
| commit | 47d7e8e4527c663dd1a0c04a4ea5624589464895 (patch) | |
| tree | d6d5ef82f1089a9ab058b27c427c1463db0fae60 /kernel/interrupts.c | |
| parent | 4404fa9b3d98646f942e32146722a9d0a68edc13 (diff) | |
various improvmenets
* added debugging symbols to nasm output
* started implementing an unified interrupt interface
* moved smp entry point to kernel image!
Diffstat (limited to 'kernel/interrupts.c')
| -rw-r--r-- | kernel/interrupts.c | 43 |
1 files changed, 23 insertions, 20 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 51682b4..74377ad 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -1,4 +1,5 @@ #include "kernel/kernel.h" +#include "asm/int.h" #include "asm/asm.h" #include "asm/pit.h" #include "driver/mouse.h" @@ -7,6 +8,13 @@ #define INT_MAX 255 // size of our interrupts table + +uint32_t interrupt_handler(uint32_t num, uint32_t esp) +{ + if(num!=990)klog("int: %d %d",num,esp); + return esp; +} + void errlog(uint32_t error_code) { klog("error_code: 0x%08X",error_code); @@ -129,16 +137,16 @@ void interrupts_init(uint16_t sel) } // exceptions - int_install_ir(0, 0b10001110, 0x08,&int_irq0); - int_install_ir(1, 0b10001110, 0x08,&int_irq1); - int_install_ir(2, 0b10001110, 0x08,&int_irq2); - int_install_ir(3, 0b10001110, 0x08,&int_irq3); - int_install_ir(4, 0b10001110, 0x08,&int_irq4); - int_install_ir(5, 0b10001110, 0x08,&int_irq5); - int_install_ir(6, 0b10001110, 0x08,&int_irq6); - int_install_ir(7, 0b10001110, 0x08,&int_irq7); - int_install_ir(8, 0b10001110, 0x08,&int_irq8); - int_install_ir(9, 0b10001110, 0x08,&int_irq9); + int_install_ir(0, 0b10001110, 0x08,&int_irq0); + int_install_ir(1, 0b10001110, 0x08,&int_irq1); + int_install_ir(2, 0b10001110, 0x08,&int_irq2); + int_install_ir(3, 0b10001110, 0x08,&int_irq3); + int_install_ir(4, 0b10001110, 0x08,&int_irq4); + int_install_ir(5, 0b10001110, 0x08,&int_irq5); + int_install_ir(6, 0b10001110, 0x08,&int_irq6); + int_install_ir(7, 0b10001110, 0x08,&int_irq7); + int_install_ir(8, 0b10001110, 0x08,&int_irq8); + int_install_ir(9, 0b10001110, 0x08,&int_irq9); int_install_ir(10, 0b10001110, 0x08,&int_irq10); int_install_ir(11, 0b10001110, 0x08,&int_irq11); int_install_ir(12, 0b10001110, 0x08,&int_irq12); @@ -153,27 +161,22 @@ void interrupts_init(uint16_t sel) // remember that we shifted all interrupts with the pic by 32 // install PIT interrupt handler (irq 0 => 32) - int_install_ir(32, 0b10001110, 0x08,&pit_interrupt_handler); + int_install_ir(32, 0b10001110, 0x08,&int0); // install keyboard interrupt handler (irq 1 => 33) - int_install_ir(33, 0b10001110, 0x08,&int_kb_handler); + int_install_ir(33, 0b10001110, 0x08,&int1); //mouse interrupt handler (irq 12 => 34) - int_install_ir(44, 0b10001110, 0x08,&int_mouse_handler); + int_install_ir(44, 0b10001110, 0x08,&int12); - //system calls - int_install_ir(0x80, 0b11101110, 0x08,&int_syscall_handler); + //system calls (can be called from ring3 (0b11)) + int_install_ir(0x80, 0b11101110, 0x08,&int128); int_install(); - - // now we can enable interrupts back again - // x86_sti(); - //x86_cli(); } void int_install() { - idtd.size=sizeof(struct int_desc)*INT_MAX; uint32_t addr=(uint32_t)&idt[0]; |
