diff options
Diffstat (limited to 'include/asm-mips/irq.h')
| -rw-r--r-- | include/asm-mips/irq.h | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/include/asm-mips/irq.h b/include/asm-mips/irq.h index 8a342ccb34a8..dde677f02bc0 100644 --- a/include/asm-mips/irq.h +++ b/include/asm-mips/irq.h | |||
| @@ -11,6 +11,9 @@ | |||
| 11 | 11 | ||
| 12 | #include <linux/config.h> | 12 | #include <linux/config.h> |
| 13 | #include <linux/linkage.h> | 13 | #include <linux/linkage.h> |
| 14 | |||
| 15 | #include <asm/mipsmtregs.h> | ||
| 16 | |||
| 14 | #include <irq.h> | 17 | #include <irq.h> |
| 15 | 18 | ||
| 16 | #ifdef CONFIG_I8259 | 19 | #ifdef CONFIG_I8259 |
| @@ -26,6 +29,23 @@ struct pt_regs; | |||
| 26 | 29 | ||
| 27 | extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); | 30 | extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); |
| 28 | 31 | ||
| 32 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 33 | /* | ||
| 34 | * Clear interrupt mask handling "backstop" if irq_hwmask | ||
| 35 | * entry so indicates. This implies that the ack() or end() | ||
| 36 | * functions will take over re-enabling the low-level mask. | ||
| 37 | * Otherwise it will be done on return from exception. | ||
| 38 | */ | ||
| 39 | #define __DO_IRQ_SMTC_HOOK() \ | ||
| 40 | do { \ | ||
| 41 | if (irq_hwmask[irq] & 0x0000ff00) \ | ||
| 42 | write_c0_tccontext(read_c0_tccontext() & \ | ||
| 43 | ~(irq_hwmask[irq] & 0x0000ff00)); \ | ||
| 44 | } while (0) | ||
| 45 | #else | ||
| 46 | #define __DO_IRQ_SMTC_HOOK() do { } while (0) | ||
| 47 | #endif | ||
| 48 | |||
| 29 | #ifdef CONFIG_PREEMPT | 49 | #ifdef CONFIG_PREEMPT |
| 30 | 50 | ||
| 31 | /* | 51 | /* |
| @@ -39,6 +59,7 @@ extern asmlinkage unsigned int do_IRQ(unsigned int irq, struct pt_regs *regs); | |||
| 39 | #define do_IRQ(irq, regs) \ | 59 | #define do_IRQ(irq, regs) \ |
| 40 | do { \ | 60 | do { \ |
| 41 | irq_enter(); \ | 61 | irq_enter(); \ |
| 62 | __DO_IRQ_SMTC_HOOK(); \ | ||
| 42 | __do_IRQ((irq), (regs)); \ | 63 | __do_IRQ((irq), (regs)); \ |
| 43 | irq_exit(); \ | 64 | irq_exit(); \ |
| 44 | } while (0) | 65 | } while (0) |
| @@ -46,5 +67,14 @@ do { \ | |||
| 46 | #endif | 67 | #endif |
| 47 | 68 | ||
| 48 | extern void arch_init_irq(void); | 69 | extern void arch_init_irq(void); |
| 70 | extern void spurious_interrupt(struct pt_regs *regs); | ||
| 71 | |||
| 72 | #ifdef CONFIG_MIPS_MT_SMTC | ||
| 73 | struct irqaction; | ||
| 74 | |||
| 75 | extern unsigned long irq_hwmask[]; | ||
| 76 | extern int setup_irq_smtc(unsigned int irq, struct irqaction * new, | ||
| 77 | unsigned long hwmask); | ||
| 78 | #endif /* CONFIG_MIPS_MT_SMTC */ | ||
| 49 | 79 | ||
| 50 | #endif /* _ASM_IRQ_H */ | 80 | #endif /* _ASM_IRQ_H */ |
