static void mask_and_ack_mpc1211(unsigned int irq) { if(irq < 8) { if(m_irq_mask & (1<<irq)){ if(!mpc1211_irq_real(irq)){ atomic_inc(&irq_err_count) printk("spurious 8259A interrupt: IRQ %x\n",irq); } } else { m_irq_mask |= (1<<irq); } inb(I8259_M_MR); /* DUMMY */ outb(m_irq_mask,I8259_M_MR); /* disable */ outb(0x60+irq,I8259_M_CR); /* EOI */ } else { if(s_irq_mask & (1<<(irq - 8))){ if(!mpc1211_irq_real(irq)){ atomic_inc(&irq_err_count); printk("spurious 8259A interrupt: IRQ %x\n",irq); } } else { s_irq_mask |= (1<<(irq - 8)); } inb(I8259_S_MR); /* DUMMY */ outb(s_irq_mask,I8259_S_MR); /* disable */ outb(0x60+(irq-8),I8259_S_CR); /* EOI */ outb(0x60+2,I8259_M_CR); } }
static void mask_and_ack_mpc1211(unsigned int irq) { unsigned long flags; save_and_cli(flags); if(irq < 8) { if(m_irq_mask & (1<<irq)){ if(!mpc1211_irq_real(irq)){ irq_err_count++; printk("spurious 8259A interrupt: IRQ %x\n",irq); } } else { m_irq_mask |= (1<<irq); } inb(I8259_M_MR); /* DUMMY */ outb(m_irq_mask,I8259_M_MR); /* disable */ outb(0x60+irq,I8259_M_CR); /* EOI */ } else { if(s_irq_mask & (1<<(irq - 8))){ if(!mpc1211_irq_real(irq)){ irq_err_count++; printk("spurious 8259A interrupt: IRQ %x\n",irq); } } else { s_irq_mask |= (1<<(irq - 8)); } inb(I8259_S_MR); /* DUMMY */ outb(s_irq_mask,I8259_S_MR); /* disable */ outb(0x60+(irq-8),I8259_S_CR); /* EOI */ outb(0x60+2,I8259_M_CR); } restore_flags(flags); }