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