diff options
| author | Michal Idziorek <m.i@gmx.at> | 2014-09-04 01:39:28 +0200 |
|---|---|---|
| committer | Michal Idziorek <m.i@gmx.at> | 2014-09-04 01:39:28 +0200 |
| commit | a8286a152ecc3558837da24b7241e837ff7e3c1e (patch) | |
| tree | a62465b2ea61c99ffd95e4e6763a2dbd82cdbcd9 | |
| parent | 5268de5650b608f864f9a100958a3f4b8a7a826d (diff) | |
new default interrupt handler in asm
| -rw-r--r-- | asm/int_default_handler.asm | 16 | ||||
| -rw-r--r-- | kernel/interrupts.c | 10 |
2 files changed, 21 insertions, 5 deletions
diff --git a/asm/int_default_handler.asm b/asm/int_default_handler.asm new file mode 100644 index 0000000..4515482 --- /dev/null +++ b/asm/int_default_handler.asm @@ -0,0 +1,16 @@ +global int_default_handler +[extern int_default] + + +[bits 32] +int_default_handler: + + cli + + call int_default + + mov al, 0x20 ;Port number AND command number to Acknowledge IRQ + out 0x20, al ;Acknowledge IRQ, so we keep getting interrupts + + sti + iret ;Interrupt-Return diff --git a/kernel/interrupts.c b/kernel/interrupts.c index 81ad1c9..c6acf61 100644 --- a/kernel/interrupts.c +++ b/kernel/interrupts.c @@ -5,6 +5,8 @@ #include "../lib/logger/log.h" // logger facilities #define FOOLOS_MODULE_NAME "interrupts" +void int_default_handler(); + void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr); // the interrupt descriptor table @@ -28,13 +30,11 @@ static struct idt_desc } idtd; -void int_def_handler() +void int_default() { - X86_IRQ_BEGIN - panic(FOOLOS_MODULE_NAME,"Unexpected Interrupt occured"); +// panic(FOOLOS_MODULE_NAME,"Unexpected Interrupt occured"); - X86_IRQ_END } void show_error(uint32_t err) @@ -101,7 +101,7 @@ void int_init(uint16_t sel) int i; for(i=0; i<INT_MAX; i++) { - int_install_ir(i, 0b10001110, sel,&int_def_handler); + int_install_ir(i, 0b10001110, sel,&int_default_handler); } // exceptions |
