Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
interrupts_64.h
Go to the documentation of this file.
1 /*
2  * Copyright 2011 Tilera Corporation. All Rights Reserved.
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation, version 2.
7  *
8  * This program is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
11  * NON INFRINGEMENT. See the GNU General Public License for
12  * more details.
13  */
14 
15 #ifndef __ARCH_INTERRUPTS_H__
16 #define __ARCH_INTERRUPTS_H__
17 
19 #ifdef __ASSEMBLER__
20 /* Note: must handle breaking interrupts into high and low words manually. */
21 #define INT_MASK(intno) (1 << (intno))
22 #else
23 #define INT_MASK(intno) (1ULL << (intno))
24 #endif
25 
26 
28 #define INTERRUPT_VECTOR(i, pl) (0xFC000000 + ((pl) << 24) + ((i) << 8))
29 
31 #define USER_INTERRUPT_VECTOR(i) INTERRUPT_VECTOR(i, 0)
32 
34 #define USER_INTERRUPT_VECTOR_BASE INTERRUPT_VECTOR(0, 0)
35 
36 
38 #define INT_BREAKPOINT (63)
39 
40 #define INT_MEM_ERROR 0
41 #define INT_SINGLE_STEP_3 1
42 #define INT_SINGLE_STEP_2 2
43 #define INT_SINGLE_STEP_1 3
44 #define INT_SINGLE_STEP_0 4
45 #define INT_IDN_COMPLETE 5
46 #define INT_UDN_COMPLETE 6
47 #define INT_ITLB_MISS 7
48 #define INT_ILL 8
49 #define INT_GPV 9
50 #define INT_IDN_ACCESS 10
51 #define INT_UDN_ACCESS 11
52 #define INT_SWINT_3 12
53 #define INT_SWINT_2 13
54 #define INT_SWINT_1 14
55 #define INT_SWINT_0 15
56 #define INT_ILL_TRANS 16
57 #define INT_UNALIGN_DATA 17
58 #define INT_DTLB_MISS 18
59 #define INT_DTLB_ACCESS 19
60 #define INT_IDN_FIREWALL 20
61 #define INT_UDN_FIREWALL 21
62 #define INT_TILE_TIMER 22
63 #define INT_AUX_TILE_TIMER 23
64 #define INT_IDN_TIMER 24
65 #define INT_UDN_TIMER 25
66 #define INT_IDN_AVAIL 26
67 #define INT_UDN_AVAIL 27
68 #define INT_IPI_3 28
69 #define INT_IPI_2 29
70 #define INT_IPI_1 30
71 #define INT_IPI_0 31
72 #define INT_PERF_COUNT 32
73 #define INT_AUX_PERF_COUNT 33
74 #define INT_INTCTRL_3 34
75 #define INT_INTCTRL_2 35
76 #define INT_INTCTRL_1 36
77 #define INT_INTCTRL_0 37
78 #define INT_BOOT_ACCESS 38
79 #define INT_WORLD_ACCESS 39
80 #define INT_I_ASID 40
81 #define INT_D_ASID 41
82 #define INT_DOUBLE_FAULT 42
83 
84 #define NUM_INTERRUPTS 43
85 
86 #ifndef __ASSEMBLER__
87 #define QUEUED_INTERRUPTS ( \
88  INT_MASK(INT_MEM_ERROR) | \
89  INT_MASK(INT_IDN_COMPLETE) | \
90  INT_MASK(INT_UDN_COMPLETE) | \
91  INT_MASK(INT_IDN_FIREWALL) | \
92  INT_MASK(INT_UDN_FIREWALL) | \
93  INT_MASK(INT_TILE_TIMER) | \
94  INT_MASK(INT_AUX_TILE_TIMER) | \
95  INT_MASK(INT_IDN_TIMER) | \
96  INT_MASK(INT_UDN_TIMER) | \
97  INT_MASK(INT_IDN_AVAIL) | \
98  INT_MASK(INT_UDN_AVAIL) | \
99  INT_MASK(INT_IPI_3) | \
100  INT_MASK(INT_IPI_2) | \
101  INT_MASK(INT_IPI_1) | \
102  INT_MASK(INT_IPI_0) | \
103  INT_MASK(INT_PERF_COUNT) | \
104  INT_MASK(INT_AUX_PERF_COUNT) | \
105  INT_MASK(INT_INTCTRL_3) | \
106  INT_MASK(INT_INTCTRL_2) | \
107  INT_MASK(INT_INTCTRL_1) | \
108  INT_MASK(INT_INTCTRL_0) | \
109  INT_MASK(INT_BOOT_ACCESS) | \
110  INT_MASK(INT_WORLD_ACCESS) | \
111  INT_MASK(INT_I_ASID) | \
112  INT_MASK(INT_D_ASID) | \
113  INT_MASK(INT_DOUBLE_FAULT) | \
114  0)
115 #define NONQUEUED_INTERRUPTS ( \
116  INT_MASK(INT_SINGLE_STEP_3) | \
117  INT_MASK(INT_SINGLE_STEP_2) | \
118  INT_MASK(INT_SINGLE_STEP_1) | \
119  INT_MASK(INT_SINGLE_STEP_0) | \
120  INT_MASK(INT_ITLB_MISS) | \
121  INT_MASK(INT_ILL) | \
122  INT_MASK(INT_GPV) | \
123  INT_MASK(INT_IDN_ACCESS) | \
124  INT_MASK(INT_UDN_ACCESS) | \
125  INT_MASK(INT_SWINT_3) | \
126  INT_MASK(INT_SWINT_2) | \
127  INT_MASK(INT_SWINT_1) | \
128  INT_MASK(INT_SWINT_0) | \
129  INT_MASK(INT_ILL_TRANS) | \
130  INT_MASK(INT_UNALIGN_DATA) | \
131  INT_MASK(INT_DTLB_MISS) | \
132  INT_MASK(INT_DTLB_ACCESS) | \
133  0)
134 #define CRITICAL_MASKED_INTERRUPTS ( \
135  INT_MASK(INT_MEM_ERROR) | \
136  INT_MASK(INT_SINGLE_STEP_3) | \
137  INT_MASK(INT_SINGLE_STEP_2) | \
138  INT_MASK(INT_SINGLE_STEP_1) | \
139  INT_MASK(INT_SINGLE_STEP_0) | \
140  INT_MASK(INT_IDN_COMPLETE) | \
141  INT_MASK(INT_UDN_COMPLETE) | \
142  INT_MASK(INT_IDN_FIREWALL) | \
143  INT_MASK(INT_UDN_FIREWALL) | \
144  INT_MASK(INT_TILE_TIMER) | \
145  INT_MASK(INT_AUX_TILE_TIMER) | \
146  INT_MASK(INT_IDN_TIMER) | \
147  INT_MASK(INT_UDN_TIMER) | \
148  INT_MASK(INT_IDN_AVAIL) | \
149  INT_MASK(INT_UDN_AVAIL) | \
150  INT_MASK(INT_IPI_3) | \
151  INT_MASK(INT_IPI_2) | \
152  INT_MASK(INT_IPI_1) | \
153  INT_MASK(INT_IPI_0) | \
154  INT_MASK(INT_PERF_COUNT) | \
155  INT_MASK(INT_AUX_PERF_COUNT) | \
156  INT_MASK(INT_INTCTRL_3) | \
157  INT_MASK(INT_INTCTRL_2) | \
158  INT_MASK(INT_INTCTRL_1) | \
159  INT_MASK(INT_INTCTRL_0) | \
160  0)
161 #define CRITICAL_UNMASKED_INTERRUPTS ( \
162  INT_MASK(INT_ITLB_MISS) | \
163  INT_MASK(INT_ILL) | \
164  INT_MASK(INT_GPV) | \
165  INT_MASK(INT_IDN_ACCESS) | \
166  INT_MASK(INT_UDN_ACCESS) | \
167  INT_MASK(INT_SWINT_3) | \
168  INT_MASK(INT_SWINT_2) | \
169  INT_MASK(INT_SWINT_1) | \
170  INT_MASK(INT_SWINT_0) | \
171  INT_MASK(INT_ILL_TRANS) | \
172  INT_MASK(INT_UNALIGN_DATA) | \
173  INT_MASK(INT_DTLB_MISS) | \
174  INT_MASK(INT_DTLB_ACCESS) | \
175  INT_MASK(INT_BOOT_ACCESS) | \
176  INT_MASK(INT_WORLD_ACCESS) | \
177  INT_MASK(INT_I_ASID) | \
178  INT_MASK(INT_D_ASID) | \
179  INT_MASK(INT_DOUBLE_FAULT) | \
180  0)
181 #define MASKABLE_INTERRUPTS ( \
182  INT_MASK(INT_MEM_ERROR) | \
183  INT_MASK(INT_SINGLE_STEP_3) | \
184  INT_MASK(INT_SINGLE_STEP_2) | \
185  INT_MASK(INT_SINGLE_STEP_1) | \
186  INT_MASK(INT_SINGLE_STEP_0) | \
187  INT_MASK(INT_IDN_COMPLETE) | \
188  INT_MASK(INT_UDN_COMPLETE) | \
189  INT_MASK(INT_IDN_FIREWALL) | \
190  INT_MASK(INT_UDN_FIREWALL) | \
191  INT_MASK(INT_TILE_TIMER) | \
192  INT_MASK(INT_AUX_TILE_TIMER) | \
193  INT_MASK(INT_IDN_TIMER) | \
194  INT_MASK(INT_UDN_TIMER) | \
195  INT_MASK(INT_IDN_AVAIL) | \
196  INT_MASK(INT_UDN_AVAIL) | \
197  INT_MASK(INT_IPI_3) | \
198  INT_MASK(INT_IPI_2) | \
199  INT_MASK(INT_IPI_1) | \
200  INT_MASK(INT_IPI_0) | \
201  INT_MASK(INT_PERF_COUNT) | \
202  INT_MASK(INT_AUX_PERF_COUNT) | \
203  INT_MASK(INT_INTCTRL_3) | \
204  INT_MASK(INT_INTCTRL_2) | \
205  INT_MASK(INT_INTCTRL_1) | \
206  INT_MASK(INT_INTCTRL_0) | \
207  0)
208 #define UNMASKABLE_INTERRUPTS ( \
209  INT_MASK(INT_ITLB_MISS) | \
210  INT_MASK(INT_ILL) | \
211  INT_MASK(INT_GPV) | \
212  INT_MASK(INT_IDN_ACCESS) | \
213  INT_MASK(INT_UDN_ACCESS) | \
214  INT_MASK(INT_SWINT_3) | \
215  INT_MASK(INT_SWINT_2) | \
216  INT_MASK(INT_SWINT_1) | \
217  INT_MASK(INT_SWINT_0) | \
218  INT_MASK(INT_ILL_TRANS) | \
219  INT_MASK(INT_UNALIGN_DATA) | \
220  INT_MASK(INT_DTLB_MISS) | \
221  INT_MASK(INT_DTLB_ACCESS) | \
222  INT_MASK(INT_BOOT_ACCESS) | \
223  INT_MASK(INT_WORLD_ACCESS) | \
224  INT_MASK(INT_I_ASID) | \
225  INT_MASK(INT_D_ASID) | \
226  INT_MASK(INT_DOUBLE_FAULT) | \
227  0)
228 #define SYNC_INTERRUPTS ( \
229  INT_MASK(INT_SINGLE_STEP_3) | \
230  INT_MASK(INT_SINGLE_STEP_2) | \
231  INT_MASK(INT_SINGLE_STEP_1) | \
232  INT_MASK(INT_SINGLE_STEP_0) | \
233  INT_MASK(INT_IDN_COMPLETE) | \
234  INT_MASK(INT_UDN_COMPLETE) | \
235  INT_MASK(INT_ITLB_MISS) | \
236  INT_MASK(INT_ILL) | \
237  INT_MASK(INT_GPV) | \
238  INT_MASK(INT_IDN_ACCESS) | \
239  INT_MASK(INT_UDN_ACCESS) | \
240  INT_MASK(INT_SWINT_3) | \
241  INT_MASK(INT_SWINT_2) | \
242  INT_MASK(INT_SWINT_1) | \
243  INT_MASK(INT_SWINT_0) | \
244  INT_MASK(INT_ILL_TRANS) | \
245  INT_MASK(INT_UNALIGN_DATA) | \
246  INT_MASK(INT_DTLB_MISS) | \
247  INT_MASK(INT_DTLB_ACCESS) | \
248  0)
249 #define NON_SYNC_INTERRUPTS ( \
250  INT_MASK(INT_MEM_ERROR) | \
251  INT_MASK(INT_IDN_FIREWALL) | \
252  INT_MASK(INT_UDN_FIREWALL) | \
253  INT_MASK(INT_TILE_TIMER) | \
254  INT_MASK(INT_AUX_TILE_TIMER) | \
255  INT_MASK(INT_IDN_TIMER) | \
256  INT_MASK(INT_UDN_TIMER) | \
257  INT_MASK(INT_IDN_AVAIL) | \
258  INT_MASK(INT_UDN_AVAIL) | \
259  INT_MASK(INT_IPI_3) | \
260  INT_MASK(INT_IPI_2) | \
261  INT_MASK(INT_IPI_1) | \
262  INT_MASK(INT_IPI_0) | \
263  INT_MASK(INT_PERF_COUNT) | \
264  INT_MASK(INT_AUX_PERF_COUNT) | \
265  INT_MASK(INT_INTCTRL_3) | \
266  INT_MASK(INT_INTCTRL_2) | \
267  INT_MASK(INT_INTCTRL_1) | \
268  INT_MASK(INT_INTCTRL_0) | \
269  INT_MASK(INT_BOOT_ACCESS) | \
270  INT_MASK(INT_WORLD_ACCESS) | \
271  INT_MASK(INT_I_ASID) | \
272  INT_MASK(INT_D_ASID) | \
273  INT_MASK(INT_DOUBLE_FAULT) | \
274  0)
275 #endif /* !__ASSEMBLER__ */
276 #endif /* !__ARCH_INTERRUPTS_H__ */