diff options
Diffstat (limited to 'kernel/cpu/idt.S')
-rw-r--r-- | kernel/cpu/idt.S | 666 |
1 files changed, 666 insertions, 0 deletions
diff --git a/kernel/cpu/idt.S b/kernel/cpu/idt.S new file mode 100644 index 0000000..0ba35f8 --- /dev/null +++ b/kernel/cpu/idt.S @@ -0,0 +1,666 @@ + .global isr_stub_table + + .extern idt_exception_handler + .extern idt_pic_timer + .extern idt_pic_keyboard + .extern idt_pic_mouse + .extern idt_pic_eoi + +.macro PUSHALL + pushq %rax + pushq %rbx + pushq %rcx + pushq %rdx + pushq %rsi + pushq %rdi + pushq %rbp + pushq %r8 + pushq %r9 + pushq %r10 + pushq %r11 + pushq %r12 + pushq %r13 + pushq %r14 + pushq %r15 +.endm + +.macro POPALL + popq %r15 + popq %r14 + popq %r13 + popq %r12 + popq %r11 + popq %r10 + popq %r9 + popq %r8 + popq %rbp + popq %rdi + popq %rsi + popq %rdx + popq %rcx + popq %rbx + popq %rax +.endm + +# call the exception handler with the interrupt number +# args: interrupt number +.macro ISRException num + .align 8 +isr_stub_\num: + PUSHALL + cld + movq $\num, %rdi # exception number + movq $0, %rsi # placeholder error code + movq %rsp, %rdx # top of stack + callq idt_exception_handler + POPALL + iretq +.endm + +# call the exception handler with the interrupt number +# these exceptions also put an error code on the stack +# args: interrupt number +.macro ISRExceptionCode num + .align 8 +isr_stub_\num: + # retrieve the error code without corrupting registers + mov %eax, isr_tmp + popq %rax + mov %eax, isr_err_code + movq isr_tmp, %rax + PUSHALL + cld + movq $\num, %rdi # exception number + movq isr_err_code, %rsi # error code + movq %rsp, %rdx # top of stack + callq idt_exception_handler + POPALL + iretq +.endm + +.macro PICGeneric num + .align 8 +isr_stub_\num: + PUSHALL + cld + movq $\num, %rdi + callq idt_pic_eoi + POPALL + iretq +.endm + +.macro PICTimer num + .align 8 +isr_stub_\num: + PUSHALL + cld + callq idt_pic_timer + movq $\num, %rdi + callq idt_pic_eoi + POPALL + iretq +.endm + +.macro PICKeyboard num + .align 8 +isr_stub_\num: + PUSHALL + cld + callq idt_pic_keyboard + movq $\num, %rdi + callq idt_pic_eoi + POPALL + iretq +.endm + +.macro PICMouse num + .align 8 +isr_stub_\num: + PUSHALL + cld + callq idt_pic_mouse + movq $\num, %rdi + callq idt_pic_eoi + POPALL + iretq +.endm + +# do nothing +# args: interrupt number +.macro ISRIgnore num + .align 8 +isr_stub_\num: + iretq +.endm + +# isr temp storage + .section .data +isr_tmp: + .quad 0 +isr_err_code: + .quad 0 + +# isr stub table + .section .rodata + .align 16 + .code64 +isr_stub_table: + .quad isr_stub_0 + .quad isr_stub_1 + .quad isr_stub_2 + .quad isr_stub_3 + .quad isr_stub_4 + .quad isr_stub_5 + .quad isr_stub_6 + .quad isr_stub_7 + .quad isr_stub_8 + .quad isr_stub_9 + .quad isr_stub_10 + .quad isr_stub_11 + .quad isr_stub_12 + .quad isr_stub_13 + .quad isr_stub_14 + .quad isr_stub_15 + .quad isr_stub_16 + .quad isr_stub_17 + .quad isr_stub_18 + .quad isr_stub_19 + .quad isr_stub_20 + .quad isr_stub_21 + .quad isr_stub_22 + .quad isr_stub_23 + .quad isr_stub_24 + .quad isr_stub_25 + .quad isr_stub_26 + .quad isr_stub_27 + .quad isr_stub_28 + .quad isr_stub_29 + .quad isr_stub_30 + .quad isr_stub_31 + .quad isr_stub_32 + .quad isr_stub_33 + .quad isr_stub_34 + .quad isr_stub_35 + .quad isr_stub_36 + .quad isr_stub_37 + .quad isr_stub_38 + .quad isr_stub_39 + .quad isr_stub_40 + .quad isr_stub_41 + .quad isr_stub_42 + .quad isr_stub_43 + .quad isr_stub_44 + .quad isr_stub_45 + .quad isr_stub_46 + .quad isr_stub_47 + .quad isr_stub_48 + .quad isr_stub_49 + .quad isr_stub_50 + .quad isr_stub_51 + .quad isr_stub_52 + .quad isr_stub_53 + .quad isr_stub_54 + .quad isr_stub_55 + .quad isr_stub_56 + .quad isr_stub_57 + .quad isr_stub_58 + .quad isr_stub_59 + .quad isr_stub_60 + .quad isr_stub_61 + .quad isr_stub_62 + .quad isr_stub_63 + .quad isr_stub_64 + .quad isr_stub_65 + .quad isr_stub_66 + .quad isr_stub_67 + .quad isr_stub_68 + .quad isr_stub_69 + .quad isr_stub_70 + .quad isr_stub_71 + .quad isr_stub_72 + .quad isr_stub_73 + .quad isr_stub_74 + .quad isr_stub_75 + .quad isr_stub_76 + .quad isr_stub_77 + .quad isr_stub_78 + .quad isr_stub_79 + .quad isr_stub_80 + .quad isr_stub_81 + .quad isr_stub_82 + .quad isr_stub_83 + .quad isr_stub_84 + .quad isr_stub_85 + .quad isr_stub_86 + .quad isr_stub_87 + .quad isr_stub_88 + .quad isr_stub_89 + .quad isr_stub_90 + .quad isr_stub_91 + .quad isr_stub_92 + .quad isr_stub_93 + .quad isr_stub_94 + .quad isr_stub_95 + .quad isr_stub_96 + .quad isr_stub_97 + .quad isr_stub_98 + .quad isr_stub_99 + .quad isr_stub_100 + .quad isr_stub_101 + .quad isr_stub_102 + .quad isr_stub_103 + .quad isr_stub_104 + .quad isr_stub_105 + .quad isr_stub_106 + .quad isr_stub_107 + .quad isr_stub_108 + .quad isr_stub_109 + .quad isr_stub_110 + .quad isr_stub_111 + .quad isr_stub_112 + .quad isr_stub_113 + .quad isr_stub_114 + .quad isr_stub_115 + .quad isr_stub_116 + .quad isr_stub_117 + .quad isr_stub_118 + .quad isr_stub_119 + .quad isr_stub_120 + .quad isr_stub_121 + .quad isr_stub_122 + .quad isr_stub_123 + .quad isr_stub_124 + .quad isr_stub_125 + .quad isr_stub_126 + .quad isr_stub_127 + .quad isr_stub_128 + .quad isr_stub_129 + .quad isr_stub_130 + .quad isr_stub_131 + .quad isr_stub_132 + .quad isr_stub_133 + .quad isr_stub_134 + .quad isr_stub_135 + .quad isr_stub_136 + .quad isr_stub_137 + .quad isr_stub_138 + .quad isr_stub_139 + .quad isr_stub_140 + .quad isr_stub_141 + .quad isr_stub_142 + .quad isr_stub_143 + .quad isr_stub_144 + .quad isr_stub_145 + .quad isr_stub_146 + .quad isr_stub_147 + .quad isr_stub_148 + .quad isr_stub_149 + .quad isr_stub_150 + .quad isr_stub_151 + .quad isr_stub_152 + .quad isr_stub_153 + .quad isr_stub_154 + .quad isr_stub_155 + .quad isr_stub_156 + .quad isr_stub_157 + .quad isr_stub_158 + .quad isr_stub_159 + .quad isr_stub_160 + .quad isr_stub_161 + .quad isr_stub_162 + .quad isr_stub_163 + .quad isr_stub_164 + .quad isr_stub_165 + .quad isr_stub_166 + .quad isr_stub_167 + .quad isr_stub_168 + .quad isr_stub_169 + .quad isr_stub_170 + .quad isr_stub_171 + .quad isr_stub_172 + .quad isr_stub_173 + .quad isr_stub_174 + .quad isr_stub_175 + .quad isr_stub_176 + .quad isr_stub_177 + .quad isr_stub_178 + .quad isr_stub_179 + .quad isr_stub_180 + .quad isr_stub_181 + .quad isr_stub_182 + .quad isr_stub_183 + .quad isr_stub_184 + .quad isr_stub_185 + .quad isr_stub_186 + .quad isr_stub_187 + .quad isr_stub_188 + .quad isr_stub_189 + .quad isr_stub_190 + .quad isr_stub_191 + .quad isr_stub_192 + .quad isr_stub_193 + .quad isr_stub_194 + .quad isr_stub_195 + .quad isr_stub_196 + .quad isr_stub_197 + .quad isr_stub_198 + .quad isr_stub_199 + .quad isr_stub_200 + .quad isr_stub_201 + .quad isr_stub_202 + .quad isr_stub_203 + .quad isr_stub_204 + .quad isr_stub_205 + .quad isr_stub_206 + .quad isr_stub_207 + .quad isr_stub_208 + .quad isr_stub_209 + .quad isr_stub_210 + .quad isr_stub_211 + .quad isr_stub_212 + .quad isr_stub_213 + .quad isr_stub_214 + .quad isr_stub_215 + .quad isr_stub_216 + .quad isr_stub_217 + .quad isr_stub_218 + .quad isr_stub_219 + .quad isr_stub_220 + .quad isr_stub_221 + .quad isr_stub_222 + .quad isr_stub_223 + .quad isr_stub_224 + .quad isr_stub_225 + .quad isr_stub_226 + .quad isr_stub_227 + .quad isr_stub_228 + .quad isr_stub_229 + .quad isr_stub_230 + .quad isr_stub_231 + .quad isr_stub_232 + .quad isr_stub_233 + .quad isr_stub_234 + .quad isr_stub_235 + .quad isr_stub_236 + .quad isr_stub_237 + .quad isr_stub_238 + .quad isr_stub_239 + .quad isr_stub_240 + .quad isr_stub_241 + .quad isr_stub_242 + .quad isr_stub_243 + .quad isr_stub_244 + .quad isr_stub_245 + .quad isr_stub_246 + .quad isr_stub_247 + .quad isr_stub_248 + .quad isr_stub_249 + .quad isr_stub_250 + .quad isr_stub_251 + .quad isr_stub_252 + .quad isr_stub_253 + .quad isr_stub_254 + .quad isr_stub_255 + +# isr stubs + .section .text + .code64 + +ISRException 0 +ISRException 1 +ISRException 2 +ISRException 3 +ISRException 4 +ISRException 5 +ISRException 6 +ISRException 7 +ISRExceptionCode 8 +ISRException 9 +ISRExceptionCode 10 +ISRExceptionCode 11 +ISRExceptionCode 12 +ISRExceptionCode 13 +ISRExceptionCode 14 +ISRException 15 +ISRException 16 +ISRExceptionCode 17 +ISRException 18 +ISRException 19 +ISRException 20 +ISRExceptionCode 21 +ISRException 22 +ISRException 23 +ISRException 24 +ISRException 25 +ISRException 26 +ISRException 27 +ISRException 28 +ISRExceptionCode 29 +ISRExceptionCode 30 +ISRException 31 + +PICTimer 32 # 0 +PICKeyboard 33 # 1 +PICGeneric 34 # 2 +PICGeneric 35 # 3 +PICGeneric 36 # 4 +PICGeneric 37 # 5 +PICGeneric 38 # 6 +PICGeneric 39 # 7 +PICGeneric 40 # 8 +PICGeneric 41 # 9 +PICGeneric 42 # 10 +PICGeneric 43 # 11 +PICMouse 44 # 12 +PICGeneric 45 # 13 +PICGeneric 46 # 14 +PICGeneric 47 # 15 + +ISRIgnore 48 +ISRIgnore 49 +ISRIgnore 50 +ISRIgnore 51 +ISRIgnore 52 +ISRIgnore 53 +ISRIgnore 54 +ISRIgnore 55 +ISRIgnore 56 +ISRIgnore 57 +ISRIgnore 58 +ISRIgnore 59 +ISRIgnore 60 +ISRIgnore 61 +ISRIgnore 62 +ISRIgnore 63 +ISRIgnore 64 +ISRIgnore 65 +ISRIgnore 66 +ISRIgnore 67 +ISRIgnore 68 +ISRIgnore 69 +ISRIgnore 70 +ISRIgnore 71 +ISRIgnore 72 +ISRIgnore 73 +ISRIgnore 74 +ISRIgnore 75 +ISRIgnore 76 +ISRIgnore 77 +ISRIgnore 78 +ISRIgnore 79 +ISRIgnore 80 +ISRIgnore 81 +ISRIgnore 82 +ISRIgnore 83 +ISRIgnore 84 +ISRIgnore 85 +ISRIgnore 86 +ISRIgnore 87 +ISRIgnore 88 +ISRIgnore 89 +ISRIgnore 90 +ISRIgnore 91 +ISRIgnore 92 +ISRIgnore 93 +ISRIgnore 94 +ISRIgnore 95 +ISRIgnore 96 +ISRIgnore 97 +ISRIgnore 98 +ISRIgnore 99 +ISRIgnore 100 +ISRIgnore 101 +ISRIgnore 102 +ISRIgnore 103 +ISRIgnore 104 +ISRIgnore 105 +ISRIgnore 106 +ISRIgnore 107 +ISRIgnore 108 +ISRIgnore 109 +ISRIgnore 110 +ISRIgnore 111 +ISRIgnore 112 +ISRIgnore 113 +ISRIgnore 114 +ISRIgnore 115 +ISRIgnore 116 +ISRIgnore 117 +ISRIgnore 118 +ISRIgnore 119 +ISRIgnore 120 +ISRIgnore 121 +ISRIgnore 122 +ISRIgnore 123 +ISRIgnore 124 +ISRIgnore 125 +ISRIgnore 126 +ISRIgnore 127 +ISRIgnore 128 +ISRIgnore 129 +ISRIgnore 130 +ISRIgnore 131 +ISRIgnore 132 +ISRIgnore 133 +ISRIgnore 134 +ISRIgnore 135 +ISRIgnore 136 +ISRIgnore 137 +ISRIgnore 138 +ISRIgnore 139 +ISRIgnore 140 +ISRIgnore 141 +ISRIgnore 142 +ISRIgnore 143 +ISRIgnore 144 +ISRIgnore 145 +ISRIgnore 146 +ISRIgnore 147 +ISRIgnore 148 +ISRIgnore 149 +ISRIgnore 150 +ISRIgnore 151 +ISRIgnore 152 +ISRIgnore 153 +ISRIgnore 154 +ISRIgnore 155 +ISRIgnore 156 +ISRIgnore 157 +ISRIgnore 158 +ISRIgnore 159 +ISRIgnore 160 +ISRIgnore 161 +ISRIgnore 162 +ISRIgnore 163 +ISRIgnore 164 +ISRIgnore 165 +ISRIgnore 166 +ISRIgnore 167 +ISRIgnore 168 +ISRIgnore 169 +ISRIgnore 170 +ISRIgnore 171 +ISRIgnore 172 +ISRIgnore 173 +ISRIgnore 174 +ISRIgnore 175 +ISRIgnore 176 +ISRIgnore 177 +ISRIgnore 178 +ISRIgnore 179 +ISRIgnore 180 +ISRIgnore 181 +ISRIgnore 182 +ISRIgnore 183 +ISRIgnore 184 +ISRIgnore 185 +ISRIgnore 186 +ISRIgnore 187 +ISRIgnore 188 +ISRIgnore 189 +ISRIgnore 190 +ISRIgnore 191 +ISRIgnore 192 +ISRIgnore 193 +ISRIgnore 194 +ISRIgnore 195 +ISRIgnore 196 +ISRIgnore 197 +ISRIgnore 198 +ISRIgnore 199 +ISRIgnore 200 +ISRIgnore 201 +ISRIgnore 202 +ISRIgnore 203 +ISRIgnore 204 +ISRIgnore 205 +ISRIgnore 206 +ISRIgnore 207 +ISRIgnore 208 +ISRIgnore 209 +ISRIgnore 210 +ISRIgnore 211 +ISRIgnore 212 +ISRIgnore 213 +ISRIgnore 214 +ISRIgnore 215 +ISRIgnore 216 +ISRIgnore 217 +ISRIgnore 218 +ISRIgnore 219 +ISRIgnore 220 +ISRIgnore 221 +ISRIgnore 222 +ISRIgnore 223 +ISRIgnore 224 +ISRIgnore 225 +ISRIgnore 226 +ISRIgnore 227 +ISRIgnore 228 +ISRIgnore 229 +ISRIgnore 230 +ISRIgnore 231 +ISRIgnore 232 +ISRIgnore 233 +ISRIgnore 234 +ISRIgnore 235 +ISRIgnore 236 +ISRIgnore 237 +ISRIgnore 238 +ISRIgnore 239 +ISRIgnore 240 +ISRIgnore 241 +ISRIgnore 242 +ISRIgnore 243 +ISRIgnore 244 +ISRIgnore 245 +ISRIgnore 246 +ISRIgnore 247 +ISRIgnore 248 +ISRIgnore 249 +ISRIgnore 250 +ISRIgnore 251 +ISRIgnore 252 +ISRIgnore 253 +ISRIgnore 254 +ISRIgnore 255 |