entry-macro-multi.S 825 B

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