aboutsummaryrefslogtreecommitdiff
path: root/kernel/interrupts/idt.sats
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