diff options
author | Paul Mundt <lethal@linux-sh.org> | 2010-04-15 13:13:52 +0900 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2010-04-15 13:13:52 +0900 |
commit | dc825b17904a06bbd2f79d720b23156e4c01a22f (patch) | |
tree | 8f1e13b850a06264530f1f1bb680a541e73cef34 /arch/sh/include | |
parent | fecf066c2d2fbc7e6a7e7e3a5af772a165bdd7b0 (diff) | |
download | op-kernel-dev-dc825b17904a06bbd2f79d720b23156e4c01a22f.zip op-kernel-dev-dc825b17904a06bbd2f79d720b23156e4c01a22f.tar.gz |
sh: intc: IRQ auto-distribution support.
This implements support for hardware-managed IRQ balancing as implemented
by SH-X3 cores (presently only hooked up for SH7786, but can probably be
carried over to other SH-X3 cores, too).
CPUs need to specify their distribution register along with the mask
definitions, as these follow the same format. Peripheral IRQs that don't
opt out of balancing will be automatically distributed at the whim of the
hardware block, while each CPU needs to verify whether it is handling the
IRQ or not, especially before clearing the mask.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include')
-rw-r--r-- | arch/sh/include/asm/irq.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/sh/include/asm/irq.h b/arch/sh/include/asm/irq.h index df8e150..99c593b 100644 --- a/arch/sh/include/asm/irq.h +++ b/arch/sh/include/asm/irq.h @@ -12,6 +12,14 @@ #define NR_IRQS_LEGACY 8 /* Legacy external IRQ0-7 */ /* + * This is a special IRQ number for indicating that no IRQ has been + * triggered and to simply ignore the IRQ dispatch. This is a special + * case that can happen with IRQ auto-distribution when multiple CPUs + * are woken up and signalled in parallel. + */ +#define NO_IRQ_IGNORE ((unsigned int)-1) + +/* * Convert back and forth between INTEVT and IRQ values. */ #ifdef CONFIG_CPU_HAS_INTEVT @@ -53,6 +61,14 @@ extern void irq_ctx_exit(int cpu); # define irq_ctx_exit(cpu) do { } while (0) #endif +#ifdef CONFIG_INTC_BALANCING +extern unsigned int irq_lookup(unsigned int irq); +extern void irq_finish(unsigned int irq); +#else +#define irq_lookup(irq) (irq) +#define irq_finish(irq) do { } while (0) +#endif + #include <asm-generic/irq.h> #ifdef CONFIG_CPU_SH5 #include <cpu/irq.h> |