Merge branch 'driver-core-next' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / arm / include / asm / entry-macro-multi.S
1 /*
2  * Interrupt handling.  Preserves r7, r8, r9
3  */
4         .macro  arch_irq_handler_default
5         get_irqnr_preamble r5, lr
6 1:      get_irqnr_and_base r0, r6, r5, lr
7         movne   r1, sp
8         @
9         @ routine called with r0 = irq number, r1 = struct pt_regs *
10         @
11         adrne   lr, BSYM(1b)
12         bne     asm_do_IRQ
13
14 #ifdef CONFIG_SMP
15         /*
16          * XXX
17          *
18          * this macro assumes that irqstat (r6) and base (r5) are
19          * preserved from get_irqnr_and_base above
20          */
21         ALT_SMP(test_for_ipi r0, r6, r5, lr)
22         ALT_UP_B(9997f)
23         movne   r1, sp
24         adrne   lr, BSYM(1b)
25         bne     do_IPI
26
27 #ifdef CONFIG_LOCAL_TIMERS
28         test_for_ltirq r0, r6, r5, lr
29         movne   r0, sp
30         adrne   lr, BSYM(1b)
31         bne     do_local_timer
32 #endif
33 #endif
34 9997:
35         .endm
36
37         .macro  arch_irq_handler, symbol_name
38         .align  5
39         .global \symbol_name
40 \symbol_name:
41         mov     r4, lr
42         arch_irq_handler_default
43         mov     pc, r4
44         .endm