summaryrefslogtreecommitdiff
path: root/kernel/cpu/idt.S
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/cpu/idt.S')
-rw-r--r--kernel/cpu/idt.S666
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