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
81:	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#endif
299997:
30	.endm
31
32	.macro	arch_irq_handler, symbol_name
33	.align	5
34	.global \symbol_name
35\symbol_name:
36	mov	r8, lr
37	arch_irq_handler_default
38	ret	r8
39	.endm
40