int irq_set_redirect(pid_t pid, irqid_t irq) { irq_holder[irq] = pid; int_set_handler(IRQ2INT(irq), irq_redirect); irq_allow(irq); return 0; }
void irq_init() { // start initialization outb(PIC1, 0x11); outb(PIC2, 0x11); // set IRQ base numbers for each PIC outb(PIC1_DATA, IRQ_BASE); outb(PIC2_DATA, IRQ_BASE+8); // use IRQ number 2 to relay IRQs from the slave PIC outb(PIC1_DATA, 0x04); outb(PIC2_DATA, 0x02); // finish initialization outb(PIC1_DATA, 0x01); outb(PIC2_DATA, 0x01); // mask all IRQs outb(PIC1_DATA, 0xff); outb(PIC2_DATA, 0xff); irq_allow(0x2c); }