24 lines
507 B
C
24 lines
507 B
C
//
|
|
// Created by rick on 8/18/19.
|
|
//
|
|
|
|
#include <cpu/idt.h>
|
|
|
|
idt_gate_t idt[IDT_REGISTERS];
|
|
idt_register_t idt_reg;
|
|
|
|
void set_idt_gate(int n, uint32_t handler) {
|
|
idt[n].low_offset = handler & 0xffff;
|
|
idt[n].sel = KERNEL_CS;
|
|
idt[n].always0 = 0;
|
|
idt[n].flags = 0x8E;
|
|
idt[n].high_offset = handler >> 16 & 0xFFFF;
|
|
}
|
|
|
|
void set_idt() {
|
|
idt_reg.base = (uint32_t) &idt;
|
|
idt_reg.limit = IDT_REGISTERS * sizeof(idt_gate_t) - 1;
|
|
|
|
__asm__ __volatile__("lidtl (%0)" : : "r" (&idt_reg));
|
|
}
|