2 #include <lunaix/types.h>
4 #define IDT_INTERRUPT 0x70
6 #define IDT_ATTR(dpl, type) (((type) << 5) | ((dpl & 3) << 13) | (1 << 15))
9 #define DECLARE_ISR(iv) extern void _asm_isr##iv();
11 #define ISR_INSTALL(idt, iv, isr) \
12 _idt[iv] = ((ptr_t)isr & 0xffff0000) | IDT_ATTR(0, IDT_INTERRUPT); \
14 _idt[iv] |= (KERNEL_CS << 16) | ((ptr_t)isr & 0x0000ffff);
16 u64_t _idt[IDT_ENTRY];
17 u16_t _idt_limit = sizeof(_idt) - 1;
277 exception_install_handler()
279 ISR_INSTALL(_idt, 0, _asm_isr0)
280 ISR_INSTALL(_idt, 1, _asm_isr1)
281 ISR_INSTALL(_idt, 2, _asm_isr2)
282 ISR_INSTALL(_idt, 3, _asm_isr3)
283 ISR_INSTALL(_idt, 4, _asm_isr4)
284 ISR_INSTALL(_idt, 5, _asm_isr5)
285 ISR_INSTALL(_idt, 6, _asm_isr6)
286 ISR_INSTALL(_idt, 7, _asm_isr7)
287 ISR_INSTALL(_idt, 8, _asm_isr8)
288 ISR_INSTALL(_idt, 9, _asm_isr9)
289 ISR_INSTALL(_idt, 10, _asm_isr10)
290 ISR_INSTALL(_idt, 11, _asm_isr11)
291 ISR_INSTALL(_idt, 12, _asm_isr12)
292 ISR_INSTALL(_idt, 13, _asm_isr13)
293 ISR_INSTALL(_idt, 14, _asm_isr14)
294 ISR_INSTALL(_idt, 15, _asm_isr15)
295 ISR_INSTALL(_idt, 16, _asm_isr16)
296 ISR_INSTALL(_idt, 17, _asm_isr17)
297 ISR_INSTALL(_idt, 18, _asm_isr18)
298 ISR_INSTALL(_idt, 19, _asm_isr19)
299 ISR_INSTALL(_idt, 20, _asm_isr20)
300 ISR_INSTALL(_idt, 21, _asm_isr21)
301 ISR_INSTALL(_idt, 22, _asm_isr22)
302 ISR_INSTALL(_idt, 23, _asm_isr23)
303 ISR_INSTALL(_idt, 24, _asm_isr24)
304 ISR_INSTALL(_idt, 25, _asm_isr25)
305 ISR_INSTALL(_idt, 26, _asm_isr26)
306 ISR_INSTALL(_idt, 27, _asm_isr27)
307 ISR_INSTALL(_idt, 28, _asm_isr28)
308 ISR_INSTALL(_idt, 29, _asm_isr29)
309 ISR_INSTALL(_idt, 30, _asm_isr30)
310 ISR_INSTALL(_idt, 31, _asm_isr31)
311 ISR_INSTALL(_idt, 32, _asm_isr32)
312 ISR_INSTALL(_idt, 33, _asm_isr33)
313 ISR_INSTALL(_idt, 34, _asm_isr34)
314 ISR_INSTALL(_idt, 35, _asm_isr35)
315 ISR_INSTALL(_idt, 36, _asm_isr36)
316 ISR_INSTALL(_idt, 37, _asm_isr37)
317 ISR_INSTALL(_idt, 38, _asm_isr38)
318 ISR_INSTALL(_idt, 39, _asm_isr39)
319 ISR_INSTALL(_idt, 40, _asm_isr40)
320 ISR_INSTALL(_idt, 41, _asm_isr41)
321 ISR_INSTALL(_idt, 42, _asm_isr42)
322 ISR_INSTALL(_idt, 43, _asm_isr43)
323 ISR_INSTALL(_idt, 44, _asm_isr44)
324 ISR_INSTALL(_idt, 45, _asm_isr45)
325 ISR_INSTALL(_idt, 46, _asm_isr46)
326 ISR_INSTALL(_idt, 47, _asm_isr47)
327 ISR_INSTALL(_idt, 48, _asm_isr48)
328 ISR_INSTALL(_idt, 49, _asm_isr49)
329 ISR_INSTALL(_idt, 50, _asm_isr50)
330 ISR_INSTALL(_idt, 51, _asm_isr51)
331 ISR_INSTALL(_idt, 52, _asm_isr52)
332 ISR_INSTALL(_idt, 53, _asm_isr53)
333 ISR_INSTALL(_idt, 54, _asm_isr54)
334 ISR_INSTALL(_idt, 55, _asm_isr55)
335 ISR_INSTALL(_idt, 56, _asm_isr56)
336 ISR_INSTALL(_idt, 57, _asm_isr57)
337 ISR_INSTALL(_idt, 58, _asm_isr58)
338 ISR_INSTALL(_idt, 59, _asm_isr59)
339 ISR_INSTALL(_idt, 60, _asm_isr60)
340 ISR_INSTALL(_idt, 61, _asm_isr61)
341 ISR_INSTALL(_idt, 62, _asm_isr62)
342 ISR_INSTALL(_idt, 63, _asm_isr63)
343 ISR_INSTALL(_idt, 64, _asm_isr64)
344 ISR_INSTALL(_idt, 65, _asm_isr65)
345 ISR_INSTALL(_idt, 66, _asm_isr66)
346 ISR_INSTALL(_idt, 67, _asm_isr67)
347 ISR_INSTALL(_idt, 68, _asm_isr68)
348 ISR_INSTALL(_idt, 69, _asm_isr69)
349 ISR_INSTALL(_idt, 70, _asm_isr70)
350 ISR_INSTALL(_idt, 71, _asm_isr71)
351 ISR_INSTALL(_idt, 72, _asm_isr72)
352 ISR_INSTALL(_idt, 73, _asm_isr73)
353 ISR_INSTALL(_idt, 74, _asm_isr74)
354 ISR_INSTALL(_idt, 75, _asm_isr75)
355 ISR_INSTALL(_idt, 76, _asm_isr76)
356 ISR_INSTALL(_idt, 77, _asm_isr77)
357 ISR_INSTALL(_idt, 78, _asm_isr78)
358 ISR_INSTALL(_idt, 79, _asm_isr79)
359 ISR_INSTALL(_idt, 80, _asm_isr80)
360 ISR_INSTALL(_idt, 81, _asm_isr81)
361 ISR_INSTALL(_idt, 82, _asm_isr82)
362 ISR_INSTALL(_idt, 83, _asm_isr83)
363 ISR_INSTALL(_idt, 84, _asm_isr84)
364 ISR_INSTALL(_idt, 85, _asm_isr85)
365 ISR_INSTALL(_idt, 86, _asm_isr86)
366 ISR_INSTALL(_idt, 87, _asm_isr87)
367 ISR_INSTALL(_idt, 88, _asm_isr88)
368 ISR_INSTALL(_idt, 89, _asm_isr89)
369 ISR_INSTALL(_idt, 90, _asm_isr90)
370 ISR_INSTALL(_idt, 91, _asm_isr91)
371 ISR_INSTALL(_idt, 92, _asm_isr92)
372 ISR_INSTALL(_idt, 93, _asm_isr93)
373 ISR_INSTALL(_idt, 94, _asm_isr94)
374 ISR_INSTALL(_idt, 95, _asm_isr95)
375 ISR_INSTALL(_idt, 96, _asm_isr96)
376 ISR_INSTALL(_idt, 97, _asm_isr97)
377 ISR_INSTALL(_idt, 98, _asm_isr98)
378 ISR_INSTALL(_idt, 99, _asm_isr99)
379 ISR_INSTALL(_idt, 100, _asm_isr100)
380 ISR_INSTALL(_idt, 101, _asm_isr101)
381 ISR_INSTALL(_idt, 102, _asm_isr102)
382 ISR_INSTALL(_idt, 103, _asm_isr103)
383 ISR_INSTALL(_idt, 104, _asm_isr104)
384 ISR_INSTALL(_idt, 105, _asm_isr105)
385 ISR_INSTALL(_idt, 106, _asm_isr106)
386 ISR_INSTALL(_idt, 107, _asm_isr107)
387 ISR_INSTALL(_idt, 108, _asm_isr108)
388 ISR_INSTALL(_idt, 109, _asm_isr109)
389 ISR_INSTALL(_idt, 110, _asm_isr110)
390 ISR_INSTALL(_idt, 111, _asm_isr111)
391 ISR_INSTALL(_idt, 112, _asm_isr112)
392 ISR_INSTALL(_idt, 113, _asm_isr113)
393 ISR_INSTALL(_idt, 114, _asm_isr114)
394 ISR_INSTALL(_idt, 115, _asm_isr115)
395 ISR_INSTALL(_idt, 116, _asm_isr116)
396 ISR_INSTALL(_idt, 117, _asm_isr117)
397 ISR_INSTALL(_idt, 118, _asm_isr118)
398 ISR_INSTALL(_idt, 119, _asm_isr119)
399 ISR_INSTALL(_idt, 120, _asm_isr120)
400 ISR_INSTALL(_idt, 121, _asm_isr121)
401 ISR_INSTALL(_idt, 122, _asm_isr122)
402 ISR_INSTALL(_idt, 123, _asm_isr123)
403 ISR_INSTALL(_idt, 124, _asm_isr124)
404 ISR_INSTALL(_idt, 125, _asm_isr125)
405 ISR_INSTALL(_idt, 126, _asm_isr126)
406 ISR_INSTALL(_idt, 127, _asm_isr127)
407 ISR_INSTALL(_idt, 128, _asm_isr128)
408 ISR_INSTALL(_idt, 129, _asm_isr129)
409 ISR_INSTALL(_idt, 130, _asm_isr130)
410 ISR_INSTALL(_idt, 131, _asm_isr131)
411 ISR_INSTALL(_idt, 132, _asm_isr132)
412 ISR_INSTALL(_idt, 133, _asm_isr133)
413 ISR_INSTALL(_idt, 134, _asm_isr134)
414 ISR_INSTALL(_idt, 135, _asm_isr135)
415 ISR_INSTALL(_idt, 136, _asm_isr136)
416 ISR_INSTALL(_idt, 137, _asm_isr137)
417 ISR_INSTALL(_idt, 138, _asm_isr138)
418 ISR_INSTALL(_idt, 139, _asm_isr139)
419 ISR_INSTALL(_idt, 140, _asm_isr140)
420 ISR_INSTALL(_idt, 141, _asm_isr141)
421 ISR_INSTALL(_idt, 142, _asm_isr142)
422 ISR_INSTALL(_idt, 143, _asm_isr143)
423 ISR_INSTALL(_idt, 144, _asm_isr144)
424 ISR_INSTALL(_idt, 145, _asm_isr145)
425 ISR_INSTALL(_idt, 146, _asm_isr146)
426 ISR_INSTALL(_idt, 147, _asm_isr147)
427 ISR_INSTALL(_idt, 148, _asm_isr148)
428 ISR_INSTALL(_idt, 149, _asm_isr149)
429 ISR_INSTALL(_idt, 150, _asm_isr150)
430 ISR_INSTALL(_idt, 151, _asm_isr151)
431 ISR_INSTALL(_idt, 152, _asm_isr152)
432 ISR_INSTALL(_idt, 153, _asm_isr153)
433 ISR_INSTALL(_idt, 154, _asm_isr154)
434 ISR_INSTALL(_idt, 155, _asm_isr155)
435 ISR_INSTALL(_idt, 156, _asm_isr156)
436 ISR_INSTALL(_idt, 157, _asm_isr157)
437 ISR_INSTALL(_idt, 158, _asm_isr158)
438 ISR_INSTALL(_idt, 159, _asm_isr159)
439 ISR_INSTALL(_idt, 160, _asm_isr160)
440 ISR_INSTALL(_idt, 161, _asm_isr161)
441 ISR_INSTALL(_idt, 162, _asm_isr162)
442 ISR_INSTALL(_idt, 163, _asm_isr163)
443 ISR_INSTALL(_idt, 164, _asm_isr164)
444 ISR_INSTALL(_idt, 165, _asm_isr165)
445 ISR_INSTALL(_idt, 166, _asm_isr166)
446 ISR_INSTALL(_idt, 167, _asm_isr167)
447 ISR_INSTALL(_idt, 168, _asm_isr168)
448 ISR_INSTALL(_idt, 169, _asm_isr169)
449 ISR_INSTALL(_idt, 170, _asm_isr170)
450 ISR_INSTALL(_idt, 171, _asm_isr171)
451 ISR_INSTALL(_idt, 172, _asm_isr172)
452 ISR_INSTALL(_idt, 173, _asm_isr173)
453 ISR_INSTALL(_idt, 174, _asm_isr174)
454 ISR_INSTALL(_idt, 175, _asm_isr175)
455 ISR_INSTALL(_idt, 176, _asm_isr176)
456 ISR_INSTALL(_idt, 177, _asm_isr177)
457 ISR_INSTALL(_idt, 178, _asm_isr178)
458 ISR_INSTALL(_idt, 179, _asm_isr179)
459 ISR_INSTALL(_idt, 180, _asm_isr180)
460 ISR_INSTALL(_idt, 181, _asm_isr181)
461 ISR_INSTALL(_idt, 182, _asm_isr182)
462 ISR_INSTALL(_idt, 183, _asm_isr183)
463 ISR_INSTALL(_idt, 184, _asm_isr184)
464 ISR_INSTALL(_idt, 185, _asm_isr185)
465 ISR_INSTALL(_idt, 186, _asm_isr186)
466 ISR_INSTALL(_idt, 187, _asm_isr187)
467 ISR_INSTALL(_idt, 188, _asm_isr188)
468 ISR_INSTALL(_idt, 189, _asm_isr189)
469 ISR_INSTALL(_idt, 190, _asm_isr190)
470 ISR_INSTALL(_idt, 191, _asm_isr191)
471 ISR_INSTALL(_idt, 192, _asm_isr192)
472 ISR_INSTALL(_idt, 193, _asm_isr193)
473 ISR_INSTALL(_idt, 194, _asm_isr194)
474 ISR_INSTALL(_idt, 195, _asm_isr195)
475 ISR_INSTALL(_idt, 196, _asm_isr196)
476 ISR_INSTALL(_idt, 197, _asm_isr197)
477 ISR_INSTALL(_idt, 198, _asm_isr198)
478 ISR_INSTALL(_idt, 199, _asm_isr199)
479 ISR_INSTALL(_idt, 200, _asm_isr200)
480 ISR_INSTALL(_idt, 201, _asm_isr201)
481 ISR_INSTALL(_idt, 202, _asm_isr202)
482 ISR_INSTALL(_idt, 203, _asm_isr203)
483 ISR_INSTALL(_idt, 204, _asm_isr204)
484 ISR_INSTALL(_idt, 205, _asm_isr205)
485 ISR_INSTALL(_idt, 206, _asm_isr206)
486 ISR_INSTALL(_idt, 207, _asm_isr207)
487 ISR_INSTALL(_idt, 208, _asm_isr208)
488 ISR_INSTALL(_idt, 209, _asm_isr209)
489 ISR_INSTALL(_idt, 210, _asm_isr210)
490 ISR_INSTALL(_idt, 211, _asm_isr211)
491 ISR_INSTALL(_idt, 212, _asm_isr212)
492 ISR_INSTALL(_idt, 213, _asm_isr213)
493 ISR_INSTALL(_idt, 214, _asm_isr214)
494 ISR_INSTALL(_idt, 215, _asm_isr215)
495 ISR_INSTALL(_idt, 216, _asm_isr216)
496 ISR_INSTALL(_idt, 217, _asm_isr217)
497 ISR_INSTALL(_idt, 218, _asm_isr218)
498 ISR_INSTALL(_idt, 219, _asm_isr219)
499 ISR_INSTALL(_idt, 220, _asm_isr220)
500 ISR_INSTALL(_idt, 221, _asm_isr221)
501 ISR_INSTALL(_idt, 222, _asm_isr222)
502 ISR_INSTALL(_idt, 223, _asm_isr223)
503 ISR_INSTALL(_idt, 224, _asm_isr224)
504 ISR_INSTALL(_idt, 225, _asm_isr225)
505 ISR_INSTALL(_idt, 226, _asm_isr226)
506 ISR_INSTALL(_idt, 227, _asm_isr227)
507 ISR_INSTALL(_idt, 228, _asm_isr228)
508 ISR_INSTALL(_idt, 229, _asm_isr229)
509 ISR_INSTALL(_idt, 230, _asm_isr230)
510 ISR_INSTALL(_idt, 231, _asm_isr231)
511 ISR_INSTALL(_idt, 232, _asm_isr232)
512 ISR_INSTALL(_idt, 233, _asm_isr233)
513 ISR_INSTALL(_idt, 234, _asm_isr234)
514 ISR_INSTALL(_idt, 235, _asm_isr235)
515 ISR_INSTALL(_idt, 236, _asm_isr236)
516 ISR_INSTALL(_idt, 237, _asm_isr237)
517 ISR_INSTALL(_idt, 238, _asm_isr238)
518 ISR_INSTALL(_idt, 239, _asm_isr239)
519 ISR_INSTALL(_idt, 240, _asm_isr240)
520 ISR_INSTALL(_idt, 241, _asm_isr241)
521 ISR_INSTALL(_idt, 242, _asm_isr242)
522 ISR_INSTALL(_idt, 243, _asm_isr243)
523 ISR_INSTALL(_idt, 244, _asm_isr244)
524 ISR_INSTALL(_idt, 245, _asm_isr245)
525 ISR_INSTALL(_idt, 246, _asm_isr246)
526 ISR_INSTALL(_idt, 247, _asm_isr247)
527 ISR_INSTALL(_idt, 248, _asm_isr248)
528 ISR_INSTALL(_idt, 249, _asm_isr249)
529 ISR_INSTALL(_idt, 250, _asm_isr250)
530 ISR_INSTALL(_idt, 251, _asm_isr251)
531 ISR_INSTALL(_idt, 252, _asm_isr252)
532 ISR_INSTALL(_idt, 253, _asm_isr253)
533 ISR_INSTALL(_idt, 254, _asm_isr254)
534 ISR_INSTALL(_idt, 255, _asm_isr255)