idt.c 483 B

1234567891011121314151617
  1. #include "idt.h"
  2. #include "type.h"
  3. void set_idt_gate(int n, uint32_t handler) {
  4. idt[n].low_offset = low_16(handler);
  5. idt[n].sel = KERNEL_CS;
  6. idt[n].always0 = 0;
  7. idt[n].flags = 0x8E;
  8. idt[n].high_offset = high_16(handler);
  9. }
  10. void set_idt() {
  11. idt_reg.base = (uint32_t) &idt;
  12. idt_reg.limit = IDT_ENTRIES * sizeof(idt_gate_t) - 1;
  13. /* Don't make the mistake of loading &idt -- always load &idt_reg */
  14. asm volatile("lidtl (%0)" : : "r" (&idt_reg));
  15. }