Example #1
0
void enable_irq(unsigned int irq_nr)
{
	unsigned int n = irq_nr;
	if(n >= SGINT_END) {
		printk("whee, invalid irq_nr %d\n", irq_nr);
		panic("IRQ, you lose...");
	}
	if(n >= SGINT_LOCAL0 && n < SGINT_GIO) {
		enable_local_irq(n - SGINT_LOCAL0);
	} else if(n >= SGINT_GIO && n < SGINT_HPCDMA) {
		enable_gio_irq(n - SGINT_GIO);
	} else if(n >= SGINT_HPCDMA && n < SGINT_END) {
		enable_hpcdma_irq(n - SGINT_HPCDMA);
	} else {
		panic("how did I get here?");
	}
}
Example #2
0
void enable_local_irq(unsigned int irq_nr)
{
    unsigned long flags;
    save_and_cli(flags);
    switch(irq_nr) {
    case 0:
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
        ioc_icontrol->imask0 |= (1 << irq_nr);
        break;

    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    case 14:
    case 15:
        ioc_icontrol->imask1 |= (1 << (irq_nr - 8));
        break;

    case 16:
    case 17:
    case 18:
    case 19:
    case 20:
    case 21:
    case 22:
    case 23:
        enable_local_irq(7);
        ioc_icontrol->cmeimask0 |= (1 << (irq_nr - 16));
        break;

    default:
        printk("Yeeee, got passed irq_nr %d at disable_irq\n", irq_nr);
        panic("INVALID IRQ level!");
    };
    restore_flags(flags);
}