summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMichal Idziorek <m.i@gmx.at>2014-09-04 15:16:13 +0200
committerMichal Idziorek <m.i@gmx.at>2014-09-04 15:16:13 +0200
commit06e382afcbf199e5e4ec92574a3872ab04fb6e9e (patch)
tree08bb57d147d31cd4eefc26567849b1c6a2dbbe7f /kernel/interrupts.c
parent706d8edc5abf15960ff8bebf9a2a6dc76b23eeac (diff)
Improved physical memory manager and cleaning up.
Diffstat (limited to 'kernel/interrupts.c')
-rw-r--r--kernel/interrupts.c29
1 files changed, 26 insertions, 3 deletions
diff --git a/kernel/interrupts.c b/kernel/interrupts.c
index c6acf61..902538b 100644
--- a/kernel/interrupts.c
+++ b/kernel/interrupts.c
@@ -1,13 +1,17 @@
+#define FOOLOS_MODULE_NAME "interrupts"
+
+#include "lib/logger/log.h" // logger facilities
+
#include "interrupts.h"
#include "lib/int/stdint.h"
#include "x86.h"
-#include "../lib/logger/log.h" // logger facilities
-#define FOOLOS_MODULE_NAME "interrupts"
+void int_clock_handler();
+void int_kb_handler();
+void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr);
void int_default_handler();
-void int_install_ir(int irq, uint16_t flags, uint16_t sel, void *addr);
// the interrupt descriptor table
static struct int_desc
@@ -125,6 +129,25 @@ void int_init(uint16_t sel)
int_install_ir(17, 0b10001110, 0x08,&int_irq17);
int_install_ir(18, 0b10001110, 0x08,&int_irq18);
+ // setup some custom interrupts
+ // remember that we shifted all interrupts with the pic by 32
+
+ // install PIT interrupt handler (irq 0 => 32)
+ int_install_ir(32, 0b10001110, 0x08,&int_clock_handler);
+
+ // install keyboard interrupt handler (irq 1 => 33)
+ int_install_ir(33, 0b10001110, 0x08,&int_kb_handler);
+
+ #ifdef FOOLOS_COMPILE_FLOPPY
+ // install floppy interrupt handler (irq 6 => 38)
+ int_install_ir(38, 0b10001110, 0x08,&int_floppy_handler);
+ #endif
+
+ int_install();
+
+ // now we can enable interrupts back again
+ x86_int_enable();
+
}
void int_install()