diff options
Diffstat (limited to 'kernel/interrupts/generic.c')
| -rw-r--r-- | kernel/interrupts/generic.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/kernel/interrupts/generic.c b/kernel/interrupts/generic.c new file mode 100644 index 0000000..900c7e3 --- /dev/null +++ b/kernel/interrupts/generic.c @@ -0,0 +1,95 @@ +#include "generic.h" +#include "../kprintf.h" +#include "../asm_inline.h" + +void generic_interrupt(trapframe* f) +{ + + kprintf("!!!! INTERRUPT !!!!\n"); + kprintf("ARG: %p\n", f); + switch(f->trapno) + { + case 0x0: + kprintf("NO: %s | ERR_ %lX\n", "Division Error", f->err); + break; + case 0x1: + kprintf("NO: %s | ERR_ %lX\n", "Debug", f->err); + break; + case 0x2: + kprintf("NO: %s | ERR_ %lX\n", "Non-Maskable", f->err); + break; + case 0x3: + kprintf("NO: %s | ERR_ %lX\n", "Breakpoint", f->err); + break; + case 0x4: + kprintf("NO: %s | ERR_ %lX\n", "Overflow", f->err); + break; + case 0x5: + kprintf("NO: %s | ERR_ %lX\n", "Bound Range Exceeded", f->err); + break; + case 0x6: + kprintf("NO: %s | ERR_ %lX\n", "Invalid Opcode", f->err); + break; + case 0x7: + kprintf("NO: %s | ERR_ %lX\n", "Device Not Available", f->err); + break; + case 0x8: + kprintf("NO: %s | ERR_ %lX\n", "Double Fault", f->err); + break; + case 0xA: + kprintf("NO: %s | ERR_ %lX\n", "Invalid TSS", f->err); + break; + case 0xB: + kprintf("NO: %s | ERR_ %lX\n", "Segment Not Present", f->err); + break; + case 0xC: + kprintf("NO: %s | ERR_ %lX\n", "Stack-Segment fault", f->err); + break; + case 0xD: + kprintf("NO: %s | ERR_ %lX\n", "General Protection Fault", f->err); + break; + case 0xE: + kprintf("NO: %s | ERR_ %lX\n", "Page Fault", f->err); + break; + case 0x10: + kprintf("NO: %s | ERR_ %lX\n", "x87 Floating Point Exception", f->err); + break; + case 0x11: + kprintf("NO: %s | ERR_ %lX\n", "Alignment Check", f->err); + break; + case 0x12: + kprintf("NO: %s | ERR_ %lX\n", "Machine Check", f->err); + break; + case 0x13: + kprintf("NO: %s | ERR_ %lX\n", "SIMD Floating Point Exception", f->err); + break; + case 0x14: + kprintf("NO: %s | ERR_ %lX\n", "Virtualization Exception", f->err); + break; + case 0x15: + kprintf("NO: %s | ERR_ %lX\n", "Control Protection Exception", f->err); + break; + case 0x1C: + kprintf("NO: %s | ERR_ %lX\n", "Hypervisor Injection Exception", f->err); + break; + case 0x1D: + kprintf("NO: %s | ERR_ %lX\n", "VMM Communication Exception", f->err); + break; + case 0x1E: + kprintf("NO: %s | ERR_ %lX\n", "Security Exception", f->err); + break; + default: + kprintf("NO: %lX | ERR: %lX\n", f->trapno, f->err); + } + kprintf("RAX: %lX | RBX: %lX | RCX: %lX | RDX: %lX\n", f->rax, f->rbx, f->rcx, f->rdx); + kprintf("RSI: %lX | RDI: %lX | RBP: %lX\n", f->rsi, f->rdi, f->rbp); + kprintf("R8: %lX | R9: %lX | R10: %lX | R11: %lX\n", f->r8, f->r9, f->r10, f->r11); + kprintf("R12: %lX | R13: %lX | R14: %lX | R15: %lX\n", f->r12, f->r13, f->r14, f->r15); + kprintf("===================\n"); + hlt(); + + //if(f->err == 0xE) + //{ + // hlt(); + //} +} |
