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
|
//! IDT Gate Installation
const types = @import("../types/types.zig");
const entries = @import("entries.zig");
pub fn set_gate(vector: u8, handler: u64, selector: u16, ist: u3, dpl: types.DPL, gate_type: types.GateType) void {
entries.entries[vector] = switch (gate_type) {
.interrupt => types.Gate64.interrupt(handler, selector, ist, dpl),
.trap => types.Gate64.trap(handler, selector, ist, dpl),
};
}
pub fn set_interrupt(vector: u8, handler: u64, selector: u16) void {
set_gate(vector, handler, selector, 0, .ring0, .interrupt);
}
pub fn set_trap(vector: u8, handler: u64, selector: u16) void {
set_gate(vector, handler, selector, 0, .ring0, .trap);
}
pub fn set_interrupt_ist(vector: u8, handler: u64, selector: u16, ist: u3) void {
set_gate(vector, handler, selector, ist, .ring0, .interrupt);
}
pub fn clear_gate(vector: u8) void {
entries.entries[vector] = types.Gate64.empty();
}
|