FreeRTOS-Kernel/portable/GCC/XEN_x86/x86-64/asm_src/idt.asm

367 lines
5.4 KiB
NASM

; idt
;
; Copyright (C) 2025 Advanced Micro Devices, Inc. or its affiliates. All Rights Reserved.
;
; SPDX-License-Identifier: MIT
;
; Permission is hereby granted, free of charge, to any person obtaining a copy of
; this software and associated documentation files (the "Software"), to deal in
; the Software without restriction, including without limitation the rights to
; use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; the Software, and to permit persons to whom the Software is furnished to do so,
; subject to the following conditions:
;
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;
section .text
extern vHandler
global sysint
global read_isr
global load_idt
global load_cr3
global starttask
global read_cr2
global InterruptReturn
Interrupt:
push rax
push rbx
push rcx
push rdx
push rsi
push rdi
push rbp
push r8
push r9
push r10
push r11
push r12
push r13
push r14
push r15
mov rdi,rsp
call vHandler
InterruptReturn:
pop r15
pop r14
pop r13
pop r12
pop r11
pop r10
pop r9
pop r8
pop rbp
pop rdi
pop rsi
pop rdx
pop rcx
pop rbx
pop rax
add rsp,16
iretq
%macro VECTOR_1 1
global vector%1
vector%1:
cli
push byte %1
jmp Interrupt
%endmacro
%macro VECTOR_2 1
global vector%1
vector%1:
cli
push 0
push %1
jmp Interrupt
%endmacro
VECTOR_2 0
VECTOR_2 1
VECTOR_2 2
VECTOR_2 3
VECTOR_2 4
VECTOR_2 5
VECTOR_2 6
VECTOR_2 7
; Error code is pushed by CPU for the following vectors
; So we dont push error code in these vectors
VECTOR_1 8
VECTOR_1 10
VECTOR_1 11
VECTOR_1 12
VECTOR_1 13
VECTOR_1 14
VECTOR_2 16
VECTOR_1 17
VECTOR_2 18
VECTOR_2 19
VECTOR_2 32
VECTOR_2 33
VECTOR_2 34
VECTOR_2 35
VECTOR_2 36
VECTOR_2 37
VECTOR_2 38
VECTOR_2 39
VECTOR_2 40
VECTOR_2 41
VECTOR_2 42
VECTOR_2 43
VECTOR_2 44
VECTOR_2 45
VECTOR_2 46
VECTOR_2 47
VECTOR_2 48
VECTOR_2 49
VECTOR_2 50
VECTOR_2 51
VECTOR_2 52
VECTOR_2 53
VECTOR_2 54
VECTOR_2 55
VECTOR_2 56
VECTOR_2 57
VECTOR_2 58
VECTOR_2 59
VECTOR_2 60
VECTOR_2 61
VECTOR_2 62
VECTOR_2 63
VECTOR_2 64
VECTOR_2 65
VECTOR_2 66
VECTOR_2 67
VECTOR_2 68
VECTOR_2 69
VECTOR_2 70
VECTOR_2 71
VECTOR_2 72
VECTOR_2 73
VECTOR_2 74
VECTOR_2 75
VECTOR_2 76
VECTOR_2 77
VECTOR_2 78
VECTOR_2 79
VECTOR_2 80
VECTOR_2 81
VECTOR_2 82
VECTOR_2 83
VECTOR_2 84
VECTOR_2 85
VECTOR_2 86
VECTOR_2 87
VECTOR_2 88
VECTOR_2 89
VECTOR_2 90
VECTOR_2 91
VECTOR_2 92
VECTOR_2 93
VECTOR_2 94
VECTOR_2 95
VECTOR_2 96
VECTOR_2 97
VECTOR_2 98
VECTOR_2 99
VECTOR_2 100
VECTOR_2 101
VECTOR_2 102
VECTOR_2 103
VECTOR_2 104
VECTOR_2 105
VECTOR_2 106
VECTOR_2 107
VECTOR_2 108
VECTOR_2 109
VECTOR_2 110
VECTOR_2 111
VECTOR_2 112
VECTOR_2 113
VECTOR_2 114
VECTOR_2 115
VECTOR_2 116
VECTOR_2 117
VECTOR_2 118
VECTOR_2 119
VECTOR_2 120
VECTOR_2 121
VECTOR_2 122
VECTOR_2 123
VECTOR_2 124
VECTOR_2 125
VECTOR_2 126
VECTOR_2 127
; 128 is used by system calls
VECTOR_2 129
VECTOR_2 130
VECTOR_2 131
VECTOR_2 132
VECTOR_2 133
VECTOR_2 134
VECTOR_2 135
VECTOR_2 136
VECTOR_2 137
VECTOR_2 138
VECTOR_2 139
VECTOR_2 140
VECTOR_2 141
VECTOR_2 142
VECTOR_2 143
VECTOR_2 144
VECTOR_2 145
VECTOR_2 146
VECTOR_2 147
VECTOR_2 148
VECTOR_2 149
VECTOR_2 150
VECTOR_2 151
VECTOR_2 152
VECTOR_2 153
VECTOR_2 154
VECTOR_2 155
VECTOR_2 156
VECTOR_2 157
VECTOR_2 158
VECTOR_2 159
VECTOR_2 160
VECTOR_2 161
VECTOR_2 162
VECTOR_2 163
VECTOR_2 164
VECTOR_2 165
VECTOR_2 166
VECTOR_2 167
VECTOR_2 168
VECTOR_2 169
VECTOR_2 170
VECTOR_2 171
VECTOR_2 172
VECTOR_2 173
VECTOR_2 174
VECTOR_2 175
VECTOR_2 176
VECTOR_2 177
VECTOR_2 178
VECTOR_2 179
VECTOR_2 180
VECTOR_2 181
VECTOR_2 182
VECTOR_2 183
VECTOR_2 184
VECTOR_2 185
VECTOR_2 186
VECTOR_2 187
VECTOR_2 188
VECTOR_2 189
VECTOR_2 190
VECTOR_2 191
VECTOR_2 192
VECTOR_2 193
VECTOR_2 194
VECTOR_2 195
VECTOR_2 196
VECTOR_2 197
VECTOR_2 198
VECTOR_2 199
VECTOR_2 200
VECTOR_2 201
VECTOR_2 202
VECTOR_2 203
VECTOR_2 204
VECTOR_2 205
VECTOR_2 206
VECTOR_2 207
VECTOR_2 208
VECTOR_2 209
VECTOR_2 210
VECTOR_2 211
VECTOR_2 212
VECTOR_2 213
VECTOR_2 214
VECTOR_2 215
VECTOR_2 216
VECTOR_2 217
VECTOR_2 218
VECTOR_2 219
VECTOR_2 220
VECTOR_2 221
VECTOR_2 222
VECTOR_2 223
VECTOR_2 224
VECTOR_2 225
VECTOR_2 226
VECTOR_2 227
VECTOR_2 228
VECTOR_2 229
VECTOR_2 230
VECTOR_2 231
VECTOR_2 232
VECTOR_2 233
VECTOR_2 234
VECTOR_2 235
VECTOR_2 236
VECTOR_2 237
VECTOR_2 238
VECTOR_2 239
VECTOR_2 240
VECTOR_2 241
VECTOR_2 242
VECTOR_2 243
VECTOR_2 244
VECTOR_2 245
VECTOR_2 246
VECTOR_2 247
VECTOR_2 248
VECTOR_2 249
VECTOR_2 250
VECTOR_2 251
VECTOR_2 252
VECTOR_2 253
VECTOR_2 254
VECTOR_2 255
sysint:
push 0
push 0x80
jmp Interrupt
read_isr:
mov al,11
out 0x20,al
in al,0x20
ret
load_idt:
lidt [rdi]
ret
load_cr3:
mov rax,rdi
mov cr3,rax
ret
read_cr2:
mov rax,cr2
ret
starttask:
mov rsp,rdi
jmp InterruptReturn