Merge branch 'upstream'
[linux-2.6] / include / asm-arm / arch-ep93xx / entry-macro.S
1 /*
2  * linux/include/asm-arm/arch-ep93xx/entry-macro.S
3  * IRQ demultiplexing for EP93xx
4  *
5  * Copyright (C) 2006 Lennert Buytenhek <buytenh@wantstofly.org>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or (at
10  * your option) any later version.
11  */
12 #include <asm/arch/ep93xx-regs.h>
13
14                 .macro  disable_fiq
15                 .endm
16
17                 .macro  get_irqnr_and_base, irqnr, irqstat, base, tmp
18                 ldr     \base, =(EP93XX_AHB_VIRT_BASE)
19                 orr     \base, \base, #0x000b0000
20                 mov     \irqnr, #0
21                 ldr     \irqstat, [\base]               @ lower 32 interrupts
22                 cmp     \irqstat, #0
23                 bne     1001f
24
25                 eor     \base, \base, #0x00070000
26                 ldr     \irqstat, [\base]               @ upper 32 interrupts
27                 cmp     \irqstat, #0
28                 beq     1002f
29                 mov     \irqnr, #0x20
30
31 1001:
32                 movs    \tmp, \irqstat, lsl #16
33                 movne   \irqstat, \tmp
34                 addeq   \irqnr, \irqnr, #16
35
36                 movs    \tmp, \irqstat, lsl #8
37                 movne   \irqstat, \tmp
38                 addeq   \irqnr, \irqnr, #8
39
40                 movs    \tmp, \irqstat, lsl #4
41                 movne   \irqstat, \tmp
42                 addeq   \irqnr, \irqnr, #4
43
44                 movs    \tmp, \irqstat, lsl #2
45                 movne   \irqstat, \tmp
46                 addeq   \irqnr, \irqnr, #2
47
48                 movs    \tmp, \irqstat, lsl #1
49                 addeq   \irqnr, \irqnr, #1
50                 orrs    \base, \base, #1
51
52 1002:
53                 .endm