diff options
Diffstat (limited to 'kernel/arch/arm/mach-ixp4xx/include/mach/entry-macro.S')
-rw-r--r-- | kernel/arch/arm/mach-ixp4xx/include/mach/entry-macro.S | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/kernel/arch/arm/mach-ixp4xx/include/mach/entry-macro.S b/kernel/arch/arm/mach-ixp4xx/include/mach/entry-macro.S new file mode 100644 index 000000000..79adf83e2 --- /dev/null +++ b/kernel/arch/arm/mach-ixp4xx/include/mach/entry-macro.S @@ -0,0 +1,41 @@ +/* + * arch/arm/mach-ixp4xx/include/mach/entry-macro.S + * + * Low-level IRQ helper macros for IXP4xx-based platforms + * + * This file is licensed under the terms of the GNU General Public + * License version 2. This program is licensed "as is" without any + * warranty of any kind, whether express or implied. + */ +#include <mach/hardware.h> + + .macro get_irqnr_preamble, base, tmp + .endm + + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP_OFFSET) + ldr \irqstat, [\irqstat] @ get interrupts + cmp \irqstat, #0 + beq 1001f @ upper IRQ? + clz \irqnr, \irqstat + mov \base, #31 + sub \irqnr, \base, \irqnr + b 1002f @ lower IRQ being + @ handled + +1001: + /* + * IXP465/IXP435 has an upper IRQ status register + */ +#if defined(CONFIG_CPU_IXP46X) || defined(CONFIG_CPU_IXP43X) + ldr \irqstat, =(IXP4XX_INTC_BASE_VIRT+IXP4XX_ICIP2_OFFSET) + ldr \irqstat, [\irqstat] @ get upper interrupts + mov \irqnr, #63 + clz \irqstat, \irqstat + cmp \irqstat, #32 + subne \irqnr, \irqnr, \irqstat +#endif +1002: + .endm + + |