1/* 2 * arch/arm/include/asm/hardware/entry-macro-iomd.S 3 * 4 * Low-level IRQ helper macros for IOC/IOMD based platforms 5 * 6 * This file is licensed under the terms of the GNU General Public 7 * License version 2. This program is licensed "as is" without any 8 * warranty of any kind, whether express or implied. 9 */ 10 11/* IOC / IOMD based hardware */ 12#include <asm/hardware/iomd.h> 13 14 .macro get_irqnr_and_base, irqnr, irqstat, base, tmp 15 ldrb \irqstat, [\base, #IOMD_IRQREQB] @ get high priority first 16 ldr \tmp, =irq_prio_h 17 teq \irqstat, #0 18#ifdef IOMD_BASE 19 ldreqb \irqstat, [\base, #IOMD_DMAREQ] @ get dma 20 addeq \tmp, \tmp, #256 @ irq_prio_h table size 21 teqeq \irqstat, #0 22 bne 2406f 23#endif 24 ldreqb \irqstat, [\base, #IOMD_IRQREQA] @ get low priority 25 addeq \tmp, \tmp, #256 @ irq_prio_d table size 26 teqeq \irqstat, #0 27#ifdef IOMD_IRQREQC 28 ldreqb \irqstat, [\base, #IOMD_IRQREQC] 29 addeq \tmp, \tmp, #256 @ irq_prio_l table size 30 teqeq \irqstat, #0 31#endif 32#ifdef IOMD_IRQREQD 33 ldreqb \irqstat, [\base, #IOMD_IRQREQD] 34 addeq \tmp, \tmp, #256 @ irq_prio_lc table size 35 teqeq \irqstat, #0 36#endif 372406: ldrneb \irqnr, [\tmp, \irqstat] @ get IRQ number 38 .endm 39 40/* 41 * Interrupt table (incorporates priority). Please note that we 42 * rely on the order of these tables (see above code). 43 */ 44 .align 5 45irq_prio_h: .byte 0, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 46 .byte 12, 8, 9, 8,10,10,10,10,11,11,11,11,10,10,10,10 47 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 48 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 49 .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 50 .byte 14,14,14,14,10,10,10,10,11,11,11,11,10,10,10,10 51 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 52 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 53 .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 54 .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 55 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 56 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 57 .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 58 .byte 15,15,15,15,10,10,10,10,11,11,11,11,10,10,10,10 59 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 60 .byte 13,13,13,13,10,10,10,10,11,11,11,11,10,10,10,10 61#ifdef IOMD_BASE 62irq_prio_d: .byte 0,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 63 .byte 20,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 64 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 65 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 66 .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 67 .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 68 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 69 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 70 .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 71 .byte 23,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 72 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 73 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 74 .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 75 .byte 22,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 76 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 77 .byte 21,16,17,16,18,16,17,16,19,16,17,16,18,16,17,16 78#endif 79irq_prio_l: .byte 0, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 80 .byte 4, 0, 1, 0, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3 81 .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 82 .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 83 .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 84 .byte 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3 85 .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 86 .byte 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 87 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 88 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 89 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 90 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 91 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 92 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 93 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 94 .byte 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 95#ifdef IOMD_IRQREQC 96irq_prio_lc: .byte 24,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 97 .byte 28,24,25,24,26,26,26,26,27,27,27,27,27,27,27,27 98 .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 99 .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 100 .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 101 .byte 30,30,30,30,30,30,30,30,27,27,27,27,27,27,27,27 102 .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 103 .byte 29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29 104 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 105 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 106 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 107 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 108 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 109 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 110 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 111 .byte 31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31 112#endif 113#ifdef IOMD_IRQREQD 114irq_prio_ld: .byte 40,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 115 .byte 44,40,41,40,42,42,42,42,43,43,43,43,43,43,43,43 116 .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 117 .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 118 .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 119 .byte 46,46,46,46,46,46,46,46,43,43,43,43,43,43,43,43 120 .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 121 .byte 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45 122 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 123 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 124 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 125 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 126 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 127 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 128 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 129 .byte 47,47,47,47,47,47,47,47,47,47,47,47,47,47,47,47 130#endif 131 132