Loading arch/mips/kernel/irq.c +42 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,48 @@ #include <asm/system.h> #include <asm/system.h> #include <asm/uaccess.h> #include <asm/uaccess.h> static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; int __devinit allocate_irqno(void) { int irq; again: irq = find_first_zero_bit(irq_map, NR_IRQS); if (irq >= NR_IRQS) return -ENOSPC; if (test_and_set_bit(irq, irq_map)) goto again; return irq; } EXPORT_SYMBOL_GPL(allocate_irqno); /* * Allocate the 16 legacy interrupts for i8259 devices. This happens early * in the kernel initialization so treating allocation failure as BUG() is * ok. */ void __init alloc_legacy_irqno(void) { int i; for (i = 0; i <= 16; i++) BUG_ON(test_and_set_bit(i, irq_map)); } void __devinit free_irqno(unsigned int irq) { smp_mb__before_clear_bit(); clear_bit(irq, irq_map); smp_mb__after_clear_bit(); } EXPORT_SYMBOL_GPL(free_irqno); /* /* * 'what should we do if we get a hw irq event on an illegal vector'. * 'what should we do if we get a hw irq event on an illegal vector'. * each architecture has to answer this themselves. * each architecture has to answer this themselves. Loading arch/mips/sgi-ip27/ip27-irq.c +0 −23 Original line number Original line Diff line number Diff line Loading @@ -354,29 +354,6 @@ static struct irq_chip bridge_irq_type = { .end = end_bridge_irq, .end = end_bridge_irq, }; }; static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; int allocate_irqno(void) { int irq; again: irq = find_first_zero_bit(irq_map, NR_IRQS); if (irq >= NR_IRQS) return -ENOSPC; if (test_and_set_bit(irq, irq_map)) goto again; return irq; } void free_irqno(unsigned int irq) { clear_bit(irq, irq_map); } void __devinit register_bridge_irq(unsigned int irq) void __devinit register_bridge_irq(unsigned int irq) { { irq_desc[irq].status = IRQ_DISABLED; irq_desc[irq].status = IRQ_DISABLED; Loading arch/mips/sgi-ip27/ip27-timer.c +0 −2 Original line number Original line Diff line number Diff line Loading @@ -214,8 +214,6 @@ static struct irqaction rt_irqaction = { .name = "timer" .name = "timer" }; }; extern int allocate_irqno(void); void __init plat_timer_setup(struct irqaction *irq) void __init plat_timer_setup(struct irqaction *irq) { { int irqno = allocate_irqno(); int irqno = allocate_irqno(); Loading include/asm-mips/irq.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -74,4 +74,8 @@ extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, unsigned long hwmask); unsigned long hwmask); #endif /* CONFIG_MIPS_MT_SMTC */ #endif /* CONFIG_MIPS_MT_SMTC */ extern int allocate_irqno(void); extern void alloc_legacy_irqno(void); extern void free_irqno(unsigned int irq); #endif /* _ASM_IRQ_H */ #endif /* _ASM_IRQ_H */ Loading
arch/mips/kernel/irq.c +42 −0 Original line number Original line Diff line number Diff line Loading @@ -26,6 +26,48 @@ #include <asm/system.h> #include <asm/system.h> #include <asm/uaccess.h> #include <asm/uaccess.h> static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; int __devinit allocate_irqno(void) { int irq; again: irq = find_first_zero_bit(irq_map, NR_IRQS); if (irq >= NR_IRQS) return -ENOSPC; if (test_and_set_bit(irq, irq_map)) goto again; return irq; } EXPORT_SYMBOL_GPL(allocate_irqno); /* * Allocate the 16 legacy interrupts for i8259 devices. This happens early * in the kernel initialization so treating allocation failure as BUG() is * ok. */ void __init alloc_legacy_irqno(void) { int i; for (i = 0; i <= 16; i++) BUG_ON(test_and_set_bit(i, irq_map)); } void __devinit free_irqno(unsigned int irq) { smp_mb__before_clear_bit(); clear_bit(irq, irq_map); smp_mb__after_clear_bit(); } EXPORT_SYMBOL_GPL(free_irqno); /* /* * 'what should we do if we get a hw irq event on an illegal vector'. * 'what should we do if we get a hw irq event on an illegal vector'. * each architecture has to answer this themselves. * each architecture has to answer this themselves. Loading
arch/mips/sgi-ip27/ip27-irq.c +0 −23 Original line number Original line Diff line number Diff line Loading @@ -354,29 +354,6 @@ static struct irq_chip bridge_irq_type = { .end = end_bridge_irq, .end = end_bridge_irq, }; }; static unsigned long irq_map[NR_IRQS / BITS_PER_LONG]; int allocate_irqno(void) { int irq; again: irq = find_first_zero_bit(irq_map, NR_IRQS); if (irq >= NR_IRQS) return -ENOSPC; if (test_and_set_bit(irq, irq_map)) goto again; return irq; } void free_irqno(unsigned int irq) { clear_bit(irq, irq_map); } void __devinit register_bridge_irq(unsigned int irq) void __devinit register_bridge_irq(unsigned int irq) { { irq_desc[irq].status = IRQ_DISABLED; irq_desc[irq].status = IRQ_DISABLED; Loading
arch/mips/sgi-ip27/ip27-timer.c +0 −2 Original line number Original line Diff line number Diff line Loading @@ -214,8 +214,6 @@ static struct irqaction rt_irqaction = { .name = "timer" .name = "timer" }; }; extern int allocate_irqno(void); void __init plat_timer_setup(struct irqaction *irq) void __init plat_timer_setup(struct irqaction *irq) { { int irqno = allocate_irqno(); int irqno = allocate_irqno(); Loading
include/asm-mips/irq.h +4 −0 Original line number Original line Diff line number Diff line Loading @@ -74,4 +74,8 @@ extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, unsigned long hwmask); unsigned long hwmask); #endif /* CONFIG_MIPS_MT_SMTC */ #endif /* CONFIG_MIPS_MT_SMTC */ extern int allocate_irqno(void); extern void alloc_legacy_irqno(void); extern void free_irqno(unsigned int irq); #endif /* _ASM_IRQ_H */ #endif /* _ASM_IRQ_H */