rk/kernel/pic8259.c
2024-05-26 01:33:18 -05:00

31 lines
788 B
C

#include <kernel/pic8259.h>
void pic_send_eoi(uint8_t irq) {
if (irq > 7)
outportb(PIC_2_COMMAND, PIC_EOI);
else
outportb(PIC_1_COMMAND, PIC_EOI);
}
void pic_remap(int pic1_start, int pic2_start) {
// Mask all IRQ lines
outportb(PIC_1_DATA, 0xff);
outportb(PIC_2_DATA, 0xff);
// Initialize master PIC
outportb(PIC_1_COMMAND, ICW4_NEEDED | INIT_BIT);
outportb(PIC_1_DATA, pic1_start);
outportb(PIC_1_DATA, PIC_1_ICW3);
outportb(PIC_1_DATA, 0x01);
// Initialize slave PIC
outportb(PIC_2_COMMAND, ICW4_NEEDED | INIT_BIT);
outportb(PIC_2_DATA, pic2_start);
outportb(PIC_2_DATA, PIC_2_ICW3);
outportb(PIC_2_DATA, 0x01);
// Unmask
outportb(PIC_1_DATA, 0b11111101);
outportb(PIC_2_DATA, 0b11111101);
}