#include "idt.h" #include "io.h" #include "pic.h" static void send_icw1(void) { outb(MASTER_PIC_A, ICW1); outb(SLAVE_PIC_A, ICW1); } static void send_icw2(void) { outb(MASTER_PIC_B, IDT_RESERVED_ENTRIES); outb(SLAVE_PIC_B, IDT_RESERVED_ENTRIES + 8); } static void send_icw3(void) { outb(MASTER_PIC_B, 0x4); outb(SLAVE_PIC_B, 0x2); } static void send_icw4(void) { outb(MASTER_PIC_B, 0x1); outb(SLAVE_PIC_B, 0x1); } static void mask_irqs(void) { outb(MASTER_PIC_B, 0xff); outb(SLAVE_PIC_B, 0xff); } void init_pic(void) { send_icw1(); send_icw2(); send_icw3(); send_icw4(); mask_irqs(); asm volatile("sti"); }