blob: d8391aa9309dbbbcc19994931e667fcb72184dba (
plain)
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
|
#define
TRAP_GATE_FLAGS 0x8F // p=1, dpl=0b00, type=0b1111
typedef idt_entry_t = @{
isr_low = uint16, // The lower 16 bits of the ISR's address
kernel_cs = uint16, // The GDT segment selector that the CPU will load into CS before calling the ISR
ist = uint8, // The IST in the TSS that the CPU will load into RSP; set to zero for now
attributes = uint8, // Type and attributes; see the IDT page
isr_mid = uint16, // The higher 16 bits of the lower 32 bits of the ISR's address
isr_high = uint32, // The higher 32 bits of the ISR's address
reserved = uint32 // Set to zero
}
typedef idtr_t = @{
limit = uint16,
base = uint64
}
// Interrupt frame to pass to ISR
typedef int_frame = @{
ip = uint64, // instruction pointer
cs = uint64, // code segment
rflags = uint64,
sp = uint64, // stack pointer
ss = uint64 // stack segment
}
fun idt_init() : void
|