Linux v2.6.15-rc6
[pohmelfs.git] / include / asm-arm / arch-clps711x / entry-macro.S
blobb31079a1d4a92d740f36b70ddc59f8f399b1168d
1 /*
2  * include/asm-arm/arch-CLPS711x/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 <asm/hardware/clps7111.h>
12                 .macro  disable_fiq
13                 .endm
15 #if (INTSR2 - INTSR1) != (INTMR2 - INTMR1)
16 #error INTSR stride != INTMR stride
17 #endif
19                 .macro  get_irqnr_and_base, irqnr, stat, base, mask
20                 mov     \base, #CLPS7111_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
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
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