entry-macro.S 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #include <linux/irqchip/arm-gic.h>
  2. #include <mach/irqs.h>
  3. /* leave disable_fiq as an empty macro */
  4. .macro disable_fiq
  5. .endm
  6. .macro get_irqnr_preamble, base, tmp
  7. ldr \base, =GIC_CPU_BASE
  8. ldr \base, [\base]
  9. .endm
  10. .macro arch_ret_to_user, tmp1, tmp2
  11. .endm
  12. .macro get_irqnr_and_base, irqnr, irqstat, base, tmp
  13. #ifdef CONFIG_FIQ
  14. ldr \irqstat, [\base, #GIC_CPU_AIAR] /* bits 12-10 = src CPU, 9-0 = int # */
  15. #else
  16. ldr \irqstat, [\base, #GIC_CPU_INTACK] /* bits 12-10 = src CPU, 9-0 = int # */
  17. #endif
  18. ldr \tmp, =NR_IRQS
  19. bic \irqnr, \irqstat, #0x1c00
  20. /* if (irqnr >= NR_IRQS) return NO_IRQ (0) */
  21. cmp \irqnr, \tmp
  22. movcs \tmp, #0
  23. bcs BSYM(702f)
  24. /* if (irqnr >= 27) return HAVE_IRQ (1) */
  25. cmp \irqnr, #(27)
  26. movcs \tmp, #1
  27. bcs BSYM(702f)
  28. /* otherwise, return NO_IRQ (0) */
  29. mov \tmp, #0
  30. 702:
  31. cmp \tmp, #0
  32. cmpeq \irqnr, \irqnr
  33. .endm
  34. .macro test_for_ipi, irqnr, irqstat, base, tmp
  35. bic \irqnr, \irqstat, #0x1c00
  36. cmp \irqnr, #16
  37. #ifdef CONFIG_FIQ
  38. strcc \irqstat, [\base, #GIC_CPU_AEOI]
  39. #else
  40. strcc \irqstat, [\base, #GIC_CPU_EOI]
  41. #endif
  42. cmpcs \irqnr, \irqnr
  43. .endm
  44. .macro test_for_ltirq, irqnr, irqstat, base, tmp
  45. bic \irqnr, \irqstat, #0x1c00
  46. mov \tmp, #0
  47. cmp \irqnr, #29
  48. moveq \tmp, #1
  49. #ifdef CONFIG_FIQ
  50. streq \irqstat, [\base, #GIC_CPU_AEOI]
  51. #else
  52. streq \irqstat, [\base, #GIC_CPU_EOI]
  53. #endif
  54. cmp \tmp, #0
  55. .endm
  56. .macro test_for_wdtirq, irqnr, irqstat, base, tmp
  57. bic \irqnr, \irqstat, #0x1c00
  58. mov \tmp, #0
  59. cmp \irqnr, #30
  60. moveq \tmp, #1
  61. #ifdef CONFIG_FIQ
  62. streq \irqstat, [\base, #GIC_CPU_AEOI]
  63. #else
  64. streq \irqstat, [\base, #GIC_CPU_EOI]
  65. #endif
  66. cmp \tmp, #0
  67. .endm