#include <asm/assembler.h> | |
/* | |
* Interrupt handling. Preserves r7, r8, r9 | |
*/ | |
.macro arch_irq_handler_default | |
get_irqnr_preamble r6, lr | |
1: get_irqnr_and_base r0, r2, r6, lr | |
movne r1, sp | |
@ | |
@ routine called with r0 = irq number, r1 = struct pt_regs * | |
@ | |
adrne lr, BSYM(1b) | |
bne asm_do_IRQ | |
#ifdef CONFIG_SMP | |
/* | |
* XXX | |
* | |
* this macro assumes that irqstat (r2) and base (r6) are | |
* preserved from get_irqnr_and_base above | |
*/ | |
ALT_SMP(test_for_ipi r0, r2, r6, lr) | |
ALT_UP_B(9997f) | |
movne r1, sp | |
adrne lr, BSYM(1b) | |
bne do_IPI | |
#ifdef CONFIG_LOCAL_TIMERS | |
test_for_ltirq r0, r2, r6, lr | |
movne r0, sp | |
adrne lr, BSYM(1b) | |
bne do_local_timer | |
#endif | |
#endif | |
9997: | |
.endm | |
.macro arch_irq_handler, symbol_name | |
.align 5 | |
.global \symbol_name | |
\symbol_name: | |
mov r8, lr | |
arch_irq_handler_default | |
mov pc, r8 | |
.endm |