]> nv-tegra.nvidia Code Review - linux-3.10.git/blob - arch/arm/mach-clps711x/include/mach/entry-macro.S
Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[linux-3.10.git] / arch / arm / mach-clps711x / include / mach / entry-macro.S
1 /*
2  * arch/arm/mach-clps711x/include/mach/entry-macro.S
3  *
4  * Low-level IRQ helper macros for CLPS711X-based platforms
5  *
6  * This file is licensed under  the terms of the GNU General Public
7  * License version 2. This program is licensed "as is" without any
8  * warranty of any kind, whether express or implied.
9  */
10 #include <mach/hardware.h>
11
12                 .macro  get_irqnr_preamble, base, tmp
13                 .endm
14
15 #if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
16 #error INTSR stride != INTMR stride
17 #endif
18
19                 .macro  get_irqnr_and_base, irqnr, stat, base, mask
20                 mov     \base, #CLPS711X_VIRT_BASE
21                 ldr     \stat, [\base, #INTSR1]
22                 ldr     \mask, [\base, #INTMR1]
23                 mov     \irqnr, #4
24                 mov     \mask, \mask, lsl #16
25                 and     \stat, \stat, \mask, lsr #16
26                 movs    \stat, \stat, lsr #4
27                 bne     1001f
28
29                 add     \base, \base, #INTSR2 - INTSR1
30                 ldr     \stat, [\base, #INTSR1]
31                 ldr     \mask, [\base, #INTMR1]
32                 mov     \irqnr, #16
33                 mov     \mask, \mask, lsl #16
34                 and     \stat, \stat, \mask, lsr #16
35
36 1001:           tst     \stat, #255
37                 addeq   \irqnr, \irqnr, #8
38                 moveq   \stat, \stat, lsr #8
39                 tst     \stat, #15
40                 addeq   \irqnr, \irqnr, #4
41                 moveq   \stat, \stat, lsr #4
42                 tst     \stat, #3
43                 addeq   \irqnr, \irqnr, #2
44                 moveq   \stat, \stat, lsr #2
45                 tst     \stat, #1
46                 addeq   \irqnr, \irqnr, #1
47                 moveq   \stat, \stat, lsr #1
48                 tst     \stat, #1                       @ bit 0 should be set
49                 .endm
50
51