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
262