1 #ifndef __ASM_ARM_SYSTEM_H
2 #define __ASM_ARM_SYSTEM_H
4 #include <linux/kernel.h>
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
54 * 1. If one architecture is selected, then all machine_is_xxx()
56 * 2. If two or more architectures are selected, then the selected
57 * machine_is_xxx() are variable, and the unselected machine_is_xxx()
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
73 # define machine_arch_type MACH_TYPE_EBSA110
75 # define machine_is_ebsa110() (machine_arch_type == MACH_TYPE_EBSA110)
77 # define machine_is_ebsa110() (0)
80 #ifdef CONFIG_ARCH_RPC
81 # ifdef machine_arch_type
82 # undef machine_arch_type
83 # define machine_arch_type __machine_arch_type
85 # define machine_arch_type MACH_TYPE_RISCPC
87 # define machine_is_riscpc() (machine_arch_type == MACH_TYPE_RISCPC)
89 # define machine_is_riscpc() (0)
92 #ifdef CONFIG_ARCH_EBSA285
93 # ifdef machine_arch_type
94 # undef machine_arch_type
95 # define machine_arch_type __machine_arch_type
97 # define machine_arch_type MACH_TYPE_EBSA285
99 # define machine_is_ebsa285() (machine_arch_type == MACH_TYPE_EBSA285)
101 # define machine_is_ebsa285() (0)
104 #ifdef CONFIG_ARCH_NETWINDER
105 # ifdef machine_arch_type
106 # undef machine_arch_type
107 # define machine_arch_type __machine_arch_type
109 # define machine_arch_type MACH_TYPE_NETWINDER
111 # define machine_is_netwinder() (machine_arch_type == MACH_TYPE_NETWINDER)
113 # define machine_is_netwinder() (0)
116 #ifdef CONFIG_ARCH_CATS
117 # ifdef machine_arch_type
118 # undef machine_arch_type
119 # define machine_arch_type __machine_arch_type
121 # define machine_arch_type MACH_TYPE_CATS
123 # define machine_is_cats() (machine_arch_type == MACH_TYPE_CATS)
125 # define machine_is_cats() (0)
128 #ifdef CONFIG_ARCH_CO285
129 # ifdef machine_arch_type
130 # undef machine_arch_type
131 # define machine_arch_type __machine_arch_type
133 # define machine_arch_type MACH_TYPE_CO285
135 # define machine_is_co285() (machine_arch_type == MACH_TYPE_CO285)
137 # define machine_is_co285() (0)
140 #ifdef CONFIG_ARCH_ARC
141 # ifdef machine_arch_type
142 # undef machine_arch_type
143 # define machine_arch_type __machine_arch_type
145 # define machine_arch_type MACH_TYPE_ARCHIMEDES
147 # define machine_is_arc() (machine_arch_type == MACH_TYPE_ARCHIMEDES)
149 # define machine_is_arc() (0)
152 #ifdef CONFIG_ARCH_A5K
153 # ifdef machine_arch_type
154 # undef machine_arch_type
155 # define machine_arch_type __machine_arch_type
157 # define machine_arch_type MACH_TYPE_A5K
159 # define machine_is_a5k() (machine_arch_type == MACH_TYPE_A5K)
161 # define machine_is_a5k() (0)
164 #ifdef CONFIG_ARCH_CLPS7500
165 # ifdef machine_arch_type
166 # undef machine_arch_type
167 # define machine_arch_type __machine_arch_type
169 # define machine_arch_type MACH_TYPE_CLPS7500
171 # define machine_is_clps7500() (machine_arch_type == MACH_TYPE_CLPS7500)
173 # define machine_is_clps7500() (0)
176 #ifdef CONFIG_ARCH_SHARK
177 # ifdef machine_arch_type
178 # undef machine_arch_type
179 # define machine_arch_type __machine_arch_type
181 # define machine_arch_type MACH_TYPE_SHARK
183 # define machine_is_shark() (machine_arch_type == MACH_TYPE_SHARK)
185 # define machine_is_shark() (0)
188 #ifdef CONFIG_SA1100_BRUTUS
189 # ifdef machine_arch_type
190 # undef machine_arch_type
191 # define machine_arch_type __machine_arch_type
193 # define machine_arch_type MACH_TYPE_BRUTUS
195 # define machine_is_brutus() (machine_arch_type == MACH_TYPE_BRUTUS)
197 # define machine_is_brutus() (0)
200 #ifdef CONFIG_ARCH_PERSONAL_SERVER
201 # ifdef machine_arch_type
202 # undef machine_arch_type
203 # define machine_arch_type __machine_arch_type
205 # define machine_arch_type MACH_TYPE_PERSONAL_SERVER
207 # define machine_is_personal_server() (machine_arch_type == MACH_TYPE_PERSONAL_SERVER)
209 # define machine_is_personal_server() (0)
212 #ifdef CONFIG_SA1100_ITSY
213 # ifdef machine_arch_type
214 # undef machine_arch_type
215 # define machine_arch_type __machine_arch_type
217 # define machine_arch_type MACH_TYPE_ITSY
219 # define machine_is_itsy() (machine_arch_type == MACH_TYPE_ITSY)
221 # define machine_is_itsy() (0)
224 #ifdef CONFIG_ARCH_L7200
225 # ifdef machine_arch_type
226 # undef machine_arch_type
227 # define machine_arch_type __machine_arch_type
229 # define machine_arch_type MACH_TYPE_L7200
231 # define machine_is_l7200() (machine_arch_type == MACH_TYPE_L7200)
233 # define machine_is_l7200() (0)
236 #ifdef CONFIG_SA1100_BITSY
237 # ifdef machine_arch_type
238 # undef machine_arch_type
239 # define machine_arch_type __machine_arch_type
241 # define machine_arch_type MACH_TYPE_BITSY
243 # define machine_is_bitsy() (machine_arch_type == MACH_TYPE_BITSY)
245 # define machine_is_bitsy() (0)
248 #ifdef CONFIG_SA1100_THINCLIENT
249 # ifdef machine_arch_type
250 # undef machine_arch_type
251 # define machine_arch_type __machine_arch_type
253 # define machine_arch_type MACH_TYPE_THINCLIENT
255 # define machine_is_thinclient() (machine_arch_type == MACH_TYPE_THINCLIENT)
257 # define machine_is_thinclient() (0)
260 #ifdef CONFIG_SA1100_ASSABET
261 # ifdef machine_arch_type
262 # undef machine_arch_type
263 # define machine_arch_type __machine_arch_type
265 # define machine_arch_type MACH_TYPE_ASSABET
267 # define machine_is_assabet() (machine_arch_type == MACH_TYPE_ASSABET)
269 # define machine_is_assabet() (0)
272 #ifdef CONFIG_SA1100_VICTOR
273 # ifdef machine_arch_type
274 # undef machine_arch_type
275 # define machine_arch_type __machine_arch_type
277 # define machine_arch_type MACH_TYPE_VICTOR
279 # define machine_is_victor() (machine_arch_type == MACH_TYPE_VICTOR)
281 # define machine_is_victor() (0)
284 #ifdef CONFIG_SA1100_LART
285 # ifdef machine_arch_type
286 # undef machine_arch_type
287 # define machine_arch_type __machine_arch_type
289 # define machine_arch_type MACH_TYPE_LART
291 # define machine_is_lart() (machine_arch_type == MACH_TYPE_LART)
293 # define machine_is_lart() (0)
296 #ifdef CONFIG_SA1100_GRAPHICSCLIENT
297 # ifdef machine_arch_type
298 # undef machine_arch_type
299 # define machine_arch_type __machine_arch_type
301 # define machine_arch_type MACH_TYPE_GRAPHICSCLIENT
303 # define machine_is_grpahicsclient() \
304 (machine_arch_type == MACH_TYPE_GRAPHICSCLIENT)
306 # define machine_is_graphicsclient() \
310 #ifdef CONFIG_SA1100_XP860
311 # ifdef machine_arch_type
312 # undef machine_arch_type
313 # define machine_arch_type __machine_arch_type
315 # define machine_arch_type MACH_TYPE_XP860
317 # define machine_is_xp860() (machine_arch_type == MACH_TYPE_XP860)
319 # define machine_is_xp860() (0)
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
330 # define machine_arch_type MACH_TYPE_EMPEG
332 # define machine_is_empeg() (machine_arch_type == MACH_TYPE_EMPEG)
334 # define machine_is_empeg() (0)
337 #ifdef CONFIG_SA1100_TIFON
338 # ifdef machine_arch_type
339 # undef machine_arch_type
340 # define machine_arch_type __machine_arch_type
342 # define machine_arch_type MACH_TYPE_TIFON
344 # define machine_is_tifon() (machine_arch_type == MACH_TYPE_TIFON)
346 # define machine_is_tifon() (0)
349 #ifdef CONFIG_SA1100_PLEB
350 # ifdef machine_arch_type
351 # undef machine_arch_type
352 # define machine_arch_type __machine_arch_type
354 # define machine_arch_type MACH_TYPE_PLEB
356 # define machine_is_pleb() (machine_arch_type == MACH_TYPE_PLEB)
358 # define machine_is_pleb() (0)
361 #ifdef CONFIG_SA1100_PENNY
362 # ifdef machine_arch_type
363 # undef machine_arch_type
364 # define machine_arch_type __machine_arch_type
366 # define machine_arch_type MACH_TYPE_PENNY
368 # define machine_is_penny() (machine_arch_type == MACH_TYPE_PENNY)
370 # define machine_is_penny() (0)
373 #ifndef machine_arch_type
374 #define machine_arch_type __machine_arch_type
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")
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) \
407 last = __switch_to(prev,next); \
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()
420 #error SMP not supported
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)