diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:33:35 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-10-22 20:33:35 -0400 |
commit | 80c226fbef56576946c9655fcb2ab62e63404d12 (patch) | |
tree | f5f565c370aeb0de257a4e3825c0873af54590e8 /arch/m68k | |
parent | 2c15bd00a5d6b2b64e006e91e2196f0c6a764cb6 (diff) | |
parent | 779b7e64b536ff65bcd40c0292871d2bb9b6d6e5 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k:
m68k: Add missing I/O macros {in,out}{w,l}_p() for !CONFIG_ISA
m68k: Remove big kernel lock in cache flush code
m68k: __pa(): cast arg to long
fbdev: atafb - Remove undead ifdef ATAFB_FALCON
zorro: Fix device_register() error handling
fbdev/m68k: Fix section mismatches in q40fb.c
m68k/m68knommu: merge the MMU and non-MMU traps.h
m68k/m68knommu: merge MMU and non-MMU thread_info.h
m68k/m68knommu: merge MMU and non-MMU atomic.h
m68k/m68knommu: clean up page.h
m68k/m68knommu: merge machdep.h files into a single file
m68k/m68knommu: merge MMU and non-MMU string.h
m68k/m68knommu: Remove dead SMP config option
m68k: move definition of THREAD_SIZE into thread_info_mm.h
m68k: Use asm-generic/ioctls.h (enables termiox)
m68k: Remove dead GG2 config option
Diffstat (limited to 'arch/m68k')
29 files changed, 826 insertions, 1534 deletions
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 8030e2481d97..77bb0d6baa62 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig | |||
@@ -434,7 +434,7 @@ config PROC_HARDWARE | |||
434 | 434 | ||
435 | config ISA | 435 | config ISA |
436 | bool | 436 | bool |
437 | depends on Q40 || AMIGA_PCMCIA || GG2 | 437 | depends on Q40 || AMIGA_PCMCIA |
438 | default y | 438 | default y |
439 | help | 439 | help |
440 | Find out whether you have ISA slots on your motherboard. ISA is the | 440 | Find out whether you have ISA slots on your motherboard. ISA is the |
@@ -445,7 +445,7 @@ config ISA | |||
445 | 445 | ||
446 | config GENERIC_ISA_DMA | 446 | config GENERIC_ISA_DMA |
447 | bool | 447 | bool |
448 | depends on Q40 || AMIGA_PCMCIA || GG2 | 448 | depends on Q40 || AMIGA_PCMCIA |
449 | default y | 449 | default y |
450 | 450 | ||
451 | config ZONE_DMA | 451 | config ZONE_DMA |
diff --git a/arch/m68k/include/asm/amigahw.h b/arch/m68k/include/asm/amigahw.h index 5ca5dd951a4a..7a19b5686a4a 100644 --- a/arch/m68k/include/asm/amigahw.h +++ b/arch/m68k/include/asm/amigahw.h | |||
@@ -102,7 +102,6 @@ struct amiga_hw_present { | |||
102 | AMIGAHW_DECLARE(ALICE_NTSC); /* NTSC Alice (8374) */ | 102 | AMIGAHW_DECLARE(ALICE_NTSC); /* NTSC Alice (8374) */ |
103 | AMIGAHW_DECLARE(MAGIC_REKICK); /* A3000 Magic Hard Rekick */ | 103 | AMIGAHW_DECLARE(MAGIC_REKICK); /* A3000 Magic Hard Rekick */ |
104 | AMIGAHW_DECLARE(PCMCIA); /* PCMCIA Slot */ | 104 | AMIGAHW_DECLARE(PCMCIA); /* PCMCIA Slot */ |
105 | AMIGAHW_DECLARE(GG2_ISA); /* GG2 Zorro2ISA Bridge */ | ||
106 | AMIGAHW_DECLARE(ZORRO); /* Zorro AutoConfig */ | 105 | AMIGAHW_DECLARE(ZORRO); /* Zorro AutoConfig */ |
107 | AMIGAHW_DECLARE(ZORRO3); /* Zorro III */ | 106 | AMIGAHW_DECLARE(ZORRO3); /* Zorro III */ |
108 | }; | 107 | }; |
diff --git a/arch/m68k/include/asm/atomic.h b/arch/m68k/include/asm/atomic.h index eab36dcacf6c..03ae3d14cd4a 100644 --- a/arch/m68k/include/asm/atomic.h +++ b/arch/m68k/include/asm/atomic.h | |||
@@ -1,7 +1,211 @@ | |||
1 | #ifdef __uClinux__ | 1 | #ifndef __ARCH_M68K_ATOMIC__ |
2 | #include "atomic_no.h" | 2 | #define __ARCH_M68K_ATOMIC__ |
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <asm/system.h> | ||
6 | |||
7 | /* | ||
8 | * Atomic operations that C can't guarantee us. Useful for | ||
9 | * resource counting etc.. | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * We do not have SMP m68k systems, so we don't have to deal with that. | ||
14 | */ | ||
15 | |||
16 | #define ATOMIC_INIT(i) { (i) } | ||
17 | |||
18 | #define atomic_read(v) (*(volatile int *)&(v)->counter) | ||
19 | #define atomic_set(v, i) (((v)->counter) = i) | ||
20 | |||
21 | /* | ||
22 | * The ColdFire parts cannot do some immediate to memory operations, | ||
23 | * so for them we do not specify the "i" asm constraint. | ||
24 | */ | ||
25 | #ifdef CONFIG_COLDFIRE | ||
26 | #define ASM_DI "d" | ||
3 | #else | 27 | #else |
4 | #include "atomic_mm.h" | 28 | #define ASM_DI "di" |
5 | #endif | 29 | #endif |
6 | 30 | ||
31 | static inline void atomic_add(int i, atomic_t *v) | ||
32 | { | ||
33 | __asm__ __volatile__("addl %1,%0" : "+m" (*v) : ASM_DI (i)); | ||
34 | } | ||
35 | |||
36 | static inline void atomic_sub(int i, atomic_t *v) | ||
37 | { | ||
38 | __asm__ __volatile__("subl %1,%0" : "+m" (*v) : ASM_DI (i)); | ||
39 | } | ||
40 | |||
41 | static inline void atomic_inc(atomic_t *v) | ||
42 | { | ||
43 | __asm__ __volatile__("addql #1,%0" : "+m" (*v)); | ||
44 | } | ||
45 | |||
46 | static inline void atomic_dec(atomic_t *v) | ||
47 | { | ||
48 | __asm__ __volatile__("subql #1,%0" : "+m" (*v)); | ||
49 | } | ||
50 | |||
51 | static inline int atomic_dec_and_test(atomic_t *v) | ||
52 | { | ||
53 | char c; | ||
54 | __asm__ __volatile__("subql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
55 | return c != 0; | ||
56 | } | ||
57 | |||
58 | static inline int atomic_inc_and_test(atomic_t *v) | ||
59 | { | ||
60 | char c; | ||
61 | __asm__ __volatile__("addql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
62 | return c != 0; | ||
63 | } | ||
64 | |||
65 | #ifdef CONFIG_RMW_INSNS | ||
66 | |||
67 | static inline int atomic_add_return(int i, atomic_t *v) | ||
68 | { | ||
69 | int t, tmp; | ||
70 | |||
71 | __asm__ __volatile__( | ||
72 | "1: movel %2,%1\n" | ||
73 | " addl %3,%1\n" | ||
74 | " casl %2,%1,%0\n" | ||
75 | " jne 1b" | ||
76 | : "+m" (*v), "=&d" (t), "=&d" (tmp) | ||
77 | : "g" (i), "2" (atomic_read(v))); | ||
78 | return t; | ||
79 | } | ||
80 | |||
81 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
82 | { | ||
83 | int t, tmp; | ||
84 | |||
85 | __asm__ __volatile__( | ||
86 | "1: movel %2,%1\n" | ||
87 | " subl %3,%1\n" | ||
88 | " casl %2,%1,%0\n" | ||
89 | " jne 1b" | ||
90 | : "+m" (*v), "=&d" (t), "=&d" (tmp) | ||
91 | : "g" (i), "2" (atomic_read(v))); | ||
92 | return t; | ||
93 | } | ||
94 | |||
95 | #define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) | ||
96 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | ||
97 | |||
98 | #else /* !CONFIG_RMW_INSNS */ | ||
99 | |||
100 | static inline int atomic_add_return(int i, atomic_t * v) | ||
101 | { | ||
102 | unsigned long flags; | ||
103 | int t; | ||
104 | |||
105 | local_irq_save(flags); | ||
106 | t = atomic_read(v); | ||
107 | t += i; | ||
108 | atomic_set(v, t); | ||
109 | local_irq_restore(flags); | ||
110 | |||
111 | return t; | ||
112 | } | ||
113 | |||
114 | static inline int atomic_sub_return(int i, atomic_t * v) | ||
115 | { | ||
116 | unsigned long flags; | ||
117 | int t; | ||
118 | |||
119 | local_irq_save(flags); | ||
120 | t = atomic_read(v); | ||
121 | t -= i; | ||
122 | atomic_set(v, t); | ||
123 | local_irq_restore(flags); | ||
124 | |||
125 | return t; | ||
126 | } | ||
127 | |||
128 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||
129 | { | ||
130 | unsigned long flags; | ||
131 | int prev; | ||
132 | |||
133 | local_irq_save(flags); | ||
134 | prev = atomic_read(v); | ||
135 | if (prev == old) | ||
136 | atomic_set(v, new); | ||
137 | local_irq_restore(flags); | ||
138 | return prev; | ||
139 | } | ||
140 | |||
141 | static inline int atomic_xchg(atomic_t *v, int new) | ||
142 | { | ||
143 | unsigned long flags; | ||
144 | int prev; | ||
145 | |||
146 | local_irq_save(flags); | ||
147 | prev = atomic_read(v); | ||
148 | atomic_set(v, new); | ||
149 | local_irq_restore(flags); | ||
150 | return prev; | ||
151 | } | ||
152 | |||
153 | #endif /* !CONFIG_RMW_INSNS */ | ||
154 | |||
155 | #define atomic_dec_return(v) atomic_sub_return(1, (v)) | ||
156 | #define atomic_inc_return(v) atomic_add_return(1, (v)) | ||
157 | |||
158 | static inline int atomic_sub_and_test(int i, atomic_t *v) | ||
159 | { | ||
160 | char c; | ||
161 | __asm__ __volatile__("subl %2,%1; seq %0" | ||
162 | : "=d" (c), "+m" (*v) | ||
163 | : ASM_DI (i)); | ||
164 | return c != 0; | ||
165 | } | ||
166 | |||
167 | static inline int atomic_add_negative(int i, atomic_t *v) | ||
168 | { | ||
169 | char c; | ||
170 | __asm__ __volatile__("addl %2,%1; smi %0" | ||
171 | : "=d" (c), "+m" (*v) | ||
172 | : "id" (i)); | ||
173 | return c != 0; | ||
174 | } | ||
175 | |||
176 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *v) | ||
177 | { | ||
178 | __asm__ __volatile__("andl %1,%0" : "+m" (*v) : "id" (~(mask))); | ||
179 | } | ||
180 | |||
181 | static inline void atomic_set_mask(unsigned long mask, unsigned long *v) | ||
182 | { | ||
183 | __asm__ __volatile__("orl %1,%0" : "+m" (*v) : "id" (mask)); | ||
184 | } | ||
185 | |||
186 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | ||
187 | { | ||
188 | int c, old; | ||
189 | c = atomic_read(v); | ||
190 | for (;;) { | ||
191 | if (unlikely(c == (u))) | ||
192 | break; | ||
193 | old = atomic_cmpxchg((v), c, c + (a)); | ||
194 | if (likely(old == c)) | ||
195 | break; | ||
196 | c = old; | ||
197 | } | ||
198 | return c != (u); | ||
199 | } | ||
200 | |||
201 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
202 | |||
203 | /* Atomic operations are already serializing */ | ||
204 | #define smp_mb__before_atomic_dec() barrier() | ||
205 | #define smp_mb__after_atomic_dec() barrier() | ||
206 | #define smp_mb__before_atomic_inc() barrier() | ||
207 | #define smp_mb__after_atomic_inc() barrier() | ||
208 | |||
209 | #include <asm-generic/atomic-long.h> | ||
7 | #include <asm-generic/atomic64.h> | 210 | #include <asm-generic/atomic64.h> |
211 | #endif /* __ARCH_M68K_ATOMIC __ */ | ||
diff --git a/arch/m68k/include/asm/atomic_mm.h b/arch/m68k/include/asm/atomic_mm.h deleted file mode 100644 index 6a223b3f7e74..000000000000 --- a/arch/m68k/include/asm/atomic_mm.h +++ /dev/null | |||
@@ -1,200 +0,0 @@ | |||
1 | #ifndef __ARCH_M68K_ATOMIC__ | ||
2 | #define __ARCH_M68K_ATOMIC__ | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <asm/system.h> | ||
6 | |||
7 | /* | ||
8 | * Atomic operations that C can't guarantee us. Useful for | ||
9 | * resource counting etc.. | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * We do not have SMP m68k systems, so we don't have to deal with that. | ||
14 | */ | ||
15 | |||
16 | #define ATOMIC_INIT(i) { (i) } | ||
17 | |||
18 | #define atomic_read(v) (*(volatile int *)&(v)->counter) | ||
19 | #define atomic_set(v, i) (((v)->counter) = i) | ||
20 | |||
21 | static inline void atomic_add(int i, atomic_t *v) | ||
22 | { | ||
23 | __asm__ __volatile__("addl %1,%0" : "+m" (*v) : "id" (i)); | ||
24 | } | ||
25 | |||
26 | static inline void atomic_sub(int i, atomic_t *v) | ||
27 | { | ||
28 | __asm__ __volatile__("subl %1,%0" : "+m" (*v) : "id" (i)); | ||
29 | } | ||
30 | |||
31 | static inline void atomic_inc(atomic_t *v) | ||
32 | { | ||
33 | __asm__ __volatile__("addql #1,%0" : "+m" (*v)); | ||
34 | } | ||
35 | |||
36 | static inline void atomic_dec(atomic_t *v) | ||
37 | { | ||
38 | __asm__ __volatile__("subql #1,%0" : "+m" (*v)); | ||
39 | } | ||
40 | |||
41 | static inline int atomic_dec_and_test(atomic_t *v) | ||
42 | { | ||
43 | char c; | ||
44 | __asm__ __volatile__("subql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
45 | return c != 0; | ||
46 | } | ||
47 | |||
48 | static inline int atomic_inc_and_test(atomic_t *v) | ||
49 | { | ||
50 | char c; | ||
51 | __asm__ __volatile__("addql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
52 | return c != 0; | ||
53 | } | ||
54 | |||
55 | #ifdef CONFIG_RMW_INSNS | ||
56 | |||
57 | static inline int atomic_add_return(int i, atomic_t *v) | ||
58 | { | ||
59 | int t, tmp; | ||
60 | |||
61 | __asm__ __volatile__( | ||
62 | "1: movel %2,%1\n" | ||
63 | " addl %3,%1\n" | ||
64 | " casl %2,%1,%0\n" | ||
65 | " jne 1b" | ||
66 | : "+m" (*v), "=&d" (t), "=&d" (tmp) | ||
67 | : "g" (i), "2" (atomic_read(v))); | ||
68 | return t; | ||
69 | } | ||
70 | |||
71 | static inline int atomic_sub_return(int i, atomic_t *v) | ||
72 | { | ||
73 | int t, tmp; | ||
74 | |||
75 | __asm__ __volatile__( | ||
76 | "1: movel %2,%1\n" | ||
77 | " subl %3,%1\n" | ||
78 | " casl %2,%1,%0\n" | ||
79 | " jne 1b" | ||
80 | : "+m" (*v), "=&d" (t), "=&d" (tmp) | ||
81 | : "g" (i), "2" (atomic_read(v))); | ||
82 | return t; | ||
83 | } | ||
84 | |||
85 | #define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) | ||
86 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | ||
87 | |||
88 | #else /* !CONFIG_RMW_INSNS */ | ||
89 | |||
90 | static inline int atomic_add_return(int i, atomic_t * v) | ||
91 | { | ||
92 | unsigned long flags; | ||
93 | int t; | ||
94 | |||
95 | local_irq_save(flags); | ||
96 | t = atomic_read(v); | ||
97 | t += i; | ||
98 | atomic_set(v, t); | ||
99 | local_irq_restore(flags); | ||
100 | |||
101 | return t; | ||
102 | } | ||
103 | |||
104 | static inline int atomic_sub_return(int i, atomic_t * v) | ||
105 | { | ||
106 | unsigned long flags; | ||
107 | int t; | ||
108 | |||
109 | local_irq_save(flags); | ||
110 | t = atomic_read(v); | ||
111 | t -= i; | ||
112 | atomic_set(v, t); | ||
113 | local_irq_restore(flags); | ||
114 | |||
115 | return t; | ||
116 | } | ||
117 | |||
118 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||
119 | { | ||
120 | unsigned long flags; | ||
121 | int prev; | ||
122 | |||
123 | local_irq_save(flags); | ||
124 | prev = atomic_read(v); | ||
125 | if (prev == old) | ||
126 | atomic_set(v, new); | ||
127 | local_irq_restore(flags); | ||
128 | return prev; | ||
129 | } | ||
130 | |||
131 | static inline int atomic_xchg(atomic_t *v, int new) | ||
132 | { | ||
133 | unsigned long flags; | ||
134 | int prev; | ||
135 | |||
136 | local_irq_save(flags); | ||
137 | prev = atomic_read(v); | ||
138 | atomic_set(v, new); | ||
139 | local_irq_restore(flags); | ||
140 | return prev; | ||
141 | } | ||
142 | |||
143 | #endif /* !CONFIG_RMW_INSNS */ | ||
144 | |||
145 | #define atomic_dec_return(v) atomic_sub_return(1, (v)) | ||
146 | #define atomic_inc_return(v) atomic_add_return(1, (v)) | ||
147 | |||
148 | static inline int atomic_sub_and_test(int i, atomic_t *v) | ||
149 | { | ||
150 | char c; | ||
151 | __asm__ __volatile__("subl %2,%1; seq %0" | ||
152 | : "=d" (c), "+m" (*v) | ||
153 | : "id" (i)); | ||
154 | return c != 0; | ||
155 | } | ||
156 | |||
157 | static inline int atomic_add_negative(int i, atomic_t *v) | ||
158 | { | ||
159 | char c; | ||
160 | __asm__ __volatile__("addl %2,%1; smi %0" | ||
161 | : "=d" (c), "+m" (*v) | ||
162 | : "id" (i)); | ||
163 | return c != 0; | ||
164 | } | ||
165 | |||
166 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *v) | ||
167 | { | ||
168 | __asm__ __volatile__("andl %1,%0" : "+m" (*v) : "id" (~(mask))); | ||
169 | } | ||
170 | |||
171 | static inline void atomic_set_mask(unsigned long mask, unsigned long *v) | ||
172 | { | ||
173 | __asm__ __volatile__("orl %1,%0" : "+m" (*v) : "id" (mask)); | ||
174 | } | ||
175 | |||
176 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | ||
177 | { | ||
178 | int c, old; | ||
179 | c = atomic_read(v); | ||
180 | for (;;) { | ||
181 | if (unlikely(c == (u))) | ||
182 | break; | ||
183 | old = atomic_cmpxchg((v), c, c + (a)); | ||
184 | if (likely(old == c)) | ||
185 | break; | ||
186 | c = old; | ||
187 | } | ||
188 | return c != (u); | ||
189 | } | ||
190 | |||
191 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
192 | |||
193 | /* Atomic operations are already serializing */ | ||
194 | #define smp_mb__before_atomic_dec() barrier() | ||
195 | #define smp_mb__after_atomic_dec() barrier() | ||
196 | #define smp_mb__before_atomic_inc() barrier() | ||
197 | #define smp_mb__after_atomic_inc() barrier() | ||
198 | |||
199 | #include <asm-generic/atomic-long.h> | ||
200 | #endif /* __ARCH_M68K_ATOMIC __ */ | ||
diff --git a/arch/m68k/include/asm/atomic_no.h b/arch/m68k/include/asm/atomic_no.h deleted file mode 100644 index 289310c63a8a..000000000000 --- a/arch/m68k/include/asm/atomic_no.h +++ /dev/null | |||
@@ -1,155 +0,0 @@ | |||
1 | #ifndef __ARCH_M68KNOMMU_ATOMIC__ | ||
2 | #define __ARCH_M68KNOMMU_ATOMIC__ | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <asm/system.h> | ||
6 | |||
7 | /* | ||
8 | * Atomic operations that C can't guarantee us. Useful for | ||
9 | * resource counting etc.. | ||
10 | */ | ||
11 | |||
12 | /* | ||
13 | * We do not have SMP m68k systems, so we don't have to deal with that. | ||
14 | */ | ||
15 | |||
16 | #define ATOMIC_INIT(i) { (i) } | ||
17 | |||
18 | #define atomic_read(v) (*(volatile int *)&(v)->counter) | ||
19 | #define atomic_set(v, i) (((v)->counter) = i) | ||
20 | |||
21 | static __inline__ void atomic_add(int i, atomic_t *v) | ||
22 | { | ||
23 | #ifdef CONFIG_COLDFIRE | ||
24 | __asm__ __volatile__("addl %1,%0" : "+m" (*v) : "d" (i)); | ||
25 | #else | ||
26 | __asm__ __volatile__("addl %1,%0" : "+m" (*v) : "di" (i)); | ||
27 | #endif | ||
28 | } | ||
29 | |||
30 | static __inline__ void atomic_sub(int i, atomic_t *v) | ||
31 | { | ||
32 | #ifdef CONFIG_COLDFIRE | ||
33 | __asm__ __volatile__("subl %1,%0" : "+m" (*v) : "d" (i)); | ||
34 | #else | ||
35 | __asm__ __volatile__("subl %1,%0" : "+m" (*v) : "di" (i)); | ||
36 | #endif | ||
37 | } | ||
38 | |||
39 | static __inline__ int atomic_sub_and_test(int i, atomic_t * v) | ||
40 | { | ||
41 | char c; | ||
42 | #ifdef CONFIG_COLDFIRE | ||
43 | __asm__ __volatile__("subl %2,%1; seq %0" | ||
44 | : "=d" (c), "+m" (*v) | ||
45 | : "d" (i)); | ||
46 | #else | ||
47 | __asm__ __volatile__("subl %2,%1; seq %0" | ||
48 | : "=d" (c), "+m" (*v) | ||
49 | : "di" (i)); | ||
50 | #endif | ||
51 | return c != 0; | ||
52 | } | ||
53 | |||
54 | static __inline__ void atomic_inc(volatile atomic_t *v) | ||
55 | { | ||
56 | __asm__ __volatile__("addql #1,%0" : "+m" (*v)); | ||
57 | } | ||
58 | |||
59 | /* | ||
60 | * atomic_inc_and_test - increment and test | ||
61 | * @v: pointer of type atomic_t | ||
62 | * | ||
63 | * Atomically increments @v by 1 | ||
64 | * and returns true if the result is zero, or false for all | ||
65 | * other cases. | ||
66 | */ | ||
67 | |||
68 | static __inline__ int atomic_inc_and_test(volatile atomic_t *v) | ||
69 | { | ||
70 | char c; | ||
71 | __asm__ __volatile__("addql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
72 | return c != 0; | ||
73 | } | ||
74 | |||
75 | static __inline__ void atomic_dec(volatile atomic_t *v) | ||
76 | { | ||
77 | __asm__ __volatile__("subql #1,%0" : "+m" (*v)); | ||
78 | } | ||
79 | |||
80 | static __inline__ int atomic_dec_and_test(volatile atomic_t *v) | ||
81 | { | ||
82 | char c; | ||
83 | __asm__ __volatile__("subql #1,%1; seq %0" : "=d" (c), "+m" (*v)); | ||
84 | return c != 0; | ||
85 | } | ||
86 | |||
87 | static __inline__ void atomic_clear_mask(unsigned long mask, unsigned long *v) | ||
88 | { | ||
89 | __asm__ __volatile__("andl %1,%0" : "+m" (*v) : "id" (~(mask))); | ||
90 | } | ||
91 | |||
92 | static __inline__ void atomic_set_mask(unsigned long mask, unsigned long *v) | ||
93 | { | ||
94 | __asm__ __volatile__("orl %1,%0" : "+m" (*v) : "id" (mask)); | ||
95 | } | ||
96 | |||
97 | /* Atomic operations are already serializing */ | ||
98 | #define smp_mb__before_atomic_dec() barrier() | ||
99 | #define smp_mb__after_atomic_dec() barrier() | ||
100 | #define smp_mb__before_atomic_inc() barrier() | ||
101 | #define smp_mb__after_atomic_inc() barrier() | ||
102 | |||
103 | static inline int atomic_add_return(int i, atomic_t * v) | ||
104 | { | ||
105 | unsigned long temp, flags; | ||
106 | |||
107 | local_irq_save(flags); | ||
108 | temp = *(long *)v; | ||
109 | temp += i; | ||
110 | *(long *)v = temp; | ||
111 | local_irq_restore(flags); | ||
112 | |||
113 | return temp; | ||
114 | } | ||
115 | |||
116 | #define atomic_add_negative(a, v) (atomic_add_return((a), (v)) < 0) | ||
117 | |||
118 | static inline int atomic_sub_return(int i, atomic_t * v) | ||
119 | { | ||
120 | unsigned long temp, flags; | ||
121 | |||
122 | local_irq_save(flags); | ||
123 | temp = *(long *)v; | ||
124 | temp -= i; | ||
125 | *(long *)v = temp; | ||
126 | local_irq_restore(flags); | ||
127 | |||
128 | return temp; | ||
129 | } | ||
130 | |||
131 | #define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) | ||
132 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | ||
133 | |||
134 | static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) | ||
135 | { | ||
136 | int c, old; | ||
137 | c = atomic_read(v); | ||
138 | for (;;) { | ||
139 | if (unlikely(c == (u))) | ||
140 | break; | ||
141 | old = atomic_cmpxchg((v), c, c + (a)); | ||
142 | if (likely(old == c)) | ||
143 | break; | ||
144 | c = old; | ||
145 | } | ||
146 | return c != (u); | ||
147 | } | ||
148 | |||
149 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
150 | |||
151 | #define atomic_dec_return(v) atomic_sub_return(1,(v)) | ||
152 | #define atomic_inc_return(v) atomic_add_return(1,(v)) | ||
153 | |||
154 | #include <asm-generic/atomic-long.h> | ||
155 | #endif /* __ARCH_M68KNOMMU_ATOMIC __ */ | ||
diff --git a/arch/m68k/include/asm/entry_mm.h b/arch/m68k/include/asm/entry_mm.h index 474125886218..e41fea399bfe 100644 --- a/arch/m68k/include/asm/entry_mm.h +++ b/arch/m68k/include/asm/entry_mm.h | |||
@@ -3,6 +3,9 @@ | |||
3 | 3 | ||
4 | #include <asm/setup.h> | 4 | #include <asm/setup.h> |
5 | #include <asm/page.h> | 5 | #include <asm/page.h> |
6 | #ifdef __ASSEMBLY__ | ||
7 | #include <asm/thread_info.h> | ||
8 | #endif | ||
6 | 9 | ||
7 | /* | 10 | /* |
8 | * Stack layout in 'ret_from_exception': | 11 | * Stack layout in 'ret_from_exception': |
diff --git a/arch/m68k/include/asm/io_mm.h b/arch/m68k/include/asm/io_mm.h index 9e673e3bd434..0fb3468000e7 100644 --- a/arch/m68k/include/asm/io_mm.h +++ b/arch/m68k/include/asm/io_mm.h | |||
@@ -49,23 +49,6 @@ | |||
49 | #define MULTI_ISA 0 | 49 | #define MULTI_ISA 0 |
50 | #endif /* Q40 */ | 50 | #endif /* Q40 */ |
51 | 51 | ||
52 | /* GG-II Zorro to ISA bridge */ | ||
53 | #ifdef CONFIG_GG2 | ||
54 | |||
55 | extern unsigned long gg2_isa_base; | ||
56 | #define GG2_ISA_IO_B(ioaddr) (gg2_isa_base+1+((unsigned long)(ioaddr)*4)) | ||
57 | #define GG2_ISA_IO_W(ioaddr) (gg2_isa_base+ ((unsigned long)(ioaddr)*4)) | ||
58 | #define GG2_ISA_MEM_B(madr) (gg2_isa_base+1+(((unsigned long)(madr)*4) & 0xfffff)) | ||
59 | #define GG2_ISA_MEM_W(madr) (gg2_isa_base+ (((unsigned long)(madr)*4) & 0xfffff)) | ||
60 | |||
61 | #ifndef MULTI_ISA | ||
62 | #define MULTI_ISA 0 | ||
63 | #else | ||
64 | #undef MULTI_ISA | ||
65 | #define MULTI_ISA 1 | ||
66 | #endif | ||
67 | #endif /* GG2 */ | ||
68 | |||
69 | #ifdef CONFIG_AMIGA_PCMCIA | 52 | #ifdef CONFIG_AMIGA_PCMCIA |
70 | #include <asm/amigayle.h> | 53 | #include <asm/amigayle.h> |
71 | 54 | ||
@@ -89,8 +72,7 @@ extern unsigned long gg2_isa_base; | |||
89 | #endif | 72 | #endif |
90 | 73 | ||
91 | #define ISA_TYPE_Q40 (1) | 74 | #define ISA_TYPE_Q40 (1) |
92 | #define ISA_TYPE_GG2 (2) | 75 | #define ISA_TYPE_AG (2) |
93 | #define ISA_TYPE_AG (3) | ||
94 | 76 | ||
95 | #if defined(CONFIG_Q40) && !defined(MULTI_ISA) | 77 | #if defined(CONFIG_Q40) && !defined(MULTI_ISA) |
96 | #define ISA_TYPE ISA_TYPE_Q40 | 78 | #define ISA_TYPE ISA_TYPE_Q40 |
@@ -100,10 +82,6 @@ extern unsigned long gg2_isa_base; | |||
100 | #define ISA_TYPE ISA_TYPE_AG | 82 | #define ISA_TYPE ISA_TYPE_AG |
101 | #define ISA_SEX 1 | 83 | #define ISA_SEX 1 |
102 | #endif | 84 | #endif |
103 | #if defined(CONFIG_GG2) && !defined(MULTI_ISA) | ||
104 | #define ISA_TYPE ISA_TYPE_GG2 | ||
105 | #define ISA_SEX 0 | ||
106 | #endif | ||
107 | 85 | ||
108 | #ifdef MULTI_ISA | 86 | #ifdef MULTI_ISA |
109 | extern int isa_type; | 87 | extern int isa_type; |
@@ -125,9 +103,6 @@ static inline u8 __iomem *isa_itb(unsigned long addr) | |||
125 | #ifdef CONFIG_Q40 | 103 | #ifdef CONFIG_Q40 |
126 | case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_IO_B(addr); | 104 | case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_IO_B(addr); |
127 | #endif | 105 | #endif |
128 | #ifdef CONFIG_GG2 | ||
129 | case ISA_TYPE_GG2: return (u8 __iomem *)GG2_ISA_IO_B(addr); | ||
130 | #endif | ||
131 | #ifdef CONFIG_AMIGA_PCMCIA | 106 | #ifdef CONFIG_AMIGA_PCMCIA |
132 | case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr); | 107 | case ISA_TYPE_AG: return (u8 __iomem *)AG_ISA_IO_B(addr); |
133 | #endif | 108 | #endif |
@@ -141,9 +116,6 @@ static inline u16 __iomem *isa_itw(unsigned long addr) | |||
141 | #ifdef CONFIG_Q40 | 116 | #ifdef CONFIG_Q40 |
142 | case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_IO_W(addr); | 117 | case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_IO_W(addr); |
143 | #endif | 118 | #endif |
144 | #ifdef CONFIG_GG2 | ||
145 | case ISA_TYPE_GG2: return (u16 __iomem *)GG2_ISA_IO_W(addr); | ||
146 | #endif | ||
147 | #ifdef CONFIG_AMIGA_PCMCIA | 119 | #ifdef CONFIG_AMIGA_PCMCIA |
148 | case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr); | 120 | case ISA_TYPE_AG: return (u16 __iomem *)AG_ISA_IO_W(addr); |
149 | #endif | 121 | #endif |
@@ -167,9 +139,6 @@ static inline u8 __iomem *isa_mtb(unsigned long addr) | |||
167 | #ifdef CONFIG_Q40 | 139 | #ifdef CONFIG_Q40 |
168 | case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_MEM_B(addr); | 140 | case ISA_TYPE_Q40: return (u8 __iomem *)Q40_ISA_MEM_B(addr); |
169 | #endif | 141 | #endif |
170 | #ifdef CONFIG_GG2 | ||
171 | case ISA_TYPE_GG2: return (u8 __iomem *)GG2_ISA_MEM_B(addr); | ||
172 | #endif | ||
173 | #ifdef CONFIG_AMIGA_PCMCIA | 142 | #ifdef CONFIG_AMIGA_PCMCIA |
174 | case ISA_TYPE_AG: return (u8 __iomem *)addr; | 143 | case ISA_TYPE_AG: return (u8 __iomem *)addr; |
175 | #endif | 144 | #endif |
@@ -183,9 +152,6 @@ static inline u16 __iomem *isa_mtw(unsigned long addr) | |||
183 | #ifdef CONFIG_Q40 | 152 | #ifdef CONFIG_Q40 |
184 | case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_MEM_W(addr); | 153 | case ISA_TYPE_Q40: return (u16 __iomem *)Q40_ISA_MEM_W(addr); |
185 | #endif | 154 | #endif |
186 | #ifdef CONFIG_GG2 | ||
187 | case ISA_TYPE_GG2: return (u16 __iomem *)GG2_ISA_MEM_W(addr); | ||
188 | #endif | ||
189 | #ifdef CONFIG_AMIGA_PCMCIA | 155 | #ifdef CONFIG_AMIGA_PCMCIA |
190 | case ISA_TYPE_AG: return (u16 __iomem *)addr; | 156 | case ISA_TYPE_AG: return (u16 __iomem *)addr; |
191 | #endif | 157 | #endif |
@@ -217,9 +183,6 @@ static inline void isa_delay(void) | |||
217 | #ifdef CONFIG_Q40 | 183 | #ifdef CONFIG_Q40 |
218 | case ISA_TYPE_Q40: isa_outb(0,0x80); break; | 184 | case ISA_TYPE_Q40: isa_outb(0,0x80); break; |
219 | #endif | 185 | #endif |
220 | #ifdef CONFIG_GG2 | ||
221 | case ISA_TYPE_GG2: break; | ||
222 | #endif | ||
223 | #ifdef CONFIG_AMIGA_PCMCIA | 186 | #ifdef CONFIG_AMIGA_PCMCIA |
224 | case ISA_TYPE_AG: break; | 187 | case ISA_TYPE_AG: break; |
225 | #endif | 188 | #endif |
@@ -287,9 +250,13 @@ static inline void isa_delay(void) | |||
287 | #define outb(val,port) ((void)0) | 250 | #define outb(val,port) ((void)0) |
288 | #define outb_p(val,port) ((void)0) | 251 | #define outb_p(val,port) ((void)0) |
289 | #define inw(port) 0xffff | 252 | #define inw(port) 0xffff |
253 | #define inw_p(port) 0xffff | ||
290 | #define outw(val,port) ((void)0) | 254 | #define outw(val,port) ((void)0) |
255 | #define outw_p(val,port) ((void)0) | ||
291 | #define inl(port) 0xffffffffUL | 256 | #define inl(port) 0xffffffffUL |
257 | #define inl_p(port) 0xffffffffUL | ||
292 | #define outl(val,port) ((void)0) | 258 | #define outl(val,port) ((void)0) |
259 | #define outl_p(val,port) ((void)0) | ||
293 | 260 | ||
294 | #define insb(port,buf,nr) ((void)0) | 261 | #define insb(port,buf,nr) ((void)0) |
295 | #define outsb(port,buf,nr) ((void)0) | 262 | #define outsb(port,buf,nr) ((void)0) |
diff --git a/arch/m68k/include/asm/ioctls.h b/arch/m68k/include/asm/ioctls.h index 91a57d665460..1332bb4ca5b0 100644 --- a/arch/m68k/include/asm/ioctls.h +++ b/arch/m68k/include/asm/ioctls.h | |||
@@ -1,86 +1,8 @@ | |||
1 | #ifndef __ARCH_M68K_IOCTLS_H__ | 1 | #ifndef __ARCH_M68K_IOCTLS_H__ |
2 | #define __ARCH_M68K_IOCTLS_H__ | 2 | #define __ARCH_M68K_IOCTLS_H__ |
3 | 3 | ||
4 | #include <asm/ioctl.h> | ||
5 | |||
6 | /* 0x54 is just a magic number to make these relatively unique ('T') */ | ||
7 | |||
8 | #define TCGETS 0x5401 | ||
9 | #define TCSETS 0x5402 | ||
10 | #define TCSETSW 0x5403 | ||
11 | #define TCSETSF 0x5404 | ||
12 | #define TCGETA 0x5405 | ||
13 | #define TCSETA 0x5406 | ||
14 | #define TCSETAW 0x5407 | ||
15 | #define TCSETAF 0x5408 | ||
16 | #define TCSBRK 0x5409 | ||
17 | #define TCXONC 0x540A | ||
18 | #define TCFLSH 0x540B | ||
19 | #define TIOCEXCL 0x540C | ||
20 | #define TIOCNXCL 0x540D | ||
21 | #define TIOCSCTTY 0x540E | ||
22 | #define TIOCGPGRP 0x540F | ||
23 | #define TIOCSPGRP 0x5410 | ||
24 | #define TIOCOUTQ 0x5411 | ||
25 | #define TIOCSTI 0x5412 | ||
26 | #define TIOCGWINSZ 0x5413 | ||
27 | #define TIOCSWINSZ 0x5414 | ||
28 | #define TIOCMGET 0x5415 | ||
29 | #define TIOCMBIS 0x5416 | ||
30 | #define TIOCMBIC 0x5417 | ||
31 | #define TIOCMSET 0x5418 | ||
32 | #define TIOCGSOFTCAR 0x5419 | ||
33 | #define TIOCSSOFTCAR 0x541A | ||
34 | #define FIONREAD 0x541B | ||
35 | #define TIOCINQ FIONREAD | ||
36 | #define TIOCLINUX 0x541C | ||
37 | #define TIOCCONS 0x541D | ||
38 | #define TIOCGSERIAL 0x541E | ||
39 | #define TIOCSSERIAL 0x541F | ||
40 | #define TIOCPKT 0x5420 | ||
41 | #define FIONBIO 0x5421 | ||
42 | #define TIOCNOTTY 0x5422 | ||
43 | #define TIOCSETD 0x5423 | ||
44 | #define TIOCGETD 0x5424 | ||
45 | #define TCSBRKP 0x5425 /* Needed for POSIX tcsendbreak() */ | ||
46 | #define TIOCSBRK 0x5427 /* BSD compatibility */ | ||
47 | #define TIOCCBRK 0x5428 /* BSD compatibility */ | ||
48 | #define TIOCGSID 0x5429 /* Return the session ID of FD */ | ||
49 | #define TCGETS2 _IOR('T',0x2A, struct termios2) | ||
50 | #define TCSETS2 _IOW('T',0x2B, struct termios2) | ||
51 | #define TCSETSW2 _IOW('T',0x2C, struct termios2) | ||
52 | #define TCSETSF2 _IOW('T',0x2D, struct termios2) | ||
53 | #define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */ | ||
54 | #define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */ | ||
55 | #define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */ | ||
56 | |||
57 | #define FIONCLEX 0x5450 /* these numbers need to be adjusted. */ | ||
58 | #define FIOCLEX 0x5451 | ||
59 | #define FIOASYNC 0x5452 | ||
60 | #define TIOCSERCONFIG 0x5453 | ||
61 | #define TIOCSERGWILD 0x5454 | ||
62 | #define TIOCSERSWILD 0x5455 | ||
63 | #define TIOCGLCKTRMIOS 0x5456 | ||
64 | #define TIOCSLCKTRMIOS 0x5457 | ||
65 | #define TIOCSERGSTRUCT 0x5458 /* For debugging only */ | ||
66 | #define TIOCSERGETLSR 0x5459 /* Get line status register */ | ||
67 | #define TIOCSERGETMULTI 0x545A /* Get multiport config */ | ||
68 | #define TIOCSERSETMULTI 0x545B /* Set multiport config */ | ||
69 | |||
70 | #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ | ||
71 | #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ | ||
72 | #define FIOQSIZE 0x545E | 4 | #define FIOQSIZE 0x545E |
73 | 5 | ||
74 | /* Used for packet mode */ | 6 | #include <asm-generic/ioctls.h> |
75 | #define TIOCPKT_DATA 0 | ||
76 | #define TIOCPKT_FLUSHREAD 1 | ||
77 | #define TIOCPKT_FLUSHWRITE 2 | ||
78 | #define TIOCPKT_STOP 4 | ||
79 | #define TIOCPKT_START 8 | ||
80 | #define TIOCPKT_NOSTOP 16 | ||
81 | #define TIOCPKT_DOSTOP 32 | ||
82 | #define TIOCPKT_IOCTL 64 | ||
83 | |||
84 | #define TIOCSER_TEMT 0x01 /* Transmitter physically empty */ | ||
85 | 7 | ||
86 | #endif /* __ARCH_M68K_IOCTLS_H__ */ | 8 | #endif /* __ARCH_M68K_IOCTLS_H__ */ |
diff --git a/arch/m68k/include/asm/machdep.h b/arch/m68k/include/asm/machdep.h index fc24b6fc5508..789f3b2de0e9 100644 --- a/arch/m68k/include/asm/machdep.h +++ b/arch/m68k/include/asm/machdep.h | |||
@@ -1,5 +1,44 @@ | |||
1 | #ifdef __uClinux__ | 1 | #ifndef _M68K_MACHDEP_H |
2 | #include "machdep_no.h" | 2 | #define _M68K_MACHDEP_H |
3 | #else | 3 | |
4 | #include "machdep_mm.h" | 4 | #include <linux/seq_file.h> |
5 | #endif | 5 | #include <linux/interrupt.h> |
6 | |||
7 | struct pt_regs; | ||
8 | struct mktime; | ||
9 | struct rtc_time; | ||
10 | struct rtc_pll_info; | ||
11 | struct buffer_head; | ||
12 | |||
13 | extern void (*mach_sched_init) (irq_handler_t handler); | ||
14 | /* machine dependent irq functions */ | ||
15 | extern void (*mach_init_IRQ) (void); | ||
16 | extern void (*mach_get_model) (char *model); | ||
17 | extern void (*mach_get_hardware_list) (struct seq_file *m); | ||
18 | /* machine dependent timer functions */ | ||
19 | extern unsigned long (*mach_gettimeoffset)(void); | ||
20 | extern int (*mach_hwclk)(int, struct rtc_time*); | ||
21 | extern unsigned int (*mach_get_ss)(void); | ||
22 | extern int (*mach_get_rtc_pll)(struct rtc_pll_info *); | ||
23 | extern int (*mach_set_rtc_pll)(struct rtc_pll_info *); | ||
24 | extern int (*mach_set_clock_mmss)(unsigned long); | ||
25 | extern void (*mach_gettod)(int *year, int *mon, int *day, int *hour, | ||
26 | int *min, int *sec); | ||
27 | extern void (*mach_reset)( void ); | ||
28 | extern void (*mach_halt)( void ); | ||
29 | extern void (*mach_power_off)( void ); | ||
30 | extern unsigned long (*mach_hd_init) (unsigned long, unsigned long); | ||
31 | extern void (*mach_hd_setup)(char *, int *); | ||
32 | extern long mach_max_dma_address; | ||
33 | extern void (*mach_heartbeat) (int); | ||
34 | extern void (*mach_l2_flush) (int); | ||
35 | extern void (*mach_beep) (unsigned int, unsigned int); | ||
36 | |||
37 | /* Hardware clock functions */ | ||
38 | extern void hw_timer_init(void); | ||
39 | extern unsigned long hw_timer_offset(void); | ||
40 | extern irqreturn_t arch_timer_interrupt(int irq, void *dummy); | ||
41 | |||
42 | extern void config_BSP(char *command, int len); | ||
43 | |||
44 | #endif /* _M68K_MACHDEP_H */ | ||
diff --git a/arch/m68k/include/asm/machdep_mm.h b/arch/m68k/include/asm/machdep_mm.h deleted file mode 100644 index 5637dcef314e..000000000000 --- a/arch/m68k/include/asm/machdep_mm.h +++ /dev/null | |||
@@ -1,35 +0,0 @@ | |||
1 | #ifndef _M68K_MACHDEP_H | ||
2 | #define _M68K_MACHDEP_H | ||
3 | |||
4 | #include <linux/seq_file.h> | ||
5 | #include <linux/interrupt.h> | ||
6 | |||
7 | struct pt_regs; | ||
8 | struct mktime; | ||
9 | struct rtc_time; | ||
10 | struct rtc_pll_info; | ||
11 | struct buffer_head; | ||
12 | |||
13 | extern void (*mach_sched_init) (irq_handler_t handler); | ||
14 | /* machine dependent irq functions */ | ||
15 | extern void (*mach_init_IRQ) (void); | ||
16 | extern void (*mach_get_model) (char *model); | ||
17 | extern void (*mach_get_hardware_list) (struct seq_file *m); | ||
18 | /* machine dependent timer functions */ | ||
19 | extern unsigned long (*mach_gettimeoffset)(void); | ||
20 | extern int (*mach_hwclk)(int, struct rtc_time*); | ||
21 | extern unsigned int (*mach_get_ss)(void); | ||
22 | extern int (*mach_get_rtc_pll)(struct rtc_pll_info *); | ||
23 | extern int (*mach_set_rtc_pll)(struct rtc_pll_info *); | ||
24 | extern int (*mach_set_clock_mmss)(unsigned long); | ||
25 | extern void (*mach_reset)( void ); | ||
26 | extern void (*mach_halt)( void ); | ||
27 | extern void (*mach_power_off)( void ); | ||
28 | extern unsigned long (*mach_hd_init) (unsigned long, unsigned long); | ||
29 | extern void (*mach_hd_setup)(char *, int *); | ||
30 | extern long mach_max_dma_address; | ||
31 | extern void (*mach_heartbeat) (int); | ||
32 | extern void (*mach_l2_flush) (int); | ||
33 | extern void (*mach_beep) (unsigned int, unsigned int); | ||
34 | |||
35 | #endif /* _M68K_MACHDEP_H */ | ||
diff --git a/arch/m68k/include/asm/machdep_no.h b/arch/m68k/include/asm/machdep_no.h deleted file mode 100644 index de9f47a51cc2..000000000000 --- a/arch/m68k/include/asm/machdep_no.h +++ /dev/null | |||
@@ -1,26 +0,0 @@ | |||
1 | #ifndef _M68KNOMMU_MACHDEP_H | ||
2 | #define _M68KNOMMU_MACHDEP_H | ||
3 | |||
4 | #include <linux/interrupt.h> | ||
5 | |||
6 | /* Hardware clock functions */ | ||
7 | extern void hw_timer_init(void); | ||
8 | extern unsigned long hw_timer_offset(void); | ||
9 | |||
10 | extern irqreturn_t arch_timer_interrupt(int irq, void *dummy); | ||
11 | |||
12 | /* Machine dependent time handling */ | ||
13 | extern void (*mach_gettod)(int *year, int *mon, int *day, int *hour, | ||
14 | int *min, int *sec); | ||
15 | extern int (*mach_set_clock_mmss)(unsigned long); | ||
16 | |||
17 | /* machine dependent power off functions */ | ||
18 | extern void (*mach_reset)( void ); | ||
19 | extern void (*mach_halt)( void ); | ||
20 | extern void (*mach_power_off)( void ); | ||
21 | |||
22 | extern void config_BSP(char *command, int len); | ||
23 | |||
24 | extern void do_IRQ(int irq, struct pt_regs *fp); | ||
25 | |||
26 | #endif /* _M68KNOMMU_MACHDEP_H */ | ||
diff --git a/arch/m68k/include/asm/page.h b/arch/m68k/include/asm/page.h index f2b4480cc98a..dfebb7c1e379 100644 --- a/arch/m68k/include/asm/page.h +++ b/arch/m68k/include/asm/page.h | |||
@@ -1,5 +1,49 @@ | |||
1 | #ifdef __uClinux__ | 1 | #ifndef _M68K_PAGE_H |
2 | #include "page_no.h" | 2 | #define _M68K_PAGE_H |
3 | |||
4 | #include <linux/const.h> | ||
5 | #include <asm/setup.h> | ||
6 | #include <asm/page_offset.h> | ||
7 | |||
8 | /* PAGE_SHIFT determines the page size */ | ||
9 | #ifndef CONFIG_SUN3 | ||
10 | #define PAGE_SHIFT (12) | ||
3 | #else | 11 | #else |
12 | #define PAGE_SHIFT (13) | ||
13 | #endif | ||
14 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) | ||
15 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
16 | #define PAGE_OFFSET (PAGE_OFFSET_RAW) | ||
17 | |||
18 | #ifndef __ASSEMBLY__ | ||
19 | |||
20 | /* | ||
21 | * These are used to make use of C type-checking.. | ||
22 | */ | ||
23 | typedef struct { unsigned long pte; } pte_t; | ||
24 | typedef struct { unsigned long pmd[16]; } pmd_t; | ||
25 | typedef struct { unsigned long pgd; } pgd_t; | ||
26 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
27 | typedef struct page *pgtable_t; | ||
28 | |||
29 | #define pte_val(x) ((x).pte) | ||
30 | #define pmd_val(x) ((&x)->pmd[0]) | ||
31 | #define pgd_val(x) ((x).pgd) | ||
32 | #define pgprot_val(x) ((x).pgprot) | ||
33 | |||
34 | #define __pte(x) ((pte_t) { (x) } ) | ||
35 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
36 | #define __pgd(x) ((pgd_t) { (x) } ) | ||
37 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
38 | |||
39 | #endif /* !__ASSEMBLY__ */ | ||
40 | |||
41 | #ifdef CONFIG_MMU | ||
4 | #include "page_mm.h" | 42 | #include "page_mm.h" |
43 | #else | ||
44 | #include "page_no.h" | ||
5 | #endif | 45 | #endif |
46 | |||
47 | #include <asm-generic/getorder.h> | ||
48 | |||
49 | #endif /* _M68K_PAGE_H */ | ||
diff --git a/arch/m68k/include/asm/page_mm.h b/arch/m68k/include/asm/page_mm.h index d009f3ea39ab..31d5570d6567 100644 --- a/arch/m68k/include/asm/page_mm.h +++ b/arch/m68k/include/asm/page_mm.h | |||
@@ -1,29 +1,9 @@ | |||
1 | #ifndef _M68K_PAGE_H | 1 | #ifndef _M68K_PAGE_MM_H |
2 | #define _M68K_PAGE_H | 2 | #define _M68K_PAGE_MM_H |
3 | |||
4 | #include <linux/const.h> | ||
5 | |||
6 | /* PAGE_SHIFT determines the page size */ | ||
7 | #ifndef CONFIG_SUN3 | ||
8 | #define PAGE_SHIFT (12) | ||
9 | #else | ||
10 | #define PAGE_SHIFT (13) | ||
11 | #endif | ||
12 | #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) | ||
13 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
14 | |||
15 | #include <asm/setup.h> | ||
16 | |||
17 | #if PAGE_SHIFT < 13 | ||
18 | #define THREAD_SIZE (8192) | ||
19 | #else | ||
20 | #define THREAD_SIZE PAGE_SIZE | ||
21 | #endif | ||
22 | 3 | ||
23 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
24 | 5 | ||
25 | #include <linux/compiler.h> | 6 | #include <linux/compiler.h> |
26 | |||
27 | #include <asm/module.h> | 7 | #include <asm/module.h> |
28 | 8 | ||
29 | #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) | 9 | #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) |
@@ -84,33 +64,6 @@ static inline void clear_page(void *page) | |||
84 | flush_dcache_page(page); \ | 64 | flush_dcache_page(page); \ |
85 | } while (0) | 65 | } while (0) |
86 | 66 | ||
87 | /* | ||
88 | * These are used to make use of C type-checking.. | ||
89 | */ | ||
90 | typedef struct { unsigned long pte; } pte_t; | ||
91 | typedef struct { unsigned long pmd[16]; } pmd_t; | ||
92 | typedef struct { unsigned long pgd; } pgd_t; | ||
93 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
94 | typedef struct page *pgtable_t; | ||
95 | |||
96 | #define pte_val(x) ((x).pte) | ||
97 | #define pmd_val(x) ((&x)->pmd[0]) | ||
98 | #define pgd_val(x) ((x).pgd) | ||
99 | #define pgprot_val(x) ((x).pgprot) | ||
100 | |||
101 | #define __pte(x) ((pte_t) { (x) } ) | ||
102 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
103 | #define __pgd(x) ((pgd_t) { (x) } ) | ||
104 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
105 | |||
106 | #endif /* !__ASSEMBLY__ */ | ||
107 | |||
108 | #include <asm/page_offset.h> | ||
109 | |||
110 | #define PAGE_OFFSET (PAGE_OFFSET_RAW) | ||
111 | |||
112 | #ifndef __ASSEMBLY__ | ||
113 | |||
114 | extern unsigned long m68k_memoffset; | 67 | extern unsigned long m68k_memoffset; |
115 | 68 | ||
116 | #ifndef CONFIG_SUN3 | 69 | #ifndef CONFIG_SUN3 |
@@ -127,7 +80,7 @@ static inline unsigned long ___pa(void *vaddr) | |||
127 | : "0" (vaddr), "i" (m68k_fixup_memoffset)); | 80 | : "0" (vaddr), "i" (m68k_fixup_memoffset)); |
128 | return paddr; | 81 | return paddr; |
129 | } | 82 | } |
130 | #define __pa(vaddr) ___pa((void *)(vaddr)) | 83 | #define __pa(vaddr) ___pa((void *)(long)(vaddr)) |
131 | static inline void *__va(unsigned long paddr) | 84 | static inline void *__va(unsigned long paddr) |
132 | { | 85 | { |
133 | void *vaddr; | 86 | void *vaddr; |
@@ -223,6 +176,4 @@ static inline __attribute_const__ int __virt_to_node_shift(void) | |||
223 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ | 176 | #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ |
224 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | 177 | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
225 | 178 | ||
226 | #include <asm-generic/getorder.h> | 179 | #endif /* _M68K_PAGE_MM_H */ |
227 | |||
228 | #endif /* _M68K_PAGE_H */ | ||
diff --git a/arch/m68k/include/asm/page_no.h b/arch/m68k/include/asm/page_no.h index 8029a33e03c3..90595721185f 100644 --- a/arch/m68k/include/asm/page_no.h +++ b/arch/m68k/include/asm/page_no.h | |||
@@ -1,18 +1,11 @@ | |||
1 | #ifndef _M68KNOMMU_PAGE_H | 1 | #ifndef _M68K_PAGE_NO_H |
2 | #define _M68KNOMMU_PAGE_H | 2 | #define _M68K_PAGE_NO_H |
3 | |||
4 | #include <linux/const.h> | ||
5 | |||
6 | /* PAGE_SHIFT determines the page size */ | ||
7 | |||
8 | #define PAGE_SHIFT (12) | ||
9 | #define PAGE_SIZE (_AC(1,UL) << PAGE_SHIFT) | ||
10 | #define PAGE_MASK (~(PAGE_SIZE-1)) | ||
11 | |||
12 | #include <asm/setup.h> | ||
13 | 3 | ||
14 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
15 | 5 | ||
6 | extern unsigned long memory_start; | ||
7 | extern unsigned long memory_end; | ||
8 | |||
16 | #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) | 9 | #define get_user_page(vaddr) __get_free_page(GFP_KERNEL) |
17 | #define free_user_page(page, addr) free_page(addr) | 10 | #define free_user_page(page, addr) free_page(addr) |
18 | 11 | ||
@@ -26,36 +19,6 @@ | |||
26 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) | 19 | alloc_page_vma(GFP_HIGHUSER | __GFP_ZERO | movableflags, vma, vaddr) |
27 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE | 20 | #define __HAVE_ARCH_ALLOC_ZEROED_USER_HIGHPAGE |
28 | 21 | ||
29 | /* | ||
30 | * These are used to make use of C type-checking.. | ||
31 | */ | ||
32 | typedef struct { unsigned long pte; } pte_t; | ||
33 | typedef struct { unsigned long pmd[16]; } pmd_t; | ||
34 | typedef struct { unsigned long pgd; } pgd_t; | ||
35 | typedef struct { unsigned long pgprot; } pgprot_t; | ||
36 | typedef struct page *pgtable_t; | ||
37 | |||
38 | #define pte_val(x) ((x).pte) | ||
39 | #define pmd_val(x) ((&x)->pmd[0]) | ||
40 | #define pgd_val(x) ((x).pgd) | ||
41 | #define pgprot_val(x) ((x).pgprot) | ||
42 | |||
43 | #define __pte(x) ((pte_t) { (x) } ) | ||
44 | #define __pmd(x) ((pmd_t) { (x) } ) | ||
45 | #define __pgd(x) ((pgd_t) { (x) } ) | ||
46 | #define __pgprot(x) ((pgprot_t) { (x) } ) | ||
47 | |||
48 | extern unsigned long memory_start; | ||
49 | extern unsigned long memory_end; | ||
50 | |||
51 | #endif /* !__ASSEMBLY__ */ | ||
52 | |||
53 | #include <asm/page_offset.h> | ||
54 | |||
55 | #define PAGE_OFFSET (PAGE_OFFSET_RAW) | ||
56 | |||
57 | #ifndef __ASSEMBLY__ | ||
58 | |||
59 | #define __pa(vaddr) ((unsigned long)(vaddr)) | 22 | #define __pa(vaddr) ((unsigned long)(vaddr)) |
60 | #define __va(paddr) ((void *)(paddr)) | 23 | #define __va(paddr) ((void *)(paddr)) |
61 | 24 | ||
@@ -74,6 +37,4 @@ extern unsigned long memory_end; | |||
74 | 37 | ||
75 | #endif /* __ASSEMBLY__ */ | 38 | #endif /* __ASSEMBLY__ */ |
76 | 39 | ||
77 | #include <asm-generic/getorder.h> | 40 | #endif /* _M68K_PAGE_NO_H */ |
78 | |||
79 | #endif /* _M68KNOMMU_PAGE_H */ | ||
diff --git a/arch/m68k/include/asm/string.h b/arch/m68k/include/asm/string.h index 2c356f90f171..2936dda938d7 100644 --- a/arch/m68k/include/asm/string.h +++ b/arch/m68k/include/asm/string.h | |||
@@ -1,5 +1,133 @@ | |||
1 | #ifdef __uClinux__ | 1 | #ifndef _M68K_STRING_H_ |
2 | #include "string_no.h" | 2 | #define _M68K_STRING_H_ |
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/compiler.h> | ||
6 | |||
7 | static inline size_t __kernel_strlen(const char *s) | ||
8 | { | ||
9 | const char *sc; | ||
10 | |||
11 | for (sc = s; *sc++; ) | ||
12 | ; | ||
13 | return sc - s - 1; | ||
14 | } | ||
15 | |||
16 | static inline char *__kernel_strcpy(char *dest, const char *src) | ||
17 | { | ||
18 | char *xdest = dest; | ||
19 | |||
20 | asm volatile ("\n" | ||
21 | "1: move.b (%1)+,(%0)+\n" | ||
22 | " jne 1b" | ||
23 | : "+a" (dest), "+a" (src) | ||
24 | : : "memory"); | ||
25 | return xdest; | ||
26 | } | ||
27 | |||
28 | #ifndef __IN_STRING_C | ||
29 | |||
30 | #define __HAVE_ARCH_STRLEN | ||
31 | #define strlen(s) (__builtin_constant_p(s) ? \ | ||
32 | __builtin_strlen(s) : \ | ||
33 | __kernel_strlen(s)) | ||
34 | |||
35 | #define __HAVE_ARCH_STRNLEN | ||
36 | static inline size_t strnlen(const char *s, size_t count) | ||
37 | { | ||
38 | const char *sc = s; | ||
39 | |||
40 | asm volatile ("\n" | ||
41 | "1: subq.l #1,%1\n" | ||
42 | " jcs 2f\n" | ||
43 | " tst.b (%0)+\n" | ||
44 | " jne 1b\n" | ||
45 | " subq.l #1,%0\n" | ||
46 | "2:" | ||
47 | : "+a" (sc), "+d" (count)); | ||
48 | return sc - s; | ||
49 | } | ||
50 | |||
51 | #define __HAVE_ARCH_STRCPY | ||
52 | #if __GNUC__ >= 4 | ||
53 | #define strcpy(d, s) (__builtin_constant_p(s) && \ | ||
54 | __builtin_strlen(s) <= 32 ? \ | ||
55 | __builtin_strcpy(d, s) : \ | ||
56 | __kernel_strcpy(d, s)) | ||
3 | #else | 57 | #else |
4 | #include "string_mm.h" | 58 | #define strcpy(d, s) __kernel_strcpy(d, s) |
5 | #endif | 59 | #endif |
60 | |||
61 | #define __HAVE_ARCH_STRNCPY | ||
62 | static inline char *strncpy(char *dest, const char *src, size_t n) | ||
63 | { | ||
64 | char *xdest = dest; | ||
65 | |||
66 | asm volatile ("\n" | ||
67 | " jra 2f\n" | ||
68 | "1: move.b (%1),(%0)+\n" | ||
69 | " jeq 2f\n" | ||
70 | " addq.l #1,%1\n" | ||
71 | "2: subq.l #1,%2\n" | ||
72 | " jcc 1b\n" | ||
73 | : "+a" (dest), "+a" (src), "+d" (n) | ||
74 | : : "memory"); | ||
75 | return xdest; | ||
76 | } | ||
77 | |||
78 | #define __HAVE_ARCH_STRCAT | ||
79 | #define strcat(d, s) ({ \ | ||
80 | char *__d = (d); \ | ||
81 | strcpy(__d + strlen(__d), (s)); \ | ||
82 | }) | ||
83 | |||
84 | #define __HAVE_ARCH_STRCHR | ||
85 | static inline char *strchr(const char *s, int c) | ||
86 | { | ||
87 | char sc, ch = c; | ||
88 | |||
89 | for (; (sc = *s++) != ch; ) { | ||
90 | if (!sc) | ||
91 | return NULL; | ||
92 | } | ||
93 | return (char *)s - 1; | ||
94 | } | ||
95 | |||
96 | #ifndef CONFIG_COLDFIRE | ||
97 | #define __HAVE_ARCH_STRCMP | ||
98 | static inline int strcmp(const char *cs, const char *ct) | ||
99 | { | ||
100 | char res; | ||
101 | |||
102 | asm ("\n" | ||
103 | "1: move.b (%0)+,%2\n" /* get *cs */ | ||
104 | " cmp.b (%1)+,%2\n" /* compare a byte */ | ||
105 | " jne 2f\n" /* not equal, break out */ | ||
106 | " tst.b %2\n" /* at end of cs? */ | ||
107 | " jne 1b\n" /* no, keep going */ | ||
108 | " jra 3f\n" /* strings are equal */ | ||
109 | "2: sub.b -(%1),%2\n" /* *cs - *ct */ | ||
110 | "3:" | ||
111 | : "+a" (cs), "+a" (ct), "=d" (res)); | ||
112 | return res; | ||
113 | } | ||
114 | |||
115 | #define __HAVE_ARCH_MEMMOVE | ||
116 | extern void *memmove(void *, const void *, __kernel_size_t); | ||
117 | |||
118 | #define __HAVE_ARCH_MEMCMP | ||
119 | extern int memcmp(const void *, const void *, __kernel_size_t); | ||
120 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) | ||
121 | #endif /* CONFIG_COLDFIRE */ | ||
122 | |||
123 | #define __HAVE_ARCH_MEMSET | ||
124 | extern void *memset(void *, int, __kernel_size_t); | ||
125 | #define memset(d, c, n) __builtin_memset(d, c, n) | ||
126 | |||
127 | #define __HAVE_ARCH_MEMCPY | ||
128 | extern void *memcpy(void *, const void *, __kernel_size_t); | ||
129 | #define memcpy(d, s, n) __builtin_memcpy(d, s, n) | ||
130 | |||
131 | #endif | ||
132 | |||
133 | #endif /* _M68K_STRING_H_ */ | ||
diff --git a/arch/m68k/include/asm/string_mm.h b/arch/m68k/include/asm/string_mm.h deleted file mode 100644 index 2eb7df1e0f5d..000000000000 --- a/arch/m68k/include/asm/string_mm.h +++ /dev/null | |||
@@ -1,131 +0,0 @@ | |||
1 | #ifndef _M68K_STRING_H_ | ||
2 | #define _M68K_STRING_H_ | ||
3 | |||
4 | #include <linux/types.h> | ||
5 | #include <linux/compiler.h> | ||
6 | |||
7 | static inline size_t __kernel_strlen(const char *s) | ||
8 | { | ||
9 | const char *sc; | ||
10 | |||
11 | for (sc = s; *sc++; ) | ||
12 | ; | ||
13 | return sc - s - 1; | ||
14 | } | ||
15 | |||
16 | static inline char *__kernel_strcpy(char *dest, const char *src) | ||
17 | { | ||
18 | char *xdest = dest; | ||
19 | |||
20 | asm volatile ("\n" | ||
21 | "1: move.b (%1)+,(%0)+\n" | ||
22 | " jne 1b" | ||
23 | : "+a" (dest), "+a" (src) | ||
24 | : : "memory"); | ||
25 | return xdest; | ||
26 | } | ||
27 | |||
28 | #ifndef __IN_STRING_C | ||
29 | |||
30 | #define __HAVE_ARCH_STRLEN | ||
31 | #define strlen(s) (__builtin_constant_p(s) ? \ | ||
32 | __builtin_strlen(s) : \ | ||
33 | __kernel_strlen(s)) | ||
34 | |||
35 | #define __HAVE_ARCH_STRNLEN | ||
36 | static inline size_t strnlen(const char *s, size_t count) | ||
37 | { | ||
38 | const char *sc = s; | ||
39 | |||
40 | asm volatile ("\n" | ||
41 | "1: subq.l #1,%1\n" | ||
42 | " jcs 2f\n" | ||
43 | " tst.b (%0)+\n" | ||
44 | " jne 1b\n" | ||
45 | " subq.l #1,%0\n" | ||
46 | "2:" | ||
47 | : "+a" (sc), "+d" (count)); | ||
48 | return sc - s; | ||
49 | } | ||
50 | |||
51 | #define __HAVE_ARCH_STRCPY | ||
52 | #if __GNUC__ >= 4 | ||
53 | #define strcpy(d, s) (__builtin_constant_p(s) && \ | ||
54 | __builtin_strlen(s) <= 32 ? \ | ||
55 | __builtin_strcpy(d, s) : \ | ||
56 | __kernel_strcpy(d, s)) | ||
57 | #else | ||
58 | #define strcpy(d, s) __kernel_strcpy(d, s) | ||
59 | #endif | ||
60 | |||
61 | #define __HAVE_ARCH_STRNCPY | ||
62 | static inline char *strncpy(char *dest, const char *src, size_t n) | ||
63 | { | ||
64 | char *xdest = dest; | ||
65 | |||
66 | asm volatile ("\n" | ||
67 | " jra 2f\n" | ||
68 | "1: move.b (%1),(%0)+\n" | ||
69 | " jeq 2f\n" | ||
70 | " addq.l #1,%1\n" | ||
71 | "2: subq.l #1,%2\n" | ||
72 | " jcc 1b\n" | ||
73 | : "+a" (dest), "+a" (src), "+d" (n) | ||
74 | : : "memory"); | ||
75 | return xdest; | ||
76 | } | ||
77 | |||
78 | #define __HAVE_ARCH_STRCAT | ||
79 | #define strcat(d, s) ({ \ | ||
80 | char *__d = (d); \ | ||
81 | strcpy(__d + strlen(__d), (s)); \ | ||
82 | }) | ||
83 | |||
84 | #define __HAVE_ARCH_STRCHR | ||
85 | static inline char *strchr(const char *s, int c) | ||
86 | { | ||
87 | char sc, ch = c; | ||
88 | |||
89 | for (; (sc = *s++) != ch; ) { | ||
90 | if (!sc) | ||
91 | return NULL; | ||
92 | } | ||
93 | return (char *)s - 1; | ||
94 | } | ||
95 | |||
96 | #define __HAVE_ARCH_STRCMP | ||
97 | static inline int strcmp(const char *cs, const char *ct) | ||
98 | { | ||
99 | char res; | ||
100 | |||
101 | asm ("\n" | ||
102 | "1: move.b (%0)+,%2\n" /* get *cs */ | ||
103 | " cmp.b (%1)+,%2\n" /* compare a byte */ | ||
104 | " jne 2f\n" /* not equal, break out */ | ||
105 | " tst.b %2\n" /* at end of cs? */ | ||
106 | " jne 1b\n" /* no, keep going */ | ||
107 | " jra 3f\n" /* strings are equal */ | ||
108 | "2: sub.b -(%1),%2\n" /* *cs - *ct */ | ||
109 | "3:" | ||
110 | : "+a" (cs), "+a" (ct), "=d" (res)); | ||
111 | return res; | ||
112 | } | ||
113 | |||
114 | #define __HAVE_ARCH_MEMSET | ||
115 | extern void *memset(void *, int, __kernel_size_t); | ||
116 | #define memset(d, c, n) __builtin_memset(d, c, n) | ||
117 | |||
118 | #define __HAVE_ARCH_MEMCPY | ||
119 | extern void *memcpy(void *, const void *, __kernel_size_t); | ||
120 | #define memcpy(d, s, n) __builtin_memcpy(d, s, n) | ||
121 | |||
122 | #define __HAVE_ARCH_MEMMOVE | ||
123 | extern void *memmove(void *, const void *, __kernel_size_t); | ||
124 | |||
125 | #define __HAVE_ARCH_MEMCMP | ||
126 | extern int memcmp(const void *, const void *, __kernel_size_t); | ||
127 | #define memcmp(d, s, n) __builtin_memcmp(d, s, n) | ||
128 | |||
129 | #endif | ||
130 | |||
131 | #endif /* _M68K_STRING_H_ */ | ||
diff --git a/arch/m68k/include/asm/string_no.h b/arch/m68k/include/asm/string_no.h deleted file mode 100644 index af09e17000fc..000000000000 --- a/arch/m68k/include/asm/string_no.h +++ /dev/null | |||
@@ -1,126 +0,0 @@ | |||
1 | #ifndef _M68KNOMMU_STRING_H_ | ||
2 | #define _M68KNOMMU_STRING_H_ | ||
3 | |||
4 | #ifdef __KERNEL__ /* only set these up for kernel code */ | ||
5 | |||
6 | #include <asm/setup.h> | ||
7 | #include <asm/page.h> | ||
8 | |||
9 | #define __HAVE_ARCH_STRCPY | ||
10 | static inline char * strcpy(char * dest,const char *src) | ||
11 | { | ||
12 | char *xdest = dest; | ||
13 | |||
14 | __asm__ __volatile__ | ||
15 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
16 | "jne 1b" | ||
17 | : "=a" (dest), "=a" (src) | ||
18 | : "0" (dest), "1" (src) : "memory"); | ||
19 | return xdest; | ||
20 | } | ||
21 | |||
22 | #define __HAVE_ARCH_STRNCPY | ||
23 | static inline char * strncpy(char *dest, const char *src, size_t n) | ||
24 | { | ||
25 | char *xdest = dest; | ||
26 | |||
27 | if (n == 0) | ||
28 | return xdest; | ||
29 | |||
30 | __asm__ __volatile__ | ||
31 | ("1:\tmoveb %1@+,%0@+\n\t" | ||
32 | "jeq 2f\n\t" | ||
33 | "subql #1,%2\n\t" | ||
34 | "jne 1b\n\t" | ||
35 | "2:" | ||
36 | : "=a" (dest), "=a" (src), "=d" (n) | ||
37 | : "0" (dest), "1" (src), "2" (n) | ||
38 | : "memory"); | ||
39 | return xdest; | ||
40 | } | ||
41 | |||
42 | |||
43 | #ifndef CONFIG_COLDFIRE | ||
44 | |||
45 | #define __HAVE_ARCH_STRCMP | ||
46 | static inline int strcmp(const char * cs,const char * ct) | ||
47 | { | ||
48 | char __res; | ||
49 | |||
50 | __asm__ | ||
51 | ("1:\tmoveb %0@+,%2\n\t" /* get *cs */ | ||
52 | "cmpb %1@+,%2\n\t" /* compare a byte */ | ||
53 | "jne 2f\n\t" /* not equal, break out */ | ||
54 | "tstb %2\n\t" /* at end of cs? */ | ||
55 | "jne 1b\n\t" /* no, keep going */ | ||
56 | "jra 3f\n\t" /* strings are equal */ | ||
57 | "2:\tsubb %1@-,%2\n\t" /* *cs - *ct */ | ||
58 | "3:" | ||
59 | : "=a" (cs), "=a" (ct), "=d" (__res) | ||
60 | : "0" (cs), "1" (ct)); | ||
61 | |||
62 | return __res; | ||
63 | } | ||
64 | |||
65 | #define __HAVE_ARCH_STRNCMP | ||
66 | static inline int strncmp(const char * cs,const char * ct,size_t count) | ||
67 | { | ||
68 | char __res; | ||
69 | |||
70 | if (!count) | ||
71 | return 0; | ||
72 | __asm__ | ||
73 | ("1:\tmovb %0@+,%3\n\t" /* get *cs */ | ||
74 | "cmpb %1@+,%3\n\t" /* compare a byte */ | ||
75 | "jne 3f\n\t" /* not equal, break out */ | ||
76 | "tstb %3\n\t" /* at end of cs? */ | ||
77 | "jeq 4f\n\t" /* yes, all done */ | ||
78 | "subql #1,%2\n\t" /* no, adjust count */ | ||
79 | "jne 1b\n\t" /* more to do, keep going */ | ||
80 | "2:\tmoveq #0,%3\n\t" /* strings are equal */ | ||
81 | "jra 4f\n\t" | ||
82 | "3:\tsubb %1@-,%3\n\t" /* *cs - *ct */ | ||
83 | "4:" | ||
84 | : "=a" (cs), "=a" (ct), "=d" (count), "=d" (__res) | ||
85 | : "0" (cs), "1" (ct), "2" (count)); | ||
86 | return __res; | ||
87 | } | ||
88 | |||
89 | #endif /* CONFIG_COLDFIRE */ | ||
90 | |||
91 | #define __HAVE_ARCH_MEMSET | ||
92 | extern void * memset(void * s, int c, size_t count); | ||
93 | |||
94 | #define __HAVE_ARCH_MEMCPY | ||
95 | extern void * memcpy(void *d, const void *s, size_t count); | ||
96 | |||
97 | #else /* KERNEL */ | ||
98 | |||
99 | /* | ||
100 | * let user libraries deal with these, | ||
101 | * IMHO the kernel has no place defining these functions for user apps | ||
102 | */ | ||
103 | |||
104 | #define __HAVE_ARCH_STRCPY 1 | ||
105 | #define __HAVE_ARCH_STRNCPY 1 | ||
106 | #define __HAVE_ARCH_STRCAT 1 | ||
107 | #define __HAVE_ARCH_STRNCAT 1 | ||
108 | #define __HAVE_ARCH_STRCMP 1 | ||
109 | #define __HAVE_ARCH_STRNCMP 1 | ||
110 | #define __HAVE_ARCH_STRNICMP 1 | ||
111 | #define __HAVE_ARCH_STRCHR 1 | ||
112 | #define __HAVE_ARCH_STRRCHR 1 | ||
113 | #define __HAVE_ARCH_STRSTR 1 | ||
114 | #define __HAVE_ARCH_STRLEN 1 | ||
115 | #define __HAVE_ARCH_STRNLEN 1 | ||
116 | #define __HAVE_ARCH_MEMSET 1 | ||
117 | #define __HAVE_ARCH_MEMCPY 1 | ||
118 | #define __HAVE_ARCH_MEMMOVE 1 | ||
119 | #define __HAVE_ARCH_MEMSCAN 1 | ||
120 | #define __HAVE_ARCH_MEMCMP 1 | ||
121 | #define __HAVE_ARCH_MEMCHR 1 | ||
122 | #define __HAVE_ARCH_STRTOK 1 | ||
123 | |||
124 | #endif /* KERNEL */ | ||
125 | |||
126 | #endif /* _M68K_STRING_H_ */ | ||
diff --git a/arch/m68k/include/asm/system_mm.h b/arch/m68k/include/asm/system_mm.h index 12053c44cccf..47b01f4726bc 100644 --- a/arch/m68k/include/asm/system_mm.h +++ b/arch/m68k/include/asm/system_mm.h | |||
@@ -182,9 +182,7 @@ static inline unsigned long __cmpxchg(volatile void *p, unsigned long old, | |||
182 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ | 182 | ((__typeof__(*(ptr)))__cmpxchg_local_generic((ptr), (unsigned long)(o),\ |
183 | (unsigned long)(n), sizeof(*(ptr)))) | 183 | (unsigned long)(n), sizeof(*(ptr)))) |
184 | 184 | ||
185 | #ifndef CONFIG_SMP | ||
186 | #include <asm-generic/cmpxchg.h> | 185 | #include <asm-generic/cmpxchg.h> |
187 | #endif | ||
188 | 186 | ||
189 | #endif | 187 | #endif |
190 | 188 | ||
diff --git a/arch/m68k/include/asm/system_no.h b/arch/m68k/include/asm/system_no.h index 20126c09794e..6fe9f93bc3ff 100644 --- a/arch/m68k/include/asm/system_no.h +++ b/arch/m68k/include/asm/system_no.h | |||
@@ -59,17 +59,10 @@ asmlinkage void resume(void); | |||
59 | #define wmb() asm volatile ("" : : :"memory") | 59 | #define wmb() asm volatile ("" : : :"memory") |
60 | #define set_mb(var, value) ({ (var) = (value); wmb(); }) | 60 | #define set_mb(var, value) ({ (var) = (value); wmb(); }) |
61 | 61 | ||
62 | #ifdef CONFIG_SMP | ||
63 | #define smp_mb() mb() | ||
64 | #define smp_rmb() rmb() | ||
65 | #define smp_wmb() wmb() | ||
66 | #define smp_read_barrier_depends() read_barrier_depends() | ||
67 | #else | ||
68 | #define smp_mb() barrier() | 62 | #define smp_mb() barrier() |
69 | #define smp_rmb() barrier() | 63 | #define smp_rmb() barrier() |
70 | #define smp_wmb() barrier() | 64 | #define smp_wmb() barrier() |
71 | #define smp_read_barrier_depends() do { } while(0) | 65 | #define smp_read_barrier_depends() do { } while(0) |
72 | #endif | ||
73 | 66 | ||
74 | #define read_barrier_depends() ((void)0) | 67 | #define read_barrier_depends() ((void)0) |
75 | 68 | ||
@@ -152,9 +145,7 @@ static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int siz | |||
152 | (unsigned long)(n), sizeof(*(ptr)))) | 145 | (unsigned long)(n), sizeof(*(ptr)))) |
153 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) | 146 | #define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n)) |
154 | 147 | ||
155 | #ifndef CONFIG_SMP | ||
156 | #include <asm-generic/cmpxchg.h> | 148 | #include <asm-generic/cmpxchg.h> |
157 | #endif | ||
158 | 149 | ||
159 | #define arch_align_stack(x) (x) | 150 | #define arch_align_stack(x) (x) |
160 | 151 | ||
diff --git a/arch/m68k/include/asm/thread_info.h b/arch/m68k/include/asm/thread_info.h index f31a3f42b7b3..1da5d53a00eb 100644 --- a/arch/m68k/include/asm/thread_info.h +++ b/arch/m68k/include/asm/thread_info.h | |||
@@ -1,5 +1,108 @@ | |||
1 | #ifdef __uClinux__ | 1 | #ifndef _ASM_M68K_THREAD_INFO_H |
2 | #include "thread_info_no.h" | 2 | #define _ASM_M68K_THREAD_INFO_H |
3 | |||
4 | #include <asm/types.h> | ||
5 | #include <asm/page.h> | ||
6 | |||
7 | /* | ||
8 | * On machines with 4k pages we default to an 8k thread size, though we | ||
9 | * allow a 4k with config option. Any other machine page size then | ||
10 | * the thread size must match the page size (which is 8k and larger here). | ||
11 | */ | ||
12 | #if PAGE_SHIFT < 13 | ||
13 | #ifdef CONFIG_4KSTACKS | ||
14 | #define THREAD_SIZE 4096 | ||
3 | #else | 15 | #else |
4 | #include "thread_info_mm.h" | 16 | #define THREAD_SIZE 8192 |
5 | #endif | 17 | #endif |
18 | #else | ||
19 | #define THREAD_SIZE PAGE_SIZE | ||
20 | #endif | ||
21 | #define THREAD_SIZE_ORDER ((THREAD_SIZE / PAGE_SIZE) - 1) | ||
22 | |||
23 | #ifndef __ASSEMBLY__ | ||
24 | |||
25 | struct thread_info { | ||
26 | struct task_struct *task; /* main task structure */ | ||
27 | unsigned long flags; | ||
28 | struct exec_domain *exec_domain; /* execution domain */ | ||
29 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | ||
30 | __u32 cpu; /* should always be 0 on m68k */ | ||
31 | unsigned long tp_value; /* thread pointer */ | ||
32 | struct restart_block restart_block; | ||
33 | }; | ||
34 | #endif /* __ASSEMBLY__ */ | ||
35 | |||
36 | #define PREEMPT_ACTIVE 0x4000000 | ||
37 | |||
38 | #define INIT_THREAD_INFO(tsk) \ | ||
39 | { \ | ||
40 | .task = &tsk, \ | ||
41 | .exec_domain = &default_exec_domain, \ | ||
42 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
43 | .restart_block = { \ | ||
44 | .fn = do_no_restart_syscall, \ | ||
45 | }, \ | ||
46 | } | ||
47 | |||
48 | #define init_stack (init_thread_union.stack) | ||
49 | |||
50 | #ifdef CONFIG_MMU | ||
51 | |||
52 | #ifndef __ASSEMBLY__ | ||
53 | #include <asm/current.h> | ||
54 | #endif | ||
55 | |||
56 | #ifdef ASM_OFFSETS_C | ||
57 | #define task_thread_info(tsk) ((struct thread_info *) NULL) | ||
58 | #else | ||
59 | #include <asm/asm-offsets.h> | ||
60 | #define task_thread_info(tsk) ((struct thread_info *)((char *)tsk+TASK_TINFO)) | ||
61 | #endif | ||
62 | |||
63 | #define init_thread_info (init_task.thread.info) | ||
64 | #define task_stack_page(tsk) ((tsk)->stack) | ||
65 | #define current_thread_info() task_thread_info(current) | ||
66 | |||
67 | #define __HAVE_THREAD_FUNCTIONS | ||
68 | |||
69 | #define setup_thread_stack(p, org) ({ \ | ||
70 | *(struct task_struct **)(p)->stack = (p); \ | ||
71 | task_thread_info(p)->task = (p); \ | ||
72 | }) | ||
73 | |||
74 | #define end_of_stack(p) ((unsigned long *)(p)->stack + 1) | ||
75 | |||
76 | #else /* !CONFIG_MMU */ | ||
77 | |||
78 | #ifndef __ASSEMBLY__ | ||
79 | /* how to get the thread information struct from C */ | ||
80 | static inline struct thread_info *current_thread_info(void) | ||
81 | { | ||
82 | struct thread_info *ti; | ||
83 | __asm__( | ||
84 | "move.l %%sp, %0 \n\t" | ||
85 | "and.l %1, %0" | ||
86 | : "=&d"(ti) | ||
87 | : "di" (~(THREAD_SIZE-1)) | ||
88 | ); | ||
89 | return ti; | ||
90 | } | ||
91 | #endif | ||
92 | |||
93 | #define init_thread_info (init_thread_union.thread_info) | ||
94 | |||
95 | #endif /* CONFIG_MMU */ | ||
96 | |||
97 | /* entry.S relies on these definitions! | ||
98 | * bits 0-7 are tested at every exception exit | ||
99 | * bits 8-15 are also tested at syscall exit | ||
100 | */ | ||
101 | #define TIF_SIGPENDING 6 /* signal pending */ | ||
102 | #define TIF_NEED_RESCHED 7 /* rescheduling necessary */ | ||
103 | #define TIF_DELAYED_TRACE 14 /* single step a syscall */ | ||
104 | #define TIF_SYSCALL_TRACE 15 /* syscall trace active */ | ||
105 | #define TIF_MEMDIE 16 /* is terminating due to OOM killer */ | ||
106 | #define TIF_FREEZE 17 /* thread is freezing for suspend */ | ||
107 | |||
108 | #endif /* _ASM_M68K_THREAD_INFO_H */ | ||
diff --git a/arch/m68k/include/asm/thread_info_mm.h b/arch/m68k/include/asm/thread_info_mm.h deleted file mode 100644 index 3bf31dc51b12..000000000000 --- a/arch/m68k/include/asm/thread_info_mm.h +++ /dev/null | |||
@@ -1,71 +0,0 @@ | |||
1 | #ifndef _ASM_M68K_THREAD_INFO_H | ||
2 | #define _ASM_M68K_THREAD_INFO_H | ||
3 | |||
4 | #ifndef ASM_OFFSETS_C | ||
5 | #include <asm/asm-offsets.h> | ||
6 | #endif | ||
7 | #include <asm/types.h> | ||
8 | #include <asm/page.h> | ||
9 | |||
10 | #ifndef __ASSEMBLY__ | ||
11 | #include <asm/current.h> | ||
12 | |||
13 | struct thread_info { | ||
14 | struct task_struct *task; /* main task structure */ | ||
15 | unsigned long flags; | ||
16 | struct exec_domain *exec_domain; /* execution domain */ | ||
17 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | ||
18 | __u32 cpu; /* should always be 0 on m68k */ | ||
19 | unsigned long tp_value; /* thread pointer */ | ||
20 | struct restart_block restart_block; | ||
21 | }; | ||
22 | #endif /* __ASSEMBLY__ */ | ||
23 | |||
24 | #define PREEMPT_ACTIVE 0x4000000 | ||
25 | |||
26 | #define INIT_THREAD_INFO(tsk) \ | ||
27 | { \ | ||
28 | .task = &tsk, \ | ||
29 | .exec_domain = &default_exec_domain, \ | ||
30 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
31 | .restart_block = { \ | ||
32 | .fn = do_no_restart_syscall, \ | ||
33 | }, \ | ||
34 | } | ||
35 | |||
36 | /* THREAD_SIZE should be 8k, so handle differently for 4k and 8k machines */ | ||
37 | #define THREAD_SIZE_ORDER (13 - PAGE_SHIFT) | ||
38 | |||
39 | #define init_thread_info (init_task.thread.info) | ||
40 | #define init_stack (init_thread_union.stack) | ||
41 | |||
42 | #ifdef ASM_OFFSETS_C | ||
43 | #define task_thread_info(tsk) ((struct thread_info *) NULL) | ||
44 | #else | ||
45 | #define task_thread_info(tsk) ((struct thread_info *)((char *)tsk+TASK_TINFO)) | ||
46 | #endif | ||
47 | |||
48 | #define task_stack_page(tsk) ((tsk)->stack) | ||
49 | #define current_thread_info() task_thread_info(current) | ||
50 | |||
51 | #define __HAVE_THREAD_FUNCTIONS | ||
52 | |||
53 | #define setup_thread_stack(p, org) ({ \ | ||
54 | *(struct task_struct **)(p)->stack = (p); \ | ||
55 | task_thread_info(p)->task = (p); \ | ||
56 | }) | ||
57 | |||
58 | #define end_of_stack(p) ((unsigned long *)(p)->stack + 1) | ||
59 | |||
60 | /* entry.S relies on these definitions! | ||
61 | * bits 0-7 are tested at every exception exit | ||
62 | * bits 8-15 are also tested at syscall exit | ||
63 | */ | ||
64 | #define TIF_SIGPENDING 6 /* signal pending */ | ||
65 | #define TIF_NEED_RESCHED 7 /* rescheduling necessary */ | ||
66 | #define TIF_DELAYED_TRACE 14 /* single step a syscall */ | ||
67 | #define TIF_SYSCALL_TRACE 15 /* syscall trace active */ | ||
68 | #define TIF_MEMDIE 16 /* is terminating due to OOM killer */ | ||
69 | #define TIF_FREEZE 17 /* thread is freezing for suspend */ | ||
70 | |||
71 | #endif /* _ASM_M68K_THREAD_INFO_H */ | ||
diff --git a/arch/m68k/include/asm/thread_info_no.h b/arch/m68k/include/asm/thread_info_no.h deleted file mode 100644 index 51f354b672e6..000000000000 --- a/arch/m68k/include/asm/thread_info_no.h +++ /dev/null | |||
@@ -1,102 +0,0 @@ | |||
1 | /* thread_info.h: m68knommu low-level thread information | ||
2 | * adapted from the i386 and PPC versions by Greg Ungerer (gerg@snapgear.com) | ||
3 | * | ||
4 | * Copyright (C) 2002 David Howells (dhowells@redhat.com) | ||
5 | * - Incorporating suggestions made by Linus Torvalds and Dave Miller | ||
6 | */ | ||
7 | |||
8 | #ifndef _ASM_THREAD_INFO_H | ||
9 | #define _ASM_THREAD_INFO_H | ||
10 | |||
11 | #include <asm/page.h> | ||
12 | |||
13 | #ifdef __KERNEL__ | ||
14 | |||
15 | /* | ||
16 | * Size of kernel stack for each process. This must be a power of 2... | ||
17 | */ | ||
18 | #ifdef CONFIG_4KSTACKS | ||
19 | #define THREAD_SIZE_ORDER (0) | ||
20 | #else | ||
21 | #define THREAD_SIZE_ORDER (1) | ||
22 | #endif | ||
23 | |||
24 | /* | ||
25 | * for asm files, THREAD_SIZE is now generated by asm-offsets.c | ||
26 | */ | ||
27 | #define THREAD_SIZE (PAGE_SIZE<<THREAD_SIZE_ORDER) | ||
28 | |||
29 | #ifndef __ASSEMBLY__ | ||
30 | |||
31 | /* | ||
32 | * low level task data. | ||
33 | */ | ||
34 | struct thread_info { | ||
35 | struct task_struct *task; /* main task structure */ | ||
36 | struct exec_domain *exec_domain; /* execution domain */ | ||
37 | unsigned long flags; /* low level flags */ | ||
38 | int cpu; /* cpu we're on */ | ||
39 | int preempt_count; /* 0 => preemptable, <0 => BUG */ | ||
40 | unsigned long tp_value; /* thread pointer */ | ||
41 | struct restart_block restart_block; | ||
42 | }; | ||
43 | |||
44 | /* | ||
45 | * macros/functions for gaining access to the thread information structure | ||
46 | */ | ||
47 | #define INIT_THREAD_INFO(tsk) \ | ||
48 | { \ | ||
49 | .task = &tsk, \ | ||
50 | .exec_domain = &default_exec_domain, \ | ||
51 | .flags = 0, \ | ||
52 | .cpu = 0, \ | ||
53 | .preempt_count = INIT_PREEMPT_COUNT, \ | ||
54 | .restart_block = { \ | ||
55 | .fn = do_no_restart_syscall, \ | ||
56 | }, \ | ||
57 | } | ||
58 | |||
59 | #define init_thread_info (init_thread_union.thread_info) | ||
60 | #define init_stack (init_thread_union.stack) | ||
61 | |||
62 | |||
63 | /* how to get the thread information struct from C */ | ||
64 | static inline struct thread_info *current_thread_info(void) | ||
65 | { | ||
66 | struct thread_info *ti; | ||
67 | __asm__( | ||
68 | "move.l %%sp, %0 \n\t" | ||
69 | "and.l %1, %0" | ||
70 | : "=&d"(ti) | ||
71 | : "di" (~(THREAD_SIZE-1)) | ||
72 | ); | ||
73 | return ti; | ||
74 | } | ||
75 | |||
76 | #endif /* __ASSEMBLY__ */ | ||
77 | |||
78 | #define PREEMPT_ACTIVE 0x4000000 | ||
79 | |||
80 | /* | ||
81 | * thread information flag bit numbers | ||
82 | */ | ||
83 | #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ | ||
84 | #define TIF_SIGPENDING 1 /* signal pending */ | ||
85 | #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ | ||
86 | #define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling | ||
87 | TIF_NEED_RESCHED */ | ||
88 | #define TIF_MEMDIE 4 /* is terminating due to OOM killer */ | ||
89 | #define TIF_FREEZE 16 /* is freezing for suspend */ | ||
90 | |||
91 | /* as above, but as bit values */ | ||
92 | #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) | ||
93 | #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) | ||
94 | #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) | ||
95 | #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) | ||
96 | #define _TIF_FREEZE (1<<TIF_FREEZE) | ||
97 | |||
98 | #define _TIF_WORK_MASK 0x0000FFFE /* work to do on interrupt/exception return */ | ||
99 | |||
100 | #endif /* __KERNEL__ */ | ||
101 | |||
102 | #endif /* _ASM_THREAD_INFO_H */ | ||
diff --git a/arch/m68k/include/asm/traps.h b/arch/m68k/include/asm/traps.h index 3011ec0f5365..0bffb17d5db7 100644 --- a/arch/m68k/include/asm/traps.h +++ b/arch/m68k/include/asm/traps.h | |||
@@ -1,5 +1,272 @@ | |||
1 | #ifdef __uClinux__ | 1 | /* |
2 | #include "traps_no.h" | 2 | * linux/include/asm/traps.h |
3 | #else | 3 | * |
4 | #include "traps_mm.h" | 4 | * Copyright (C) 1993 Hamish Macdonald |
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file COPYING in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifndef _M68K_TRAPS_H | ||
12 | #define _M68K_TRAPS_H | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | ||
15 | |||
16 | #include <linux/linkage.h> | ||
17 | #include <asm/ptrace.h> | ||
18 | |||
19 | typedef void (*e_vector)(void); | ||
20 | extern e_vector vectors[]; | ||
21 | |||
22 | asmlinkage void auto_inthandler(void); | ||
23 | asmlinkage void user_inthandler(void); | ||
24 | asmlinkage void bad_inthandler(void); | ||
25 | extern void init_vectors(void); | ||
26 | |||
5 | #endif | 27 | #endif |
28 | |||
29 | #define VEC_RESETSP (0) | ||
30 | #define VEC_RESETPC (1) | ||
31 | #define VEC_BUSERR (2) | ||
32 | #define VEC_ADDRERR (3) | ||
33 | #define VEC_ILLEGAL (4) | ||
34 | #define VEC_ZERODIV (5) | ||
35 | #define VEC_CHK (6) | ||
36 | #define VEC_TRAP (7) | ||
37 | #define VEC_PRIV (8) | ||
38 | #define VEC_TRACE (9) | ||
39 | #define VEC_LINE10 (10) | ||
40 | #define VEC_LINE11 (11) | ||
41 | #define VEC_RESV12 (12) | ||
42 | #define VEC_COPROC (13) | ||
43 | #define VEC_FORMAT (14) | ||
44 | #define VEC_UNINT (15) | ||
45 | #define VEC_RESV16 (16) | ||
46 | #define VEC_RESV17 (17) | ||
47 | #define VEC_RESV18 (18) | ||
48 | #define VEC_RESV19 (19) | ||
49 | #define VEC_RESV20 (20) | ||
50 | #define VEC_RESV21 (21) | ||
51 | #define VEC_RESV22 (22) | ||
52 | #define VEC_RESV23 (23) | ||
53 | #define VEC_SPUR (24) | ||
54 | #define VEC_INT1 (25) | ||
55 | #define VEC_INT2 (26) | ||
56 | #define VEC_INT3 (27) | ||
57 | #define VEC_INT4 (28) | ||
58 | #define VEC_INT5 (29) | ||
59 | #define VEC_INT6 (30) | ||
60 | #define VEC_INT7 (31) | ||
61 | #define VEC_SYS (32) | ||
62 | #define VEC_TRAP1 (33) | ||
63 | #define VEC_TRAP2 (34) | ||
64 | #define VEC_TRAP3 (35) | ||
65 | #define VEC_TRAP4 (36) | ||
66 | #define VEC_TRAP5 (37) | ||
67 | #define VEC_TRAP6 (38) | ||
68 | #define VEC_TRAP7 (39) | ||
69 | #define VEC_TRAP8 (40) | ||
70 | #define VEC_TRAP9 (41) | ||
71 | #define VEC_TRAP10 (42) | ||
72 | #define VEC_TRAP11 (43) | ||
73 | #define VEC_TRAP12 (44) | ||
74 | #define VEC_TRAP13 (45) | ||
75 | #define VEC_TRAP14 (46) | ||
76 | #define VEC_TRAP15 (47) | ||
77 | #define VEC_FPBRUC (48) | ||
78 | #define VEC_FPIR (49) | ||
79 | #define VEC_FPDIVZ (50) | ||
80 | #define VEC_FPUNDER (51) | ||
81 | #define VEC_FPOE (52) | ||
82 | #define VEC_FPOVER (53) | ||
83 | #define VEC_FPNAN (54) | ||
84 | #define VEC_FPUNSUP (55) | ||
85 | #define VEC_MMUCFG (56) | ||
86 | #define VEC_MMUILL (57) | ||
87 | #define VEC_MMUACC (58) | ||
88 | #define VEC_RESV59 (59) | ||
89 | #define VEC_UNIMPEA (60) | ||
90 | #define VEC_UNIMPII (61) | ||
91 | #define VEC_RESV62 (62) | ||
92 | #define VEC_RESV63 (63) | ||
93 | #define VEC_USER (64) | ||
94 | |||
95 | #define VECOFF(vec) ((vec)<<2) | ||
96 | |||
97 | #ifndef __ASSEMBLY__ | ||
98 | |||
99 | /* Status register bits */ | ||
100 | #define PS_T (0x8000) | ||
101 | #define PS_S (0x2000) | ||
102 | #define PS_M (0x1000) | ||
103 | #define PS_C (0x0001) | ||
104 | |||
105 | /* bits for 68020/68030 special status word */ | ||
106 | |||
107 | #define FC (0x8000) | ||
108 | #define FB (0x4000) | ||
109 | #define RC (0x2000) | ||
110 | #define RB (0x1000) | ||
111 | #define DF (0x0100) | ||
112 | #define RM (0x0080) | ||
113 | #define RW (0x0040) | ||
114 | #define SZ (0x0030) | ||
115 | #define DFC (0x0007) | ||
116 | |||
117 | /* bits for 68030 MMU status register (mmusr,psr) */ | ||
118 | |||
119 | #define MMU_B (0x8000) /* bus error */ | ||
120 | #define MMU_L (0x4000) /* limit violation */ | ||
121 | #define MMU_S (0x2000) /* supervisor violation */ | ||
122 | #define MMU_WP (0x0800) /* write-protected */ | ||
123 | #define MMU_I (0x0400) /* invalid descriptor */ | ||
124 | #define MMU_M (0x0200) /* ATC entry modified */ | ||
125 | #define MMU_T (0x0040) /* transparent translation */ | ||
126 | #define MMU_NUM (0x0007) /* number of levels traversed */ | ||
127 | |||
128 | |||
129 | /* bits for 68040 special status word */ | ||
130 | #define CP_040 (0x8000) | ||
131 | #define CU_040 (0x4000) | ||
132 | #define CT_040 (0x2000) | ||
133 | #define CM_040 (0x1000) | ||
134 | #define MA_040 (0x0800) | ||
135 | #define ATC_040 (0x0400) | ||
136 | #define LK_040 (0x0200) | ||
137 | #define RW_040 (0x0100) | ||
138 | #define SIZ_040 (0x0060) | ||
139 | #define TT_040 (0x0018) | ||
140 | #define TM_040 (0x0007) | ||
141 | |||
142 | /* bits for 68040 write back status word */ | ||
143 | #define WBV_040 (0x80) | ||
144 | #define WBSIZ_040 (0x60) | ||
145 | #define WBBYT_040 (0x20) | ||
146 | #define WBWRD_040 (0x40) | ||
147 | #define WBLNG_040 (0x00) | ||
148 | #define WBTT_040 (0x18) | ||
149 | #define WBTM_040 (0x07) | ||
150 | |||
151 | /* bus access size codes */ | ||
152 | #define BA_SIZE_BYTE (0x20) | ||
153 | #define BA_SIZE_WORD (0x40) | ||
154 | #define BA_SIZE_LONG (0x00) | ||
155 | #define BA_SIZE_LINE (0x60) | ||
156 | |||
157 | /* bus access transfer type codes */ | ||
158 | #define BA_TT_MOVE16 (0x08) | ||
159 | |||
160 | /* bits for 68040 MMU status register (mmusr) */ | ||
161 | #define MMU_B_040 (0x0800) | ||
162 | #define MMU_G_040 (0x0400) | ||
163 | #define MMU_S_040 (0x0080) | ||
164 | #define MMU_CM_040 (0x0060) | ||
165 | #define MMU_M_040 (0x0010) | ||
166 | #define MMU_WP_040 (0x0004) | ||
167 | #define MMU_T_040 (0x0002) | ||
168 | #define MMU_R_040 (0x0001) | ||
169 | |||
170 | /* bits in the 68060 fault status long word (FSLW) */ | ||
171 | #define MMU060_MA (0x08000000) /* misaligned */ | ||
172 | #define MMU060_LK (0x02000000) /* locked transfer */ | ||
173 | #define MMU060_RW (0x01800000) /* read/write */ | ||
174 | # define MMU060_RW_W (0x00800000) /* write */ | ||
175 | # define MMU060_RW_R (0x01000000) /* read */ | ||
176 | # define MMU060_RW_RMW (0x01800000) /* read/modify/write */ | ||
177 | # define MMU060_W (0x00800000) /* general write, includes rmw */ | ||
178 | #define MMU060_SIZ (0x00600000) /* transfer size */ | ||
179 | #define MMU060_TT (0x00180000) /* transfer type (TT) bits */ | ||
180 | #define MMU060_TM (0x00070000) /* transfer modifier (TM) bits */ | ||
181 | #define MMU060_IO (0x00008000) /* instruction or operand */ | ||
182 | #define MMU060_PBE (0x00004000) /* push buffer bus error */ | ||
183 | #define MMU060_SBE (0x00002000) /* store buffer bus error */ | ||
184 | #define MMU060_PTA (0x00001000) /* pointer A fault */ | ||
185 | #define MMU060_PTB (0x00000800) /* pointer B fault */ | ||
186 | #define MMU060_IL (0x00000400) /* double indirect descr fault */ | ||
187 | #define MMU060_PF (0x00000200) /* page fault (invalid descr) */ | ||
188 | #define MMU060_SP (0x00000100) /* supervisor protection */ | ||
189 | #define MMU060_WP (0x00000080) /* write protection */ | ||
190 | #define MMU060_TWE (0x00000040) /* bus error on table search */ | ||
191 | #define MMU060_RE (0x00000020) /* bus error on read */ | ||
192 | #define MMU060_WE (0x00000010) /* bus error on write */ | ||
193 | #define MMU060_TTR (0x00000008) /* error caused by TTR translation */ | ||
194 | #define MMU060_BPE (0x00000004) /* branch prediction error */ | ||
195 | #define MMU060_SEE (0x00000001) /* software emulated error */ | ||
196 | |||
197 | /* cases of missing or invalid descriptors */ | ||
198 | #define MMU060_DESC_ERR (MMU060_PTA | MMU060_PTB | \ | ||
199 | MMU060_IL | MMU060_PF) | ||
200 | /* bits that indicate real errors */ | ||
201 | #define MMU060_ERR_BITS (MMU060_PBE | MMU060_SBE | MMU060_DESC_ERR | MMU060_SP | \ | ||
202 | MMU060_WP | MMU060_TWE | MMU060_RE | MMU060_WE) | ||
203 | |||
204 | /* structure for stack frames */ | ||
205 | |||
206 | struct frame { | ||
207 | struct pt_regs ptregs; | ||
208 | union { | ||
209 | struct { | ||
210 | unsigned long iaddr; /* instruction address */ | ||
211 | } fmt2; | ||
212 | struct { | ||
213 | unsigned long effaddr; /* effective address */ | ||
214 | } fmt3; | ||
215 | struct { | ||
216 | unsigned long effaddr; /* effective address */ | ||
217 | unsigned long pc; /* pc of faulted instr */ | ||
218 | } fmt4; | ||
219 | struct { | ||
220 | unsigned long effaddr; /* effective address */ | ||
221 | unsigned short ssw; /* special status word */ | ||
222 | unsigned short wb3s; /* write back 3 status */ | ||
223 | unsigned short wb2s; /* write back 2 status */ | ||
224 | unsigned short wb1s; /* write back 1 status */ | ||
225 | unsigned long faddr; /* fault address */ | ||
226 | unsigned long wb3a; /* write back 3 address */ | ||
227 | unsigned long wb3d; /* write back 3 data */ | ||
228 | unsigned long wb2a; /* write back 2 address */ | ||
229 | unsigned long wb2d; /* write back 2 data */ | ||
230 | unsigned long wb1a; /* write back 1 address */ | ||
231 | unsigned long wb1dpd0; /* write back 1 data/push data 0*/ | ||
232 | unsigned long pd1; /* push data 1*/ | ||
233 | unsigned long pd2; /* push data 2*/ | ||
234 | unsigned long pd3; /* push data 3*/ | ||
235 | } fmt7; | ||
236 | struct { | ||
237 | unsigned long iaddr; /* instruction address */ | ||
238 | unsigned short int1[4]; /* internal registers */ | ||
239 | } fmt9; | ||
240 | struct { | ||
241 | unsigned short int1; | ||
242 | unsigned short ssw; /* special status word */ | ||
243 | unsigned short isc; /* instruction stage c */ | ||
244 | unsigned short isb; /* instruction stage b */ | ||
245 | unsigned long daddr; /* data cycle fault address */ | ||
246 | unsigned short int2[2]; | ||
247 | unsigned long dobuf; /* data cycle output buffer */ | ||
248 | unsigned short int3[2]; | ||
249 | } fmta; | ||
250 | struct { | ||
251 | unsigned short int1; | ||
252 | unsigned short ssw; /* special status word */ | ||
253 | unsigned short isc; /* instruction stage c */ | ||
254 | unsigned short isb; /* instruction stage b */ | ||
255 | unsigned long daddr; /* data cycle fault address */ | ||
256 | unsigned short int2[2]; | ||
257 | unsigned long dobuf; /* data cycle output buffer */ | ||
258 | unsigned short int3[4]; | ||
259 | unsigned long baddr; /* stage B address */ | ||
260 | unsigned short int4[2]; | ||
261 | unsigned long dibuf; /* data cycle input buffer */ | ||
262 | unsigned short int5[3]; | ||
263 | unsigned ver : 4; /* stack frame version # */ | ||
264 | unsigned int6:12; | ||
265 | unsigned short int7[18]; | ||
266 | } fmtb; | ||
267 | } un; | ||
268 | }; | ||
269 | |||
270 | #endif /* __ASSEMBLY__ */ | ||
271 | |||
272 | #endif /* _M68K_TRAPS_H */ | ||
diff --git a/arch/m68k/include/asm/traps_mm.h b/arch/m68k/include/asm/traps_mm.h deleted file mode 100644 index 8caef25624c7..000000000000 --- a/arch/m68k/include/asm/traps_mm.h +++ /dev/null | |||
@@ -1,272 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/asm/traps.h | ||
3 | * | ||
4 | * Copyright (C) 1993 Hamish Macdonald | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file COPYING in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifndef _M68K_TRAPS_H | ||
12 | #define _M68K_TRAPS_H | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | ||
15 | |||
16 | #include <linux/linkage.h> | ||
17 | #include <asm/ptrace.h> | ||
18 | |||
19 | typedef void (*e_vector)(void); | ||
20 | |||
21 | asmlinkage void auto_inthandler(void); | ||
22 | asmlinkage void user_inthandler(void); | ||
23 | asmlinkage void bad_inthandler(void); | ||
24 | |||
25 | extern e_vector vectors[]; | ||
26 | |||
27 | #endif | ||
28 | |||
29 | #define VEC_RESETSP (0) | ||
30 | #define VEC_RESETPC (1) | ||
31 | #define VEC_BUSERR (2) | ||
32 | #define VEC_ADDRERR (3) | ||
33 | #define VEC_ILLEGAL (4) | ||
34 | #define VEC_ZERODIV (5) | ||
35 | #define VEC_CHK (6) | ||
36 | #define VEC_TRAP (7) | ||
37 | #define VEC_PRIV (8) | ||
38 | #define VEC_TRACE (9) | ||
39 | #define VEC_LINE10 (10) | ||
40 | #define VEC_LINE11 (11) | ||
41 | #define VEC_RESV12 (12) | ||
42 | #define VEC_COPROC (13) | ||
43 | #define VEC_FORMAT (14) | ||
44 | #define VEC_UNINT (15) | ||
45 | #define VEC_RESV16 (16) | ||
46 | #define VEC_RESV17 (17) | ||
47 | #define VEC_RESV18 (18) | ||
48 | #define VEC_RESV19 (19) | ||
49 | #define VEC_RESV20 (20) | ||
50 | #define VEC_RESV21 (21) | ||
51 | #define VEC_RESV22 (22) | ||
52 | #define VEC_RESV23 (23) | ||
53 | #define VEC_SPUR (24) | ||
54 | #define VEC_INT1 (25) | ||
55 | #define VEC_INT2 (26) | ||
56 | #define VEC_INT3 (27) | ||
57 | #define VEC_INT4 (28) | ||
58 | #define VEC_INT5 (29) | ||
59 | #define VEC_INT6 (30) | ||
60 | #define VEC_INT7 (31) | ||
61 | #define VEC_SYS (32) | ||
62 | #define VEC_TRAP1 (33) | ||
63 | #define VEC_TRAP2 (34) | ||
64 | #define VEC_TRAP3 (35) | ||
65 | #define VEC_TRAP4 (36) | ||
66 | #define VEC_TRAP5 (37) | ||
67 | #define VEC_TRAP6 (38) | ||
68 | #define VEC_TRAP7 (39) | ||
69 | #define VEC_TRAP8 (40) | ||
70 | #define VEC_TRAP9 (41) | ||
71 | #define VEC_TRAP10 (42) | ||
72 | #define VEC_TRAP11 (43) | ||
73 | #define VEC_TRAP12 (44) | ||
74 | #define VEC_TRAP13 (45) | ||
75 | #define VEC_TRAP14 (46) | ||
76 | #define VEC_TRAP15 (47) | ||
77 | #define VEC_FPBRUC (48) | ||
78 | #define VEC_FPIR (49) | ||
79 | #define VEC_FPDIVZ (50) | ||
80 | #define VEC_FPUNDER (51) | ||
81 | #define VEC_FPOE (52) | ||
82 | #define VEC_FPOVER (53) | ||
83 | #define VEC_FPNAN (54) | ||
84 | #define VEC_FPUNSUP (55) | ||
85 | #define VEC_MMUCFG (56) | ||
86 | #define VEC_MMUILL (57) | ||
87 | #define VEC_MMUACC (58) | ||
88 | #define VEC_RESV59 (59) | ||
89 | #define VEC_UNIMPEA (60) | ||
90 | #define VEC_UNIMPII (61) | ||
91 | #define VEC_RESV62 (62) | ||
92 | #define VEC_RESV63 (63) | ||
93 | #define VEC_USER (64) | ||
94 | |||
95 | #define VECOFF(vec) ((vec)<<2) | ||
96 | |||
97 | #ifndef __ASSEMBLY__ | ||
98 | |||
99 | /* Status register bits */ | ||
100 | #define PS_T (0x8000) | ||
101 | #define PS_S (0x2000) | ||
102 | #define PS_M (0x1000) | ||
103 | #define PS_C (0x0001) | ||
104 | |||
105 | /* bits for 68020/68030 special status word */ | ||
106 | |||
107 | #define FC (0x8000) | ||
108 | #define FB (0x4000) | ||
109 | #define RC (0x2000) | ||
110 | #define RB (0x1000) | ||
111 | #define DF (0x0100) | ||
112 | #define RM (0x0080) | ||
113 | #define RW (0x0040) | ||
114 | #define SZ (0x0030) | ||
115 | #define DFC (0x0007) | ||
116 | |||
117 | /* bits for 68030 MMU status register (mmusr,psr) */ | ||
118 | |||
119 | #define MMU_B (0x8000) /* bus error */ | ||
120 | #define MMU_L (0x4000) /* limit violation */ | ||
121 | #define MMU_S (0x2000) /* supervisor violation */ | ||
122 | #define MMU_WP (0x0800) /* write-protected */ | ||
123 | #define MMU_I (0x0400) /* invalid descriptor */ | ||
124 | #define MMU_M (0x0200) /* ATC entry modified */ | ||
125 | #define MMU_T (0x0040) /* transparent translation */ | ||
126 | #define MMU_NUM (0x0007) /* number of levels traversed */ | ||
127 | |||
128 | |||
129 | /* bits for 68040 special status word */ | ||
130 | #define CP_040 (0x8000) | ||
131 | #define CU_040 (0x4000) | ||
132 | #define CT_040 (0x2000) | ||
133 | #define CM_040 (0x1000) | ||
134 | #define MA_040 (0x0800) | ||
135 | #define ATC_040 (0x0400) | ||
136 | #define LK_040 (0x0200) | ||
137 | #define RW_040 (0x0100) | ||
138 | #define SIZ_040 (0x0060) | ||
139 | #define TT_040 (0x0018) | ||
140 | #define TM_040 (0x0007) | ||
141 | |||
142 | /* bits for 68040 write back status word */ | ||
143 | #define WBV_040 (0x80) | ||
144 | #define WBSIZ_040 (0x60) | ||
145 | #define WBBYT_040 (0x20) | ||
146 | #define WBWRD_040 (0x40) | ||
147 | #define WBLNG_040 (0x00) | ||
148 | #define WBTT_040 (0x18) | ||
149 | #define WBTM_040 (0x07) | ||
150 | |||
151 | /* bus access size codes */ | ||
152 | #define BA_SIZE_BYTE (0x20) | ||
153 | #define BA_SIZE_WORD (0x40) | ||
154 | #define BA_SIZE_LONG (0x00) | ||
155 | #define BA_SIZE_LINE (0x60) | ||
156 | |||
157 | /* bus access transfer type codes */ | ||
158 | #define BA_TT_MOVE16 (0x08) | ||
159 | |||
160 | /* bits for 68040 MMU status register (mmusr) */ | ||
161 | #define MMU_B_040 (0x0800) | ||
162 | #define MMU_G_040 (0x0400) | ||
163 | #define MMU_S_040 (0x0080) | ||
164 | #define MMU_CM_040 (0x0060) | ||
165 | #define MMU_M_040 (0x0010) | ||
166 | #define MMU_WP_040 (0x0004) | ||
167 | #define MMU_T_040 (0x0002) | ||
168 | #define MMU_R_040 (0x0001) | ||
169 | |||
170 | /* bits in the 68060 fault status long word (FSLW) */ | ||
171 | #define MMU060_MA (0x08000000) /* misaligned */ | ||
172 | #define MMU060_LK (0x02000000) /* locked transfer */ | ||
173 | #define MMU060_RW (0x01800000) /* read/write */ | ||
174 | # define MMU060_RW_W (0x00800000) /* write */ | ||
175 | # define MMU060_RW_R (0x01000000) /* read */ | ||
176 | # define MMU060_RW_RMW (0x01800000) /* read/modify/write */ | ||
177 | # define MMU060_W (0x00800000) /* general write, includes rmw */ | ||
178 | #define MMU060_SIZ (0x00600000) /* transfer size */ | ||
179 | #define MMU060_TT (0x00180000) /* transfer type (TT) bits */ | ||
180 | #define MMU060_TM (0x00070000) /* transfer modifier (TM) bits */ | ||
181 | #define MMU060_IO (0x00008000) /* instruction or operand */ | ||
182 | #define MMU060_PBE (0x00004000) /* push buffer bus error */ | ||
183 | #define MMU060_SBE (0x00002000) /* store buffer bus error */ | ||
184 | #define MMU060_PTA (0x00001000) /* pointer A fault */ | ||
185 | #define MMU060_PTB (0x00000800) /* pointer B fault */ | ||
186 | #define MMU060_IL (0x00000400) /* double indirect descr fault */ | ||
187 | #define MMU060_PF (0x00000200) /* page fault (invalid descr) */ | ||
188 | #define MMU060_SP (0x00000100) /* supervisor protection */ | ||
189 | #define MMU060_WP (0x00000080) /* write protection */ | ||
190 | #define MMU060_TWE (0x00000040) /* bus error on table search */ | ||
191 | #define MMU060_RE (0x00000020) /* bus error on read */ | ||
192 | #define MMU060_WE (0x00000010) /* bus error on write */ | ||
193 | #define MMU060_TTR (0x00000008) /* error caused by TTR translation */ | ||
194 | #define MMU060_BPE (0x00000004) /* branch prediction error */ | ||
195 | #define MMU060_SEE (0x00000001) /* software emulated error */ | ||
196 | |||
197 | /* cases of missing or invalid descriptors */ | ||
198 | #define MMU060_DESC_ERR (MMU060_PTA | MMU060_PTB | \ | ||
199 | MMU060_IL | MMU060_PF) | ||
200 | /* bits that indicate real errors */ | ||
201 | #define MMU060_ERR_BITS (MMU060_PBE | MMU060_SBE | MMU060_DESC_ERR | MMU060_SP | \ | ||
202 | MMU060_WP | MMU060_TWE | MMU060_RE | MMU060_WE) | ||
203 | |||
204 | /* structure for stack frames */ | ||
205 | |||
206 | struct frame { | ||
207 | struct pt_regs ptregs; | ||
208 | union { | ||
209 | struct { | ||
210 | unsigned long iaddr; /* instruction address */ | ||
211 | } fmt2; | ||
212 | struct { | ||
213 | unsigned long effaddr; /* effective address */ | ||
214 | } fmt3; | ||
215 | struct { | ||
216 | unsigned long effaddr; /* effective address */ | ||
217 | unsigned long pc; /* pc of faulted instr */ | ||
218 | } fmt4; | ||
219 | struct { | ||
220 | unsigned long effaddr; /* effective address */ | ||
221 | unsigned short ssw; /* special status word */ | ||
222 | unsigned short wb3s; /* write back 3 status */ | ||
223 | unsigned short wb2s; /* write back 2 status */ | ||
224 | unsigned short wb1s; /* write back 1 status */ | ||
225 | unsigned long faddr; /* fault address */ | ||
226 | unsigned long wb3a; /* write back 3 address */ | ||
227 | unsigned long wb3d; /* write back 3 data */ | ||
228 | unsigned long wb2a; /* write back 2 address */ | ||
229 | unsigned long wb2d; /* write back 2 data */ | ||
230 | unsigned long wb1a; /* write back 1 address */ | ||
231 | unsigned long wb1dpd0; /* write back 1 data/push data 0*/ | ||
232 | unsigned long pd1; /* push data 1*/ | ||
233 | unsigned long pd2; /* push data 2*/ | ||
234 | unsigned long pd3; /* push data 3*/ | ||
235 | } fmt7; | ||
236 | struct { | ||
237 | unsigned long iaddr; /* instruction address */ | ||
238 | unsigned short int1[4]; /* internal registers */ | ||
239 | } fmt9; | ||
240 | struct { | ||
241 | unsigned short int1; | ||
242 | unsigned short ssw; /* special status word */ | ||
243 | unsigned short isc; /* instruction stage c */ | ||
244 | unsigned short isb; /* instruction stage b */ | ||
245 | unsigned long daddr; /* data cycle fault address */ | ||
246 | unsigned short int2[2]; | ||
247 | unsigned long dobuf; /* data cycle output buffer */ | ||
248 | unsigned short int3[2]; | ||
249 | } fmta; | ||
250 | struct { | ||
251 | unsigned short int1; | ||
252 | unsigned short ssw; /* special status word */ | ||
253 | unsigned short isc; /* instruction stage c */ | ||
254 | unsigned short isb; /* instruction stage b */ | ||
255 | unsigned long daddr; /* data cycle fault address */ | ||
256 | unsigned short int2[2]; | ||
257 | unsigned long dobuf; /* data cycle output buffer */ | ||
258 | unsigned short int3[4]; | ||
259 | unsigned long baddr; /* stage B address */ | ||
260 | unsigned short int4[2]; | ||
261 | unsigned long dibuf; /* data cycle input buffer */ | ||
262 | unsigned short int5[3]; | ||
263 | unsigned ver : 4; /* stack frame version # */ | ||
264 | unsigned int6:12; | ||
265 | unsigned short int7[18]; | ||
266 | } fmtb; | ||
267 | } un; | ||
268 | }; | ||
269 | |||
270 | #endif /* __ASSEMBLY__ */ | ||
271 | |||
272 | #endif /* _M68K_TRAPS_H */ | ||
diff --git a/arch/m68k/include/asm/traps_no.h b/arch/m68k/include/asm/traps_no.h deleted file mode 100644 index d0671e5f8e29..000000000000 --- a/arch/m68k/include/asm/traps_no.h +++ /dev/null | |||
@@ -1,154 +0,0 @@ | |||
1 | /* | ||
2 | * linux/include/asm/traps.h | ||
3 | * | ||
4 | * Copyright (C) 1993 Hamish Macdonald | ||
5 | * | ||
6 | * This file is subject to the terms and conditions of the GNU General Public | ||
7 | * License. See the file COPYING in the main directory of this archive | ||
8 | * for more details. | ||
9 | */ | ||
10 | |||
11 | #ifndef _M68KNOMMU_TRAPS_H | ||
12 | #define _M68KNOMMU_TRAPS_H | ||
13 | |||
14 | #ifndef __ASSEMBLY__ | ||
15 | |||
16 | typedef void (*e_vector)(void); | ||
17 | |||
18 | extern e_vector vectors[]; | ||
19 | extern void init_vectors(void); | ||
20 | extern void enable_vector(unsigned int irq); | ||
21 | extern void disable_vector(unsigned int irq); | ||
22 | extern void ack_vector(unsigned int irq); | ||
23 | |||
24 | #endif | ||
25 | |||
26 | #define VEC_BUSERR (2) | ||
27 | #define VEC_ADDRERR (3) | ||
28 | #define VEC_ILLEGAL (4) | ||
29 | #define VEC_ZERODIV (5) | ||
30 | #define VEC_CHK (6) | ||
31 | #define VEC_TRAP (7) | ||
32 | #define VEC_PRIV (8) | ||
33 | #define VEC_TRACE (9) | ||
34 | #define VEC_LINE10 (10) | ||
35 | #define VEC_LINE11 (11) | ||
36 | #define VEC_RESV1 (12) | ||
37 | #define VEC_COPROC (13) | ||
38 | #define VEC_FORMAT (14) | ||
39 | #define VEC_UNINT (15) | ||
40 | #define VEC_SPUR (24) | ||
41 | #define VEC_INT1 (25) | ||
42 | #define VEC_INT2 (26) | ||
43 | #define VEC_INT3 (27) | ||
44 | #define VEC_INT4 (28) | ||
45 | #define VEC_INT5 (29) | ||
46 | #define VEC_INT6 (30) | ||
47 | #define VEC_INT7 (31) | ||
48 | #define VEC_SYS (32) | ||
49 | #define VEC_TRAP1 (33) | ||
50 | #define VEC_TRAP2 (34) | ||
51 | #define VEC_TRAP3 (35) | ||
52 | #define VEC_TRAP4 (36) | ||
53 | #define VEC_TRAP5 (37) | ||
54 | #define VEC_TRAP6 (38) | ||
55 | #define VEC_TRAP7 (39) | ||
56 | #define VEC_TRAP8 (40) | ||
57 | #define VEC_TRAP9 (41) | ||
58 | #define VEC_TRAP10 (42) | ||
59 | #define VEC_TRAP11 (43) | ||
60 | #define VEC_TRAP12 (44) | ||
61 | #define VEC_TRAP13 (45) | ||
62 | #define VEC_TRAP14 (46) | ||
63 | #define VEC_TRAP15 (47) | ||
64 | #define VEC_FPBRUC (48) | ||
65 | #define VEC_FPIR (49) | ||
66 | #define VEC_FPDIVZ (50) | ||
67 | #define VEC_FPUNDER (51) | ||
68 | #define VEC_FPOE (52) | ||
69 | #define VEC_FPOVER (53) | ||
70 | #define VEC_FPNAN (54) | ||
71 | #define VEC_FPUNSUP (55) | ||
72 | #define VEC_UNIMPEA (60) | ||
73 | #define VEC_UNIMPII (61) | ||
74 | #define VEC_USER (64) | ||
75 | |||
76 | #define VECOFF(vec) ((vec)<<2) | ||
77 | |||
78 | #ifndef __ASSEMBLY__ | ||
79 | |||
80 | /* Status register bits */ | ||
81 | #define PS_T (0x8000) | ||
82 | #define PS_S (0x2000) | ||
83 | #define PS_M (0x1000) | ||
84 | #define PS_C (0x0001) | ||
85 | |||
86 | /* structure for stack frames */ | ||
87 | |||
88 | struct frame { | ||
89 | struct pt_regs ptregs; | ||
90 | union { | ||
91 | struct { | ||
92 | unsigned long iaddr; /* instruction address */ | ||
93 | } fmt2; | ||
94 | struct { | ||
95 | unsigned long effaddr; /* effective address */ | ||
96 | } fmt3; | ||
97 | struct { | ||
98 | unsigned long effaddr; /* effective address */ | ||
99 | unsigned long pc; /* pc of faulted instr */ | ||
100 | } fmt4; | ||
101 | struct { | ||
102 | unsigned long effaddr; /* effective address */ | ||
103 | unsigned short ssw; /* special status word */ | ||
104 | unsigned short wb3s; /* write back 3 status */ | ||
105 | unsigned short wb2s; /* write back 2 status */ | ||
106 | unsigned short wb1s; /* write back 1 status */ | ||
107 | unsigned long faddr; /* fault address */ | ||
108 | unsigned long wb3a; /* write back 3 address */ | ||
109 | unsigned long wb3d; /* write back 3 data */ | ||
110 | unsigned long wb2a; /* write back 2 address */ | ||
111 | unsigned long wb2d; /* write back 2 data */ | ||
112 | unsigned long wb1a; /* write back 1 address */ | ||
113 | unsigned long wb1dpd0; /* write back 1 data/push data 0*/ | ||
114 | unsigned long pd1; /* push data 1*/ | ||
115 | unsigned long pd2; /* push data 2*/ | ||
116 | unsigned long pd3; /* push data 3*/ | ||
117 | } fmt7; | ||
118 | struct { | ||
119 | unsigned long iaddr; /* instruction address */ | ||
120 | unsigned short int1[4]; /* internal registers */ | ||
121 | } fmt9; | ||
122 | struct { | ||
123 | unsigned short int1; | ||
124 | unsigned short ssw; /* special status word */ | ||
125 | unsigned short isc; /* instruction stage c */ | ||
126 | unsigned short isb; /* instruction stage b */ | ||
127 | unsigned long daddr; /* data cycle fault address */ | ||
128 | unsigned short int2[2]; | ||
129 | unsigned long dobuf; /* data cycle output buffer */ | ||
130 | unsigned short int3[2]; | ||
131 | } fmta; | ||
132 | struct { | ||
133 | unsigned short int1; | ||
134 | unsigned short ssw; /* special status word */ | ||
135 | unsigned short isc; /* instruction stage c */ | ||
136 | unsigned short isb; /* instruction stage b */ | ||
137 | unsigned long daddr; /* data cycle fault address */ | ||
138 | unsigned short int2[2]; | ||
139 | unsigned long dobuf; /* data cycle output buffer */ | ||
140 | unsigned short int3[4]; | ||
141 | unsigned long baddr; /* stage B address */ | ||
142 | unsigned short int4[2]; | ||
143 | unsigned long dibuf; /* data cycle input buffer */ | ||
144 | unsigned short int5[3]; | ||
145 | unsigned ver : 4; /* stack frame version # */ | ||
146 | unsigned int6:12; | ||
147 | unsigned short int7[18]; | ||
148 | } fmtb; | ||
149 | } un; | ||
150 | }; | ||
151 | |||
152 | #endif /* __ASSEMBLY__ */ | ||
153 | |||
154 | #endif /* _M68KNOMMU_TRAPS_H */ | ||
diff --git a/arch/m68k/kernel/setup.c b/arch/m68k/kernel/setup.c index 303730afb1c9..b3963ab3d149 100644 --- a/arch/m68k/kernel/setup.c +++ b/arch/m68k/kernel/setup.c | |||
@@ -359,12 +359,6 @@ void __init setup_arch(char **cmdline_p) | |||
359 | isa_type = ISA_TYPE_Q40; | 359 | isa_type = ISA_TYPE_Q40; |
360 | isa_sex = 0; | 360 | isa_sex = 0; |
361 | } | 361 | } |
362 | #ifdef CONFIG_GG2 | ||
363 | if (MACH_IS_AMIGA && AMIGAHW_PRESENT(GG2_ISA)) { | ||
364 | isa_type = ISA_TYPE_GG2; | ||
365 | isa_sex = 0; | ||
366 | } | ||
367 | #endif | ||
368 | #ifdef CONFIG_AMIGA_PCMCIA | 362 | #ifdef CONFIG_AMIGA_PCMCIA |
369 | if (MACH_IS_AMIGA && AMIGAHW_PRESENT(PCMCIA)) { | 363 | if (MACH_IS_AMIGA && AMIGAHW_PRESENT(PCMCIA)) { |
370 | isa_type = ISA_TYPE_AG; | 364 | isa_type = ISA_TYPE_AG; |
diff --git a/arch/m68k/kernel/sys_m68k.c b/arch/m68k/kernel/sys_m68k.c index 2f431ece7b5f..3db2e7f902aa 100644 --- a/arch/m68k/kernel/sys_m68k.c +++ b/arch/m68k/kernel/sys_m68k.c | |||
@@ -12,7 +12,6 @@ | |||
12 | #include <linux/mm.h> | 12 | #include <linux/mm.h> |
13 | #include <linux/fs.h> | 13 | #include <linux/fs.h> |
14 | #include <linux/smp.h> | 14 | #include <linux/smp.h> |
15 | #include <linux/smp_lock.h> | ||
16 | #include <linux/sem.h> | 15 | #include <linux/sem.h> |
17 | #include <linux/msg.h> | 16 | #include <linux/msg.h> |
18 | #include <linux/shm.h> | 17 | #include <linux/shm.h> |
@@ -377,7 +376,6 @@ sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | |||
377 | struct vm_area_struct *vma; | 376 | struct vm_area_struct *vma; |
378 | int ret = -EINVAL; | 377 | int ret = -EINVAL; |
379 | 378 | ||
380 | lock_kernel(); | ||
381 | if (scope < FLUSH_SCOPE_LINE || scope > FLUSH_SCOPE_ALL || | 379 | if (scope < FLUSH_SCOPE_LINE || scope > FLUSH_SCOPE_ALL || |
382 | cache & ~FLUSH_CACHE_BOTH) | 380 | cache & ~FLUSH_CACHE_BOTH) |
383 | goto out; | 381 | goto out; |
@@ -446,7 +444,6 @@ sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) | |||
446 | } | 444 | } |
447 | } | 445 | } |
448 | out: | 446 | out: |
449 | unlock_kernel(); | ||
450 | return ret; | 447 | return ret; |
451 | } | 448 | } |
452 | 449 | ||
diff --git a/arch/m68k/kernel/time.c b/arch/m68k/kernel/time.c index 4926b3856c15..06438dac08ff 100644 --- a/arch/m68k/kernel/time.c +++ b/arch/m68k/kernel/time.c | |||
@@ -42,9 +42,7 @@ static inline int set_rtc_mmss(unsigned long nowtime) | |||
42 | static irqreturn_t timer_interrupt(int irq, void *dummy) | 42 | static irqreturn_t timer_interrupt(int irq, void *dummy) |
43 | { | 43 | { |
44 | do_timer(1); | 44 | do_timer(1); |
45 | #ifndef CONFIG_SMP | ||
46 | update_process_times(user_mode(get_irq_regs())); | 45 | update_process_times(user_mode(get_irq_regs())); |
47 | #endif | ||
48 | profile_tick(CPU_PROFILING); | 46 | profile_tick(CPU_PROFILING); |
49 | 47 | ||
50 | #ifdef CONFIG_HEARTBEAT | 48 | #ifdef CONFIG_HEARTBEAT |
diff --git a/arch/m68k/sun3/sun3ints.c b/arch/m68k/sun3/sun3ints.c index ad90393a3361..2d9e21bd313a 100644 --- a/arch/m68k/sun3/sun3ints.c +++ b/arch/m68k/sun3/sun3ints.c | |||
@@ -67,9 +67,7 @@ static irqreturn_t sun3_int5(int irq, void *dev_id) | |||
67 | intersil_clear(); | 67 | intersil_clear(); |
68 | #endif | 68 | #endif |
69 | do_timer(1); | 69 | do_timer(1); |
70 | #ifndef CONFIG_SMP | ||
71 | update_process_times(user_mode(get_irq_regs())); | 70 | update_process_times(user_mode(get_irq_regs())); |
72 | #endif | ||
73 | if (!(kstat_cpu(0).irqs[irq] % 20)) | 71 | if (!(kstat_cpu(0).irqs[irq] % 20)) |
74 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); | 72 | sun3_leds(led_pattern[(kstat_cpu(0).irqs[irq] % 160) / 20]); |
75 | return IRQ_HANDLED; | 73 | return IRQ_HANDLED; |