1
2 #ifndef __M68K_ENTRY_H
3 #define __M68K_ENTRY_H
4
5 #include <asm/setup.h>
6 #include <asm/page.h>
7 #ifdef __ASSEMBLY__
8 #include <asm/thread_info.h>
9 #endif
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #if defined(MACH_ATARI_ONLY)
37
38 #define ALLOWINT (~0x500)
39 #else
40
41 #define ALLOWINT (~0x700)
42 #endif
43
44 #ifdef __ASSEMBLY__
45
46
47
48
49
50
51 #define SWITCH_STACK_SIZE (6*4+4)
52
53 #ifdef CONFIG_COLDFIRE
54 #ifdef CONFIG_COLDFIRE_SW_A7
55
56
57
58
59
60
61 .globl sw_usp
62 .globl sw_ksp
63
64 .macro SAVE_ALL_SYS
65 move #0x2700,%sr
66 btst #5,%sp@(2)
67 bnes 6f
68 movel %sp,sw_usp
69 addql #8,sw_usp
70 movel sw_ksp,%sp
71 subql #8,%sp
72 clrl %sp@-
73 movel %d0,%sp@-
74 movel %d0,%sp@-
75 lea %sp@(-32),%sp
76 moveml %d1-%d5/%a0-%a2,%sp@
77 movel sw_usp,%a0
78 movel %a0@-,%sp@(PT_OFF_PC)
79 movel %a0@-,%sp@(PT_OFF_FORMATVEC)
80 bra 7f
81 6:
82 clrl %sp@-
83 movel %d0,%sp@-
84 movel %d0,%sp@-
85 lea %sp@(-32),%sp
86 moveml %d1-%d5/%a0-%a2,%sp@
87 7:
88 .endm
89
90 .macro SAVE_ALL_INT
91 SAVE_ALL_SYS
92 moveq #-1,%d0
93 movel %d0,%sp@(PT_OFF_ORIG_D0)
94 .endm
95
96 .macro RESTORE_USER
97 move #0x2700,%sr
98 movel sw_usp,%a0
99 movel %sp@(PT_OFF_PC),%a0@-
100 movel %sp@(PT_OFF_FORMATVEC),%a0@-
101 moveml %sp@,%d1-%d5/%a0-%a2
102 lea %sp@(32),%sp
103 movel %sp@+,%d0
104 addql #4,%sp
105 addl %sp@+,%sp
106 addql #8,%sp
107 movel %sp,sw_ksp
108 subql #8,sw_usp
109 movel sw_usp,%sp
110 rte
111 .endm
112
113 .macro RDUSP
114 movel sw_usp,%a3
115 .endm
116
117 .macro WRUSP
118 movel %a3,sw_usp
119 .endm
120
121 #else
122
123
124
125
126 .macro SAVE_ALL_SYS
127 move #0x2700,%sr
128 clrl %sp@-
129 movel %d0,%sp@-
130 movel %d0,%sp@-
131 lea %sp@(-32),%sp
132 moveml %d1-%d5/%a0-%a2,%sp@
133 .endm
134
135 .macro SAVE_ALL_INT
136 move #0x2700,%sr
137 clrl %sp@-
138 pea -1:w
139 movel %d0,%sp@-
140 lea %sp@(-32),%sp
141 moveml %d1-%d5/%a0-%a2,%sp@
142 .endm
143
144 .macro RESTORE_USER
145 moveml %sp@,%d1-%d5/%a0-%a2
146 lea %sp@(32),%sp
147 movel %sp@+,%d0
148 addql #4,%sp
149 addl %sp@+,%sp
150 rte
151 .endm
152
153 .macro RDUSP
154
155 .word 0x4e6b
156 .endm
157
158 .macro WRUSP
159
160 .word 0x4e63
161 .endm
162
163 #endif
164
165 .macro SAVE_SWITCH_STACK
166 lea %sp@(-24),%sp
167 moveml %a3-%a6/%d6-%d7,%sp@
168 .endm
169
170 .macro RESTORE_SWITCH_STACK
171 moveml %sp@,%a3-%a6/%d6-%d7
172 lea %sp@(24),%sp
173 .endm
174
175 #else
176
177
178
179
180
181
182
183
184
185
186 .macro SAVE_ALL_INT
187 clrl %sp@-
188 pea -1:w
189 movel %d0,%sp@-
190 moveml %d1-%d5/%a0-%a2,%sp@-
191 .endm
192
193 .macro SAVE_ALL_SYS
194 clrl %sp@-
195 movel %d0,%sp@-
196 movel %d0,%sp@-
197 moveml %d1-%d5/%a0-%a2,%sp@-
198 .endm
199
200 .macro RESTORE_ALL
201 moveml %sp@+,%a0-%a2/%d1-%d5
202 movel %sp@+,%d0
203 addql #4,%sp
204 addl %sp@+,%sp
205 rte
206 .endm
207
208
209 .macro SAVE_SWITCH_STACK
210 moveml %a3-%a6/%d6-%d7,%sp@-
211 .endm
212
213 .macro RESTORE_SWITCH_STACK
214 moveml %sp@+,%a3-%a6/%d6-%d7
215 .endm
216
217 #endif
218
219
220
221
222
223
224 #ifdef CONFIG_MMU
225
226 #define curptr a2
227
228 #define GET_CURRENT(tmp) get_current tmp
229 .macro get_current reg=%d0
230 movel %sp,\reg
231 andl #-THREAD_SIZE,\reg
232 movel \reg,%curptr
233 movel %curptr@,%curptr
234 .endm
235
236 #else
237
238 #define GET_CURRENT(tmp)
239
240 #endif
241
242 #else
243
244 #define STR(X) STR1(X)
245 #define STR1(X) #X
246
247 #define SAVE_ALL_INT \
248 "clrl %%sp@-;" \
249 "pea -1:w;" \
250 "movel %%d0,%%sp@-;" \
251 "moveml %%d1-%%d5/%%a0-%%a2,%%sp@-"
252
253 #define GET_CURRENT(tmp) \
254 "movel %%sp,"#tmp"\n\t" \
255 "andw #-"STR(THREAD_SIZE)","#tmp"\n\t" \
256 "movel "#tmp",%%a2\n\t" \
257 "movel %%a2@,%%a2"
258
259 #endif
260
261 #endif