summaryrefslogtreecommitdiff
path: root/arch/i386/boot
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--arch/i386/kernel/gdt.c (renamed from arch/i386/boot/gdt.c)0
-rw-r--r--arch/i386/kernel/idt.c (renamed from arch/i386/boot/idt.c)42
-rw-r--r--arch/i386/kernel/isr.s (renamed from arch/i386/boot/isr.s)0
3 files changed, 16 insertions, 26 deletions
diff --git a/arch/i386/boot/gdt.c b/arch/i386/kernel/gdt.c
index c0cf127..c0cf127 100644
--- a/arch/i386/boot/gdt.c
+++ b/arch/i386/kernel/gdt.c
diff --git a/arch/i386/boot/idt.c b/arch/i386/kernel/idt.c
index 7b9401d..5c0766c 100644
--- a/arch/i386/boot/idt.c
+++ b/arch/i386/kernel/idt.c
@@ -1,7 +1,8 @@
+#include <kernel/idt.h>
#include <kernel/syscall.h>
#include <kernel/panic.h>
#include <kernel/gdt.h>
-#include <kernel/isr.h>
+#include <kernel/asm.h>
#include <kernel/io.h>
#include <kernel/pic.h>
#include <kernel/string.h>
@@ -44,51 +45,40 @@ const char* exceptions[] = {
"RESERVED"
};
-__attribute__((noreturn))
-void halt_catch_fire(struct isr_frame *frame) {
- dump_reg(frame);
- kprintf("ERRNO=%x\n", frame->errno);
- __asm__ volatile("cli;hlt");
- while (1);
-}
-
-void exception_handler(struct isr_frame *frame) {
- switch (frame->vector) {
+void exception_handler(struct regs *regs) {
+ switch (regs->isr_vector) {
case 0x00:
panic("Division by zero in kernel address space");
- halt_catch_fire(frame);
+ break;
case 0x06:
panic("Invalid opcode in kernel address space");
- halt_catch_fire(frame);
+ break;
case 0x08:
panic("Double fault in interrupt handler");
- halt_catch_fire(frame);
+ break;
case 0x0D:
panic("Protection fault in kernel address space");
- halt_catch_fire(frame);
+ break;
case 0x0E:
- page_fault_handler(frame);
+ page_fault_handler(regs);
break;
default:
panic("Unhandled exception");
- halt_catch_fire(frame);
}
}
-void interrupt_handler(struct isr_frame frame) {
- if (frame.vector < 32) {
- exception_handler(&frame);
- } else if (frame.vector < 48) {
- irq_dispatch(&frame);
+void interrupt_handler(struct regs regs) {
+ if (regs.isr_vector < 32) {
+ exception_handler(&regs);
+ } else if (regs.isr_vector < 48) {
+ irq_dispatch(&regs);
} else {
- switch (frame.vector) {
+ switch (regs.isr_vector) {
case 0x80:
- handle_syscall(&frame);
+ handle_syscall(&regs);
break;
default:
panic("Unmapped interrupt");
- halt_catch_fire(&frame);
- __asm__ volatile("cli;hlt");
}
}
}
diff --git a/arch/i386/boot/isr.s b/arch/i386/kernel/isr.s
index 55db35e..55db35e 100644
--- a/arch/i386/boot/isr.s
+++ b/arch/i386/kernel/isr.s