Merge with Linux 2.4.0-test5-pre3.
[linux-2.6/linux-mips.git] / include / asm-arm / system.h
blobc7f71bb14af2b73480fff3eea72f3c98081786fd
1 #ifndef __ASM_ARM_SYSTEM_H
2 #define __ASM_ARM_SYSTEM_H
4 #include <linux/kernel.h>
6 #ifdef __KERNEL__
8 #include <linux/config.h>
10 /* information about the system we're running on */
11 extern unsigned int system_rev;
12 extern unsigned int system_serial_low;
13 extern unsigned int system_serial_high;
14 extern unsigned int mem_fclk_21285;
16 /* The type of machine we're running on */
17 extern unsigned int __machine_arch_type;
19 /* see arch/arm/kernel/arch.c for a description of these */
20 #define MACH_TYPE_EBSA110 0
21 #define MACH_TYPE_RISCPC 1
22 #define MACH_TYPE_NEXUSPCI 3
23 #define MACH_TYPE_EBSA285 4
24 #define MACH_TYPE_NETWINDER 5
25 #define MACH_TYPE_CATS 6
26 #define MACH_TYPE_TBOX 7
27 #define MACH_TYPE_CO285 8
28 #define MACH_TYPE_CLPS7110 9
29 #define MACH_TYPE_ARCHIMEDES 10
30 #define MACH_TYPE_A5K 11
31 #define MACH_TYPE_ETOILE 12
32 #define MACH_TYPE_LACIE_NAS 13
33 #define MACH_TYPE_CLPS7500 14
34 #define MACH_TYPE_SHARK 15
35 #define MACH_TYPE_BRUTUS 16
36 #define MACH_TYPE_PERSONAL_SERVER 17
37 #define MACH_TYPE_ITSY 18
38 #define MACH_TYPE_L7200 19
39 /* 20 is free - contact rmk@arm.linux.org.uk directly if you wish to use this number */
40 #define MACH_TYPE_INTEGRATOR 21
41 #define MACH_TYPE_BITSY 22
42 #define MACH_TYPE_IXP1200 23
43 #define MACH_TYPE_THINCLIENT 24
44 #define MACH_TYPE_ASSABET 25
45 #define MACH_TYPE_VICTOR 26
46 #define MACH_TYPE_LART 27
47 #define MACH_TYPE_RANGER 28
48 #define MACH_TYPE_GRAPHICSCLIENT 29
49 #define MACH_TYPE_XP860 30
52 * Sort out a definition for machine_arch_type
53 * The rules are:
54 * 1. If one architecture is selected, then all machine_is_xxx()
55 * are constant.
56 * 2. If two or more architectures are selected, then the selected
57 * machine_is_xxx() are variable, and the unselected machine_is_xxx()
58 * are constant zero.
60 * In general, you should use machine_is_xxxx() in your code, not:
61 * - switch (machine_arch_type) { }
62 * - if (machine_arch_type = xxxx)
63 * - __machine_arch_type
65 * Please note that these are kept in numeric order (ie, the same
66 * order as the list above).
68 #ifdef CONFIG_ARCH_EBSA110
69 # ifdef machine_arch_type
70 # undef machine_arch_type
71 # define machine_arch_type __machine_arch_type
72 # else
73 # define machine_arch_type MACH_TYPE_EBSA110
74 # endif
75 # define machine_is_ebsa110() (machine_arch_type == MACH_TYPE_EBSA110)
76 #else
77 # define machine_is_ebsa110() (0)
78 #endif
80 #ifdef CONFIG_ARCH_RPC
81 # ifdef machine_arch_type
82 # undef machine_arch_type
83 # define machine_arch_type __machine_arch_type
84 # else
85 # define machine_arch_type MACH_TYPE_RISCPC
86 # endif
87 # define machine_is_riscpc() (machine_arch_type == MACH_TYPE_RISCPC)
88 #else
89 # define machine_is_riscpc() (0)
90 #endif
92 #ifdef CONFIG_ARCH_EBSA285
93 # ifdef machine_arch_type
94 # undef machine_arch_type
95 # define machine_arch_type __machine_arch_type
96 # else
97 # define machine_arch_type MACH_TYPE_EBSA285
98 # endif
99 # define machine_is_ebsa285() (machine_arch_type == MACH_TYPE_EBSA285)
100 #else
101 # define machine_is_ebsa285() (0)
102 #endif
104 #ifdef CONFIG_ARCH_NETWINDER
105 # ifdef machine_arch_type
106 # undef machine_arch_type
107 # define machine_arch_type __machine_arch_type
108 # else
109 # define machine_arch_type MACH_TYPE_NETWINDER
110 # endif
111 # define machine_is_netwinder() (machine_arch_type == MACH_TYPE_NETWINDER)
112 #else
113 # define machine_is_netwinder() (0)
114 #endif
116 #ifdef CONFIG_ARCH_CATS
117 # ifdef machine_arch_type
118 # undef machine_arch_type
119 # define machine_arch_type __machine_arch_type
120 # else
121 # define machine_arch_type MACH_TYPE_CATS
122 # endif
123 # define machine_is_cats() (machine_arch_type == MACH_TYPE_CATS)
124 #else
125 # define machine_is_cats() (0)
126 #endif
128 #ifdef CONFIG_ARCH_CO285
129 # ifdef machine_arch_type
130 # undef machine_arch_type
131 # define machine_arch_type __machine_arch_type
132 # else
133 # define machine_arch_type MACH_TYPE_CO285
134 # endif
135 # define machine_is_co285() (machine_arch_type == MACH_TYPE_CO285)
136 #else
137 # define machine_is_co285() (0)
138 #endif
140 #ifdef CONFIG_ARCH_ARC
141 # ifdef machine_arch_type
142 # undef machine_arch_type
143 # define machine_arch_type __machine_arch_type
144 # else
145 # define machine_arch_type MACH_TYPE_ARCHIMEDES
146 # endif
147 # define machine_is_arc() (machine_arch_type == MACH_TYPE_ARCHIMEDES)
148 #else
149 # define machine_is_arc() (0)
150 #endif
152 #ifdef CONFIG_ARCH_A5K
153 # ifdef machine_arch_type
154 # undef machine_arch_type
155 # define machine_arch_type __machine_arch_type
156 # else
157 # define machine_arch_type MACH_TYPE_A5K
158 # endif
159 # define machine_is_a5k() (machine_arch_type == MACH_TYPE_A5K)
160 #else
161 # define machine_is_a5k() (0)
162 #endif
164 #ifdef CONFIG_ARCH_CLPS7500
165 # ifdef machine_arch_type
166 # undef machine_arch_type
167 # define machine_arch_type __machine_arch_type
168 # else
169 # define machine_arch_type MACH_TYPE_CLPS7500
170 # endif
171 # define machine_is_clps7500() (machine_arch_type == MACH_TYPE_CLPS7500)
172 #else
173 # define machine_is_clps7500() (0)
174 #endif
176 #ifdef CONFIG_ARCH_SHARK
177 # ifdef machine_arch_type
178 # undef machine_arch_type
179 # define machine_arch_type __machine_arch_type
180 # else
181 # define machine_arch_type MACH_TYPE_SHARK
182 # endif
183 # define machine_is_shark() (machine_arch_type == MACH_TYPE_SHARK)
184 #else
185 # define machine_is_shark() (0)
186 #endif
188 #ifdef CONFIG_SA1100_BRUTUS
189 # ifdef machine_arch_type
190 # undef machine_arch_type
191 # define machine_arch_type __machine_arch_type
192 # else
193 # define machine_arch_type MACH_TYPE_BRUTUS
194 # endif
195 # define machine_is_brutus() (machine_arch_type == MACH_TYPE_BRUTUS)
196 #else
197 # define machine_is_brutus() (0)
198 #endif
200 #ifdef CONFIG_ARCH_PERSONAL_SERVER
201 # ifdef machine_arch_type
202 # undef machine_arch_type
203 # define machine_arch_type __machine_arch_type
204 # else
205 # define machine_arch_type MACH_TYPE_PERSONAL_SERVER
206 # endif
207 # define machine_is_personal_server() (machine_arch_type == MACH_TYPE_PERSONAL_SERVER)
208 #else
209 # define machine_is_personal_server() (0)
210 #endif
212 #ifdef CONFIG_SA1100_ITSY
213 # ifdef machine_arch_type
214 # undef machine_arch_type
215 # define machine_arch_type __machine_arch_type
216 # else
217 # define machine_arch_type MACH_TYPE_ITSY
218 # endif
219 # define machine_is_itsy() (machine_arch_type == MACH_TYPE_ITSY)
220 #else
221 # define machine_is_itsy() (0)
222 #endif
224 #ifdef CONFIG_ARCH_L7200
225 # ifdef machine_arch_type
226 # undef machine_arch_type
227 # define machine_arch_type __machine_arch_type
228 # else
229 # define machine_arch_type MACH_TYPE_L7200
230 # endif
231 # define machine_is_l7200() (machine_arch_type == MACH_TYPE_L7200)
232 #else
233 # define machine_is_l7200() (0)
234 #endif
236 #ifdef CONFIG_SA1100_BITSY
237 # ifdef machine_arch_type
238 # undef machine_arch_type
239 # define machine_arch_type __machine_arch_type
240 # else
241 # define machine_arch_type MACH_TYPE_BITSY
242 # endif
243 # define machine_is_bitsy() (machine_arch_type == MACH_TYPE_BITSY)
244 #else
245 # define machine_is_bitsy() (0)
246 #endif
248 #ifdef CONFIG_SA1100_THINCLIENT
249 # ifdef machine_arch_type
250 # undef machine_arch_type
251 # define machine_arch_type __machine_arch_type
252 # else
253 # define machine_arch_type MACH_TYPE_THINCLIENT
254 # endif
255 # define machine_is_thinclient() (machine_arch_type == MACH_TYPE_THINCLIENT)
256 #else
257 # define machine_is_thinclient() (0)
258 #endif
260 #ifdef CONFIG_SA1100_ASSABET
261 # ifdef machine_arch_type
262 # undef machine_arch_type
263 # define machine_arch_type __machine_arch_type
264 # else
265 # define machine_arch_type MACH_TYPE_ASSABET
266 # endif
267 # define machine_is_assabet() (machine_arch_type == MACH_TYPE_ASSABET)
268 #else
269 # define machine_is_assabet() (0)
270 #endif
272 #ifdef CONFIG_SA1100_VICTOR
273 # ifdef machine_arch_type
274 # undef machine_arch_type
275 # define machine_arch_type __machine_arch_type
276 # else
277 # define machine_arch_type MACH_TYPE_VICTOR
278 # endif
279 # define machine_is_victor() (machine_arch_type == MACH_TYPE_VICTOR)
280 #else
281 # define machine_is_victor() (0)
282 #endif
284 #ifdef CONFIG_SA1100_LART
285 # ifdef machine_arch_type
286 # undef machine_arch_type
287 # define machine_arch_type __machine_arch_type
288 # else
289 # define machine_arch_type MACH_TYPE_LART
290 # endif
291 # define machine_is_lart() (machine_arch_type == MACH_TYPE_LART)
292 #else
293 # define machine_is_lart() (0)
294 #endif
296 #ifdef CONFIG_SA1100_GRAPHICSCLIENT
297 # ifdef machine_arch_type
298 # undef machine_arch_type
299 # define machine_arch_type __machine_arch_type
300 # else
301 # define machine_arch_type MACH_TYPE_GRAPHICSCLIENT
302 # endif
303 # define machine_is_grpahicsclient() \
304 (machine_arch_type == MACH_TYPE_GRAPHICSCLIENT)
305 #else
306 # define machine_is_graphicsclient() \
308 #endif
310 #ifdef CONFIG_SA1100_XP860
311 # ifdef machine_arch_type
312 # undef machine_arch_type
313 # define machine_arch_type __machine_arch_type
314 # else
315 # define machine_arch_type MACH_TYPE_XP860
316 # endif
317 # define machine_is_xp860() (machine_arch_type == MACH_TYPE_XP860)
318 #else
319 # define machine_is_xp860() (0)
320 #endif
323 * The following are currently unregistered
325 #ifdef CONFIG_SA1100_EMPEG
326 # ifdef machine_arch_type
327 # undef machine_arch_type
328 # define machine_arch_type __machine_arch_type
329 # else
330 # define machine_arch_type MACH_TYPE_EMPEG
331 # endif
332 # define machine_is_empeg() (machine_arch_type == MACH_TYPE_EMPEG)
333 #else
334 # define machine_is_empeg() (0)
335 #endif
337 #ifdef CONFIG_SA1100_TIFON
338 # ifdef machine_arch_type
339 # undef machine_arch_type
340 # define machine_arch_type __machine_arch_type
341 # else
342 # define machine_arch_type MACH_TYPE_TIFON
343 # endif
344 # define machine_is_tifon() (machine_arch_type == MACH_TYPE_TIFON)
345 #else
346 # define machine_is_tifon() (0)
347 #endif
349 #ifdef CONFIG_SA1100_PLEB
350 # ifdef machine_arch_type
351 # undef machine_arch_type
352 # define machine_arch_type __machine_arch_type
353 # else
354 # define machine_arch_type MACH_TYPE_PLEB
355 # endif
356 # define machine_is_pleb() (machine_arch_type == MACH_TYPE_PLEB)
357 #else
358 # define machine_is_pleb() (0)
359 #endif
361 #ifdef CONFIG_SA1100_PENNY
362 # ifdef machine_arch_type
363 # undef machine_arch_type
364 # define machine_arch_type __machine_arch_type
365 # else
366 # define machine_arch_type MACH_TYPE_PENNY
367 # endif
368 # define machine_is_penny() (machine_arch_type == MACH_TYPE_PENNY)
369 #else
370 # define machine_is_penny() (0)
371 #endif
373 #ifndef machine_arch_type
374 #define machine_arch_type __machine_arch_type
375 #endif
377 #include <asm/proc-fns.h>
379 #define xchg(ptr,x) \
380 ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
382 #define tas(ptr) (xchg((ptr),1))
384 extern asmlinkage void __backtrace(void);
387 * Include processor dependent parts
389 #include <asm/proc/system.h>
391 #define mb() __asm__ __volatile__ ("" : : : "memory")
392 #define rmb() mb()
393 #define wmb() mb()
394 #define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
396 #define prepare_to_switch() do { } while(0)
399 * switch_to(prev, next) should switch from task `prev' to `next'
400 * `prev' will never be the same as `next'.
401 * The `mb' is to tell GCC not to cache `current' across this call.
403 extern struct task_struct *__switch_to(struct task_struct *prev, struct task_struct *next);
405 #define switch_to(prev,next,last) \
406 do { \
407 last = __switch_to(prev,next); \
408 mb(); \
409 } while (0)
411 #endif
413 /* For spinlocks etc */
414 #define local_irq_save(x) __save_flags_cli(x)
415 #define local_irq_restore(x) __restore_flags(x)
416 #define local_irq_disable() __cli()
417 #define local_irq_enable() __sti()
419 #ifdef CONFIG_SMP
420 #error SMP not supported
421 #else
423 #define cli() __cli()
424 #define sti() __sti()
425 #define save_flags(x) __save_flags(x)
426 #define restore_flags(x) __restore_flags(x)
427 #define save_flags_cli(x) __save_flags_cli(x)
429 #endif
431 #endif