diff options
Diffstat (limited to 'include/asm-mips/mipsmtregs.h')
-rw-r--r-- | include/asm-mips/mipsmtregs.h | 395 |
1 files changed, 0 insertions, 395 deletions
diff --git a/include/asm-mips/mipsmtregs.h b/include/asm-mips/mipsmtregs.h deleted file mode 100644 index c9420aa97e32..000000000000 --- a/include/asm-mips/mipsmtregs.h +++ /dev/null | |||
@@ -1,395 +0,0 @@ | |||
1 | /* | ||
2 | * MT regs definitions, follows on from mipsregs.h | ||
3 | * Copyright (C) 2004 - 2005 MIPS Technologies, Inc. All rights reserved. | ||
4 | * Elizabeth Clarke et. al. | ||
5 | * | ||
6 | */ | ||
7 | #ifndef _ASM_MIPSMTREGS_H | ||
8 | #define _ASM_MIPSMTREGS_H | ||
9 | |||
10 | #include <asm/mipsregs.h> | ||
11 | #include <asm/war.h> | ||
12 | |||
13 | #ifndef __ASSEMBLY__ | ||
14 | |||
15 | /* | ||
16 | * C macros | ||
17 | */ | ||
18 | |||
19 | #define read_c0_mvpcontrol() __read_32bit_c0_register($0, 1) | ||
20 | #define write_c0_mvpcontrol(val) __write_32bit_c0_register($0, 1, val) | ||
21 | |||
22 | #define read_c0_mvpconf0() __read_32bit_c0_register($0, 2) | ||
23 | #define read_c0_mvpconf1() __read_32bit_c0_register($0, 3) | ||
24 | |||
25 | #define read_c0_vpecontrol() __read_32bit_c0_register($1, 1) | ||
26 | #define write_c0_vpecontrol(val) __write_32bit_c0_register($1, 1, val) | ||
27 | |||
28 | #define read_c0_vpeconf0() __read_32bit_c0_register($1, 2) | ||
29 | #define write_c0_vpeconf0(val) __write_32bit_c0_register($1, 2, val) | ||
30 | |||
31 | #define read_c0_tcstatus() __read_32bit_c0_register($2, 1) | ||
32 | #define write_c0_tcstatus(val) __write_32bit_c0_register($2, 1, val) | ||
33 | |||
34 | #define read_c0_tcbind() __read_32bit_c0_register($2, 2) | ||
35 | |||
36 | #define read_c0_tccontext() __read_32bit_c0_register($2, 5) | ||
37 | #define write_c0_tccontext(val) __write_32bit_c0_register($2, 5, val) | ||
38 | |||
39 | #else /* Assembly */ | ||
40 | /* | ||
41 | * Macros for use in assembly language code | ||
42 | */ | ||
43 | |||
44 | #define CP0_MVPCONTROL $0, 1 | ||
45 | #define CP0_MVPCONF0 $0, 2 | ||
46 | #define CP0_MVPCONF1 $0, 3 | ||
47 | #define CP0_VPECONTROL $1, 1 | ||
48 | #define CP0_VPECONF0 $1, 2 | ||
49 | #define CP0_VPECONF1 $1, 3 | ||
50 | #define CP0_YQMASK $1, 4 | ||
51 | #define CP0_VPESCHEDULE $1, 5 | ||
52 | #define CP0_VPESCHEFBK $1, 6 | ||
53 | #define CP0_TCSTATUS $2, 1 | ||
54 | #define CP0_TCBIND $2, 2 | ||
55 | #define CP0_TCRESTART $2, 3 | ||
56 | #define CP0_TCHALT $2, 4 | ||
57 | #define CP0_TCCONTEXT $2, 5 | ||
58 | #define CP0_TCSCHEDULE $2, 6 | ||
59 | #define CP0_TCSCHEFBK $2, 7 | ||
60 | #define CP0_SRSCONF0 $6, 1 | ||
61 | #define CP0_SRSCONF1 $6, 2 | ||
62 | #define CP0_SRSCONF2 $6, 3 | ||
63 | #define CP0_SRSCONF3 $6, 4 | ||
64 | #define CP0_SRSCONF4 $6, 5 | ||
65 | |||
66 | #endif | ||
67 | |||
68 | /* MVPControl fields */ | ||
69 | #define MVPCONTROL_EVP (_ULCAST_(1)) | ||
70 | |||
71 | #define MVPCONTROL_VPC_SHIFT 1 | ||
72 | #define MVPCONTROL_VPC (_ULCAST_(1) << MVPCONTROL_VPC_SHIFT) | ||
73 | |||
74 | #define MVPCONTROL_STLB_SHIFT 2 | ||
75 | #define MVPCONTROL_STLB (_ULCAST_(1) << MVPCONTROL_STLB_SHIFT) | ||
76 | |||
77 | |||
78 | /* MVPConf0 fields */ | ||
79 | #define MVPCONF0_PTC_SHIFT 0 | ||
80 | #define MVPCONF0_PTC ( _ULCAST_(0xff)) | ||
81 | #define MVPCONF0_PVPE_SHIFT 10 | ||
82 | #define MVPCONF0_PVPE ( _ULCAST_(0xf) << MVPCONF0_PVPE_SHIFT) | ||
83 | #define MVPCONF0_TCA_SHIFT 15 | ||
84 | #define MVPCONF0_TCA ( _ULCAST_(1) << MVPCONF0_TCA_SHIFT) | ||
85 | #define MVPCONF0_PTLBE_SHIFT 16 | ||
86 | #define MVPCONF0_PTLBE (_ULCAST_(0x3ff) << MVPCONF0_PTLBE_SHIFT) | ||
87 | #define MVPCONF0_TLBS_SHIFT 29 | ||
88 | #define MVPCONF0_TLBS (_ULCAST_(1) << MVPCONF0_TLBS_SHIFT) | ||
89 | #define MVPCONF0_M_SHIFT 31 | ||
90 | #define MVPCONF0_M (_ULCAST_(0x1) << MVPCONF0_M_SHIFT) | ||
91 | |||
92 | |||
93 | /* config3 fields */ | ||
94 | #define CONFIG3_MT_SHIFT 2 | ||
95 | #define CONFIG3_MT (_ULCAST_(1) << CONFIG3_MT_SHIFT) | ||
96 | |||
97 | |||
98 | /* VPEControl fields (per VPE) */ | ||
99 | #define VPECONTROL_TARGTC (_ULCAST_(0xff)) | ||
100 | |||
101 | #define VPECONTROL_TE_SHIFT 15 | ||
102 | #define VPECONTROL_TE (_ULCAST_(1) << VPECONTROL_TE_SHIFT) | ||
103 | #define VPECONTROL_EXCPT_SHIFT 16 | ||
104 | #define VPECONTROL_EXCPT (_ULCAST_(0x7) << VPECONTROL_EXCPT_SHIFT) | ||
105 | |||
106 | /* Thread Exception Codes for EXCPT field */ | ||
107 | #define THREX_TU 0 | ||
108 | #define THREX_TO 1 | ||
109 | #define THREX_IYQ 2 | ||
110 | #define THREX_GSX 3 | ||
111 | #define THREX_YSCH 4 | ||
112 | #define THREX_GSSCH 5 | ||
113 | |||
114 | #define VPECONTROL_GSI_SHIFT 20 | ||
115 | #define VPECONTROL_GSI (_ULCAST_(1) << VPECONTROL_GSI_SHIFT) | ||
116 | #define VPECONTROL_YSI_SHIFT 21 | ||
117 | #define VPECONTROL_YSI (_ULCAST_(1) << VPECONTROL_YSI_SHIFT) | ||
118 | |||
119 | /* VPEConf0 fields (per VPE) */ | ||
120 | #define VPECONF0_VPA_SHIFT 0 | ||
121 | #define VPECONF0_VPA (_ULCAST_(1) << VPECONF0_VPA_SHIFT) | ||
122 | #define VPECONF0_MVP_SHIFT 1 | ||
123 | #define VPECONF0_MVP (_ULCAST_(1) << VPECONF0_MVP_SHIFT) | ||
124 | #define VPECONF0_XTC_SHIFT 21 | ||
125 | #define VPECONF0_XTC (_ULCAST_(0xff) << VPECONF0_XTC_SHIFT) | ||
126 | |||
127 | /* TCStatus fields (per TC) */ | ||
128 | #define TCSTATUS_TASID (_ULCAST_(0xff)) | ||
129 | #define TCSTATUS_IXMT_SHIFT 10 | ||
130 | #define TCSTATUS_IXMT (_ULCAST_(1) << TCSTATUS_IXMT_SHIFT) | ||
131 | #define TCSTATUS_TKSU_SHIFT 11 | ||
132 | #define TCSTATUS_TKSU (_ULCAST_(3) << TCSTATUS_TKSU_SHIFT) | ||
133 | #define TCSTATUS_A_SHIFT 13 | ||
134 | #define TCSTATUS_A (_ULCAST_(1) << TCSTATUS_A_SHIFT) | ||
135 | #define TCSTATUS_DA_SHIFT 15 | ||
136 | #define TCSTATUS_DA (_ULCAST_(1) << TCSTATUS_DA_SHIFT) | ||
137 | #define TCSTATUS_DT_SHIFT 20 | ||
138 | #define TCSTATUS_DT (_ULCAST_(1) << TCSTATUS_DT_SHIFT) | ||
139 | #define TCSTATUS_TDS_SHIFT 21 | ||
140 | #define TCSTATUS_TDS (_ULCAST_(1) << TCSTATUS_TDS_SHIFT) | ||
141 | #define TCSTATUS_TSST_SHIFT 22 | ||
142 | #define TCSTATUS_TSST (_ULCAST_(1) << TCSTATUS_TSST_SHIFT) | ||
143 | #define TCSTATUS_RNST_SHIFT 23 | ||
144 | #define TCSTATUS_RNST (_ULCAST_(3) << TCSTATUS_RNST_SHIFT) | ||
145 | /* Codes for RNST */ | ||
146 | #define TC_RUNNING 0 | ||
147 | #define TC_WAITING 1 | ||
148 | #define TC_YIELDING 2 | ||
149 | #define TC_GATED 3 | ||
150 | |||
151 | #define TCSTATUS_TMX_SHIFT 27 | ||
152 | #define TCSTATUS_TMX (_ULCAST_(1) << TCSTATUS_TMX_SHIFT) | ||
153 | /* TCStatus TCU bits can use same definitions/offsets as CU bits in Status */ | ||
154 | |||
155 | /* TCBind */ | ||
156 | #define TCBIND_CURVPE_SHIFT 0 | ||
157 | #define TCBIND_CURVPE (_ULCAST_(0xf)) | ||
158 | |||
159 | #define TCBIND_CURTC_SHIFT 21 | ||
160 | |||
161 | #define TCBIND_CURTC (_ULCAST_(0xff) << TCBIND_CURTC_SHIFT) | ||
162 | |||
163 | /* TCHalt */ | ||
164 | #define TCHALT_H (_ULCAST_(1)) | ||
165 | |||
166 | #ifndef __ASSEMBLY__ | ||
167 | |||
168 | static inline unsigned int dvpe(void) | ||
169 | { | ||
170 | int res = 0; | ||
171 | |||
172 | __asm__ __volatile__( | ||
173 | " .set push \n" | ||
174 | " .set noreorder \n" | ||
175 | " .set noat \n" | ||
176 | " .set mips32r2 \n" | ||
177 | " .word 0x41610001 # dvpe $1 \n" | ||
178 | " move %0, $1 \n" | ||
179 | " ehb \n" | ||
180 | " .set pop \n" | ||
181 | : "=r" (res)); | ||
182 | |||
183 | instruction_hazard(); | ||
184 | |||
185 | return res; | ||
186 | } | ||
187 | |||
188 | static inline void __raw_evpe(void) | ||
189 | { | ||
190 | __asm__ __volatile__( | ||
191 | " .set push \n" | ||
192 | " .set noreorder \n" | ||
193 | " .set noat \n" | ||
194 | " .set mips32r2 \n" | ||
195 | " .word 0x41600021 # evpe \n" | ||
196 | " ehb \n" | ||
197 | " .set pop \n"); | ||
198 | } | ||
199 | |||
200 | /* Enable virtual processor execution if previous suggested it should be. | ||
201 | EVPE_ENABLE to force */ | ||
202 | |||
203 | #define EVPE_ENABLE MVPCONTROL_EVP | ||
204 | |||
205 | static inline void evpe(int previous) | ||
206 | { | ||
207 | if ((previous & MVPCONTROL_EVP)) | ||
208 | __raw_evpe(); | ||
209 | } | ||
210 | |||
211 | static inline unsigned int dmt(void) | ||
212 | { | ||
213 | int res; | ||
214 | |||
215 | __asm__ __volatile__( | ||
216 | " .set push \n" | ||
217 | " .set mips32r2 \n" | ||
218 | " .set noat \n" | ||
219 | " .word 0x41610BC1 # dmt $1 \n" | ||
220 | " ehb \n" | ||
221 | " move %0, $1 \n" | ||
222 | " .set pop \n" | ||
223 | : "=r" (res)); | ||
224 | |||
225 | instruction_hazard(); | ||
226 | |||
227 | return res; | ||
228 | } | ||
229 | |||
230 | static inline void __raw_emt(void) | ||
231 | { | ||
232 | __asm__ __volatile__( | ||
233 | " .set noreorder \n" | ||
234 | " .set mips32r2 \n" | ||
235 | " .word 0x41600be1 # emt \n" | ||
236 | " ehb \n" | ||
237 | " .set mips0 \n" | ||
238 | " .set reorder"); | ||
239 | } | ||
240 | |||
241 | /* enable multi-threaded execution if previous suggested it should be. | ||
242 | EMT_ENABLE to force */ | ||
243 | |||
244 | #define EMT_ENABLE VPECONTROL_TE | ||
245 | |||
246 | static inline void emt(int previous) | ||
247 | { | ||
248 | if ((previous & EMT_ENABLE)) | ||
249 | __raw_emt(); | ||
250 | } | ||
251 | |||
252 | static inline void ehb(void) | ||
253 | { | ||
254 | __asm__ __volatile__( | ||
255 | " .set mips32r2 \n" | ||
256 | " ehb \n" | ||
257 | " .set mips0 \n"); | ||
258 | } | ||
259 | |||
260 | #define mftc0(rt,sel) \ | ||
261 | ({ \ | ||
262 | unsigned long __res; \ | ||
263 | \ | ||
264 | __asm__ __volatile__( \ | ||
265 | " .set push \n" \ | ||
266 | " .set mips32r2 \n" \ | ||
267 | " .set noat \n" \ | ||
268 | " # mftc0 $1, $" #rt ", " #sel " \n" \ | ||
269 | " .word 0x41000800 | (" #rt " << 16) | " #sel " \n" \ | ||
270 | " move %0, $1 \n" \ | ||
271 | " .set pop \n" \ | ||
272 | : "=r" (__res)); \ | ||
273 | \ | ||
274 | __res; \ | ||
275 | }) | ||
276 | |||
277 | #define mftgpr(rt) \ | ||
278 | ({ \ | ||
279 | unsigned long __res; \ | ||
280 | \ | ||
281 | __asm__ __volatile__( \ | ||
282 | " .set push \n" \ | ||
283 | " .set noat \n" \ | ||
284 | " .set mips32r2 \n" \ | ||
285 | " # mftgpr $1," #rt " \n" \ | ||
286 | " .word 0x41000820 | (" #rt " << 16) \n" \ | ||
287 | " move %0, $1 \n" \ | ||
288 | " .set pop \n" \ | ||
289 | : "=r" (__res)); \ | ||
290 | \ | ||
291 | __res; \ | ||
292 | }) | ||
293 | |||
294 | #define mftr(rt, u, sel) \ | ||
295 | ({ \ | ||
296 | unsigned long __res; \ | ||
297 | \ | ||
298 | __asm__ __volatile__( \ | ||
299 | " mftr %0, " #rt ", " #u ", " #sel " \n" \ | ||
300 | : "=r" (__res)); \ | ||
301 | \ | ||
302 | __res; \ | ||
303 | }) | ||
304 | |||
305 | #define mttgpr(rd,v) \ | ||
306 | do { \ | ||
307 | __asm__ __volatile__( \ | ||
308 | " .set push \n" \ | ||
309 | " .set mips32r2 \n" \ | ||
310 | " .set noat \n" \ | ||
311 | " move $1, %0 \n" \ | ||
312 | " # mttgpr $1, " #rd " \n" \ | ||
313 | " .word 0x41810020 | (" #rd " << 11) \n" \ | ||
314 | " .set pop \n" \ | ||
315 | : : "r" (v)); \ | ||
316 | } while (0) | ||
317 | |||
318 | #define mttc0(rd, sel, v) \ | ||
319 | ({ \ | ||
320 | __asm__ __volatile__( \ | ||
321 | " .set push \n" \ | ||
322 | " .set mips32r2 \n" \ | ||
323 | " .set noat \n" \ | ||
324 | " move $1, %0 \n" \ | ||
325 | " # mttc0 %0," #rd ", " #sel " \n" \ | ||
326 | " .word 0x41810000 | (" #rd " << 11) | " #sel " \n" \ | ||
327 | " .set pop \n" \ | ||
328 | : \ | ||
329 | : "r" (v)); \ | ||
330 | }) | ||
331 | |||
332 | |||
333 | #define mttr(rd, u, sel, v) \ | ||
334 | ({ \ | ||
335 | __asm__ __volatile__( \ | ||
336 | "mttr %0," #rd ", " #u ", " #sel \ | ||
337 | : : "r" (v)); \ | ||
338 | }) | ||
339 | |||
340 | |||
341 | #define settc(tc) \ | ||
342 | do { \ | ||
343 | write_c0_vpecontrol((read_c0_vpecontrol()&~VPECONTROL_TARGTC) | (tc)); \ | ||
344 | ehb(); \ | ||
345 | } while (0) | ||
346 | |||
347 | |||
348 | /* you *must* set the target tc (settc) before trying to use these */ | ||
349 | #define read_vpe_c0_vpecontrol() mftc0(1, 1) | ||
350 | #define write_vpe_c0_vpecontrol(val) mttc0(1, 1, val) | ||
351 | #define read_vpe_c0_vpeconf0() mftc0(1, 2) | ||
352 | #define write_vpe_c0_vpeconf0(val) mttc0(1, 2, val) | ||
353 | #define read_vpe_c0_count() mftc0(9, 0) | ||
354 | #define write_vpe_c0_count(val) mttc0(9, 0, val) | ||
355 | #define read_vpe_c0_status() mftc0(12, 0) | ||
356 | #define write_vpe_c0_status(val) mttc0(12, 0, val) | ||
357 | #define read_vpe_c0_cause() mftc0(13, 0) | ||
358 | #define write_vpe_c0_cause(val) mttc0(13, 0, val) | ||
359 | #define read_vpe_c0_config() mftc0(16, 0) | ||
360 | #define write_vpe_c0_config(val) mttc0(16, 0, val) | ||
361 | #define read_vpe_c0_config1() mftc0(16, 1) | ||
362 | #define write_vpe_c0_config1(val) mttc0(16, 1, val) | ||
363 | #define read_vpe_c0_config7() mftc0(16, 7) | ||
364 | #define write_vpe_c0_config7(val) mttc0(16, 7, val) | ||
365 | #define read_vpe_c0_ebase() mftc0(15, 1) | ||
366 | #define write_vpe_c0_ebase(val) mttc0(15, 1, val) | ||
367 | #define write_vpe_c0_compare(val) mttc0(11, 0, val) | ||
368 | #define read_vpe_c0_badvaddr() mftc0(8, 0) | ||
369 | #define read_vpe_c0_epc() mftc0(14, 0) | ||
370 | #define write_vpe_c0_epc(val) mttc0(14, 0, val) | ||
371 | |||
372 | |||
373 | /* TC */ | ||
374 | #define read_tc_c0_tcstatus() mftc0(2, 1) | ||
375 | #define write_tc_c0_tcstatus(val) mttc0(2, 1, val) | ||
376 | #define read_tc_c0_tcbind() mftc0(2, 2) | ||
377 | #define write_tc_c0_tcbind(val) mttc0(2, 2, val) | ||
378 | #define read_tc_c0_tcrestart() mftc0(2, 3) | ||
379 | #define write_tc_c0_tcrestart(val) mttc0(2, 3, val) | ||
380 | #define read_tc_c0_tchalt() mftc0(2, 4) | ||
381 | #define write_tc_c0_tchalt(val) mttc0(2, 4, val) | ||
382 | #define read_tc_c0_tccontext() mftc0(2, 5) | ||
383 | #define write_tc_c0_tccontext(val) mttc0(2, 5, val) | ||
384 | |||
385 | /* GPR */ | ||
386 | #define read_tc_gpr_sp() mftgpr(29) | ||
387 | #define write_tc_gpr_sp(val) mttgpr(29, val) | ||
388 | #define read_tc_gpr_gp() mftgpr(28) | ||
389 | #define write_tc_gpr_gp(val) mttgpr(28, val) | ||
390 | |||
391 | __BUILD_SET_C0(mvpcontrol) | ||
392 | |||
393 | #endif /* Not __ASSEMBLY__ */ | ||
394 | |||
395 | #endif | ||