entry-macro-multi.S 797 B

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