summaryrefslogtreecommitdiff
path: root/kernel/interrupts.c
diff options
context:
space:
mode:
authorMiguel <m.i@gmx.at>2018-08-31 11:49:07 +0200
committerMiguel <m.i@gmx.at>2018-08-31 11:49:07 +0200
commit47d7e8e4527c663dd1a0c04a4ea5624589464895 (patch)
treed6d5ef82f1089a9ab058b27c427c1463db0fae60 /kernel/interrupts.c
parent4404fa9b3d98646f942e32146722a9d0a68edc13 (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.c43
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];