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