static void end_piix4_master_irq(unsigned int irq) { unsigned long flags; spin_lock_irqsave(&cobalt_lock, flags); enable_cobalt_irq(irq); spin_unlock_irqrestore(&cobalt_lock, flags); }
static void end_piix4_master_irq(struct irq_data *data) { unsigned long flags; spin_lock_irqsave(&cobalt_lock, flags); enable_cobalt_irq(data); spin_unlock_irqrestore(&cobalt_lock, flags); }
static void end_cobalt_irq(unsigned int irq) { unsigned long flags; spin_lock_irqsave(&cobalt_lock, flags); if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) enable_cobalt_irq(irq); spin_unlock_irqrestore(&cobalt_lock, flags); }
/* * "irq" really just serves to identify the device. Here is where we * map this to the Cobalt APIC entry where it's physically wired. * This is called via request_irq -> setup_irq -> irq_desc->startup() */ static unsigned int startup_cobalt_irq(unsigned int irq) { unsigned long flags; spin_lock_irqsave(&cobalt_lock, flags); if ((irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS | IRQ_WAITING))) irq_desc[irq].status &= ~(IRQ_DISABLED | IRQ_INPROGRESS | IRQ_WAITING); enable_cobalt_irq(irq); spin_unlock_irqrestore(&cobalt_lock, flags); return 0; }
/* * This is the PIIX4-based 8259 that is wired up indirectly to Cobalt * -- not the manner expected by the code in i8259.c. * * there is a 'master' physical interrupt source that gets sent to * the CPU. But in the chipset there are various 'virtual' interrupts * waiting to be handled. We represent this to Linux through a 'master' * interrupt controller type, and through a special virtual interrupt- * controller. Device drivers only see the virtual interrupt sources. */ static unsigned int startup_piix4_master_irq(struct irq_data *data) { legacy_pic->init(0); enable_cobalt_irq(data); }