aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/interrupts/generic.c
blob: 900c7e3d0fff38e7e269328b1181cb051409ac2b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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();
    //}
}