Exemple #1
0
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);
}