aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/idt.h
blob: 74ae7f9751cb7eac5495e5154c71d06171be19d8 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
#pragma once

#include <stdint.h>
#include <stdbool.h>

#define INT_CALL 0xC
#define INT_INT 0xE
#define INT_TRAP 0xF

extern void vector0();
extern void vector1();
extern void vector2();
extern void vector3();
extern void vector4();
extern void vector5();
extern void vector6();
extern void vector7();
extern void vector8();
extern void vector9();
extern void vector10();
extern void vector11();
extern void vector12();
extern void vector13();
extern void vector14();
extern void vector15();
extern void vector16();
extern void vector17();
extern void vector18();
extern void vector19();
extern void vector20();
extern void vector21();
extern void vector22();
extern void vector23();
extern void vector24();
extern void vector25();
extern void vector26();
extern void vector27();
extern void vector28();
extern void vector29();
extern void vector30();
extern void vector31();
extern void vector32();
extern void vector33();
extern void vector34();
extern void vector35();
extern void vector36();
extern void vector37();
extern void vector38();
extern void vector39();
extern void vector40();
extern void vector41();
extern void vector42();
extern void vector43();
extern void vector44();
extern void vector45();
extern void vector46();
extern void vector47();
extern void vector48();
extern void vector49();
extern void vector50();
extern void vector51();
extern void vector52();
extern void vector53();
extern void vector54();
extern void vector55();
extern void vector56();
extern void vector57();
extern void vector58();
extern void vector59();
extern void vector60();
extern void vector61();
extern void vector62();
extern void vector63();
extern void vector64();
extern void vector65();
extern void vector66();
extern void vector67();
extern void vector68();
extern void vector69();
extern void vector70();
extern void vector71();
extern void vector72();
extern void vector73();
extern void vector74();
extern void vector75();
extern void vector76();
extern void vector77();
extern void vector78();
extern void vector79();
extern void vector80();
extern void vector81();
extern void vector82();
extern void vector83();
extern void vector84();
extern void vector85();
extern void vector86();
extern void vector87();
extern void vector88();
extern void vector89();
extern void vector90();
extern void vector91();
extern void vector92();
extern void vector93();
extern void vector94();
extern void vector95();
extern void vector96();
extern void vector97();
extern void vector98();
extern void vector99();
extern void vector100();
extern void vector101();
extern void vector102();
extern void vector103();
extern void vector104();
extern void vector105();
extern void vector106();
extern void vector107();
extern void vector108();
extern void vector109();
extern void vector110();
extern void vector111();
extern void vector112();
extern void vector113();
extern void vector114();
extern void vector115();
extern void vector116();
extern void vector117();
extern void vector118();
extern void vector119();
extern void vector120();
extern void vector121();
extern void vector122();
extern void vector123();
extern void vector124();
extern void vector125();
extern void vector126();
extern void vector127();
extern void vector128();
extern void vector129();
extern void vector130();
extern void vector131();
extern void vector132();
extern void vector133();
extern void vector134();
extern void vector135();
extern void vector136();
extern void vector137();
extern void vector138();
extern void vector139();
extern void vector140();
extern void vector141();
extern void vector142();
extern void vector143();
extern void vector144();
extern void vector145();
extern void vector146();
extern void vector147();
extern void vector148();
extern void vector149();
extern void vector150();
extern void vector151();
extern void vector152();
extern void vector153();
extern void vector154();
extern void vector155();
extern void vector156();
extern void vector157();
extern void vector158();
extern void vector159();
extern void vector160();
extern void vector161();
extern void vector162();
extern void vector163();
extern void vector164();
extern void vector165();
extern void vector166();
extern void vector167();
extern void vector168();
extern void vector169();
extern void vector170();
extern void vector171();
extern void vector172();
extern void vector173();
extern void vector174();
extern void vector175();
extern void vector176();
extern void vector177();
extern void vector178();
extern void vector179();
extern void vector180();
extern void vector181();
extern void vector182();
extern void vector183();
extern void vector184();
extern void vector185();
extern void vector186();
extern void vector187();
extern void vector188();
extern void vector189();
extern void vector190();
extern void vector191();
extern void vector192();
extern void vector193();
extern void vector194();
extern void vector195();
extern void vector196();
extern void vector197();
extern void vector198();
extern void vector199();
extern void vector200();
extern void vector201();
extern void vector202();
extern void vector203();
extern void vector204();
extern void vector205();
extern void vector206();
extern void vector207();
extern void vector208();
extern void vector209();
extern void vector210();
extern void vector211();
extern void vector212();
extern void vector213();
extern void vector214();
extern void vector215();
extern void vector216();
extern void vector217();
extern void vector218();
extern void vector219();
extern void vector220();
extern void vector221();
extern void vector222();
extern void vector223();
extern void vector224();
extern void vector225();
extern void vector226();
extern void vector227();
extern void vector228();
extern void vector229();
extern void vector230();
extern void vector231();
extern void vector232();
extern void vector233();
extern void vector234();
extern void vector235();
extern void vector236();
extern void vector237();
extern void vector238();
extern void vector239();
extern void vector240();
extern void vector241();
extern void vector242();
extern void vector243();
extern void vector244();
extern void vector245();
extern void vector246();
extern void vector247();
extern void vector248();
extern void vector249();
extern void vector250();
extern void vector251();
extern void vector252();
extern void vector253();
extern void vector254();
extern void vector255();

typedef struct __attribute__((packed))
{
    uint16_t size;
    uint64_t ptr;
}  idt_load;

typedef struct __attribute__((packed))
{
    uint64_t target_offset;
    uint16_t target_selector;
    uint8_t ist; // 3 bits
    uint8_t type; // 4 bits
    uint8_t dpl;
    bool p;
} gate;

void init_idt();
void make_call_gate(gate* g, uint64_t* rg);
void make_int_gate(gate* g, uint64_t* rg);