entry-macro-multi.S 726 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. #include <asm/assembler.h>
  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. badrne lr, 1b
  14. bne asm_do_IRQ
  15. #ifdef CONFIG_SMP
  16. /*
  17. * XXX
  18. *
  19. * this macro assumes that irqstat (r2) and base (r6) are
  20. * preserved from get_irqnr_and_base above
  21. */
  22. ALT_SMP(test_for_ipi r0, r2, r6, lr)
  23. ALT_UP_B(9997f)
  24. movne r1, sp
  25. badrne lr, 1b
  26. bne do_IPI
  27. #endif
  28. 9997:
  29. .endm
  30. .macro arch_irq_handler, symbol_name
  31. .align 5
  32. .global \symbol_name
  33. \symbol_name:
  34. mov r8, lr
  35. arch_irq_handler_default
  36. ret r8
  37. .endm