int disable_irq(int irq) { int pic = PIC1_MASK; if (irq > 7) pic = PIC2_MASK; int oldStatus = inportb(pic); outportb(pic, oldStatus | IRQ_MASK_BIT(irq)); return (((oldStatus & IRQ_MASK_BIT(irq)) == 0) ? 0 : 1); }
void unmask_pic(int irq) { int tmp; if(irq<8) { tmp = inportb(PIC1_MASK); tmp = tmp & ~(IRQ_MASK_BIT(irq)); outportb(PIC1_MASK, tmp); } else { tmp = inportb(PIC2_MASK); tmp = tmp & ~(IRQ_MASK_BIT(irq)); outportb(PIC2_MASK, tmp); } }
void mask_pic_var(int irq, Byte* pic1, Byte* pic2) { Byte* pic; if (irq < 8) pic = pic1; else pic = pic2; (*pic) |= IRQ_MASK_BIT(irq); }