diff options
Diffstat (limited to 'arch/arm/mach-clps711x/include/mach/entry-macro.S')
| -rw-r--r-- | arch/arm/mach-clps711x/include/mach/entry-macro.S | 58 | 
1 files changed, 58 insertions, 0 deletions
diff --git a/arch/arm/mach-clps711x/include/mach/entry-macro.S b/arch/arm/mach-clps711x/include/mach/entry-macro.S new file mode 100644 index 00000000000..90fa2f70489 --- /dev/null +++ b/arch/arm/mach-clps711x/include/mach/entry-macro.S @@ -0,0 +1,58 @@ +/* + * arch/arm/mach-clps711x/include/mach/entry-macro.S + * + * Low-level IRQ helper macros for CLPS711X-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> +#include <asm/hardware/clps7111.h> + +		.macro	disable_fiq +		.endm + +		.macro	get_irqnr_preamble, base, tmp +		.endm + +		.macro	arch_ret_to_user, tmp1, tmp2 +		.endm + +#if (INTSR2 - INTSR1) != (INTMR2 - INTMR1) +#error INTSR stride != INTMR stride +#endif + +		.macro	get_irqnr_and_base, irqnr, stat, base, mask +		mov	\base, #CLPS7111_BASE +		ldr	\stat, [\base, #INTSR1] +		ldr	\mask, [\base, #INTMR1] +		mov	\irqnr, #4 +		mov	\mask, \mask, lsl #16 +		and	\stat, \stat, \mask, lsr #16 +		movs	\stat, \stat, lsr #4 +		bne	1001f + +		add	\base, \base, #INTSR2 - INTSR1 +		ldr	\stat, [\base, #INTSR1] +		ldr	\mask, [\base, #INTMR1] +		mov	\irqnr, #16 +		mov	\mask, \mask, lsl #16 +		and	\stat, \stat, \mask, lsr #16 + +1001:		tst	\stat, #255 +		addeq	\irqnr, \irqnr, #8 +		moveq	\stat, \stat, lsr #8 +		tst	\stat, #15 +		addeq	\irqnr, \irqnr, #4 +		moveq	\stat, \stat, lsr #4 +		tst	\stat, #3 +		addeq	\irqnr, \irqnr, #2 +		moveq	\stat, \stat, lsr #2 +		tst	\stat, #1 +		addeq	\irqnr, \irqnr, #1 +		moveq	\stat, \stat, lsr #1 +		tst	\stat, #1			@ bit 0 should be set +		.endm + +  |