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
|
|