X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Fasm-mips%2Firq.h;h=386da82e57747e4cc08b9351fe71f23e7be6a412;hb=97bf2856c6014879bd04983a3e9dfcdac1e7fe85;hp=d9667a8fbbfb8f3cd3312db283af6fae1701990c;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index d9667a8fb..386da82e5 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h @@ -9,8 +9,10 @@ #ifndef _ASM_IRQ_H #define _ASM_IRQ_H -#include #include + +#include + #include #ifdef CONFIG_I8259 @@ -22,16 +24,52 @@ static inline int irq_canonicalize(int irq) #define irq_canonicalize(irq) (irq) /* Sane hardware, sane code ... */ #endif -extern void disable_irq(unsigned int); -extern void disable_irq_nosync(unsigned int); -extern void enable_irq(unsigned int); +#ifdef CONFIG_MIPS_MT_SMTC +/* + * Clear interrupt mask handling "backstop" if irq_hwmask + * entry so indicates. This implies that the ack() or end() + * functions will take over re-enabling the low-level mask. + * Otherwise it will be done on return from exception. + */ +#define __DO_IRQ_SMTC_HOOK(irq) \ +do { \ + if (irq_hwmask[irq] & 0x0000ff00) \ + write_c0_tccontext(read_c0_tccontext() & \ + ~(irq_hwmask[irq] & 0x0000ff00)); \ +} while (0) +#else +#define __DO_IRQ_SMTC_HOOK(irq) do { } while (0) +#endif -struct pt_regs; -extern asmlinkage unsigned int do_IRQ(int irq, struct pt_regs *regs); +/* + * do_IRQ handles all normal device IRQ's (the special + * SMP cross-CPU interrupts have their own specific + * handlers). + * + * Ideally there should be away to get this into kernel/irq/handle.c to + * avoid the overhead of a call for just a tiny function ... + */ +#define do_IRQ(irq) \ +do { \ + irq_enter(); \ + __DO_IRQ_SMTC_HOOK(irq); \ + generic_handle_irq(irq); \ + irq_exit(); \ +} while (0) -extern void init_generic_irq(void); +extern void arch_init_irq(void); +extern void spurious_interrupt(void); +#ifdef CONFIG_MIPS_MT_SMTC struct irqaction; -int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); + +extern unsigned long irq_hwmask[]; +extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, + unsigned long hwmask); +#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 */