hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/boot/pic.zig
blob: 0bec4a8264e0ce6c10622c3e33f5d2bca05cd957 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// this is just a 8259 PIC thing in zig, kinda defines only the constants the
// IDT needs cause the actual remapping and masking is done in the kernel level
// which is pretty cool.EOI has to stay here cause it runs inside the ISR tho,
// so somewhere the VM cant really do much.
//
// see: https://wiki.osdev.org/8259_PIC

const port = @import("port.zig");

const MASTER_CMD: u16 = 0x20;
const SLAVE_CMD: u16 = 0xA0;
const EOI: u8 = 0x20; // end-of-interrupt command

pub const MASTER_OFFSET: u8 = 0x20; // IRQ0..7  -> vectors 0x20..0x27
pub const SLAVE_OFFSET: u8 = 0x28; // IRQ8..15 -> vectors 0x28..0x2F

// tell the PIC we're done. the slave's interrupts also need the master EOI'd
// since they arrive via the cascade.
pub fn eoi(irq: u4) void {
    if (irq >= 8) port.outb(SLAVE_CMD, EOI);
    port.outb(MASTER_CMD, EOI);
}