Many changes:
[Marmot.git] / interrupts.S
bloba9ab123326bacf4c354d8cb481736bcf4d482c69
1         /*
2          * interrupts.S
3          *
4          *      Interrupt handlers.
5          *
6          */
8 #define ASM
9 #include <marmot.h>
11         .macro  SaveGP
12         pushq   %rax
13         pushq   %rbx
14         pushq   %rcx
15         pushq   %rdx
16         pushq   %rbp
17         pushq   %rsi
18         pushq   %rdi
19         pushq   %r8
20         pushq   %r9
21         pushq   %r10
22         pushq   %r11
23         pushq   %r12
24         pushq   %r13
25         pushq   %r14
26         pushq   %r15
27         .endm
29         .macro  RestoreGP
30         popq    %r15
31         popq    %r14
32         popq    %r13
33         popq    %r12
34         popq    %r11
35         popq    %r10
36         popq    %r9
37         popq    %r8
38         popq    %rdi
39         popq    %rsi
40         popq    %rbp
41         popq    %rdx
42         popq    %rcx
43         popq    %rbx
44         popq    %rax
45         .endm
48         .macro  FatalWithCode name
49         .global \name
50 \name:  jmp     Fatal64
51         .endm
53         .macro  FatalNoCode name
54         .global \name
55 \name:  pushq   $0
56         jmp     Fatal64
57         .endm
59         .macro  DumpIH name
60         .global \name
61 \name:  pushq   $0
62         call    Dump64
63         iretq
64         .endm
66         .macro  SpringboardWithCode name landing
67         .global \name
68 \name:  SaveGP
69         leaq    (15 * 16)(%rsp), %rdi
70         call    \landing
71         RestoreGP
72         addq    $8, %rsp
73         iretq
74         .endm
76         .macro irqm irq name
77         .global _IRQStub_\name
78 _IRQStub_\name:
79         cld
80         SaveGP
81         movl    $\irq, %edi
82         call    DoIRQ
83         RestoreGP
84         iretq
85         .endm
88         .section .text
89         .code64
91         /* processor fault/exception handlers */
93         FatalNoCode   DE64
94         DumpIH        DB64
95         DumpIH        NMI64
96         DumpIH        BP64
97         DumpIH        OF64
98         FatalNoCode   BR64
99         FatalNoCode   UD64
100         FatalNoCode   NM64
101         FatalWithCode DF64
102         /* vector 9 is not used */
103         FatalWithCode TS64
104         FatalWithCode NP64
105         FatalWithCode SS64
106         FatalWithCode GP64
107         SpringboardWithCode PF64 HandlePF
108         /* vector 15 is not used */
109         FatalNoCode   MF64
110         FatalWithCode AC64
111         FatalNoCode   MC64
112         FatalNoCode   XF64
113         /* 20-31 are reserved */
115         irqm PIT_IRQ PIT
116         irqm KBD_IRQ KBD
117         irqm RTC_IRQ RTC
118         irqm MOUSE_IRQ MOUSE
120 Dump64: ret
122         .global Fatal64
123 Fatal64:
124         call    Dump64
125 1:      hlt
126         jmp     1b