summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/int_default_handler.asm16
-rw-r--r--kernel/interrupts.c10
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