aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68knommu/include/asm/entry.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68knommu/include/asm/entry.h')
-rw-r--r--arch/m68knommu/include/asm/entry.h182
1 files changed, 182 insertions, 0 deletions
diff --git a/arch/m68knommu/include/asm/entry.h b/arch/m68knommu/include/asm/entry.h
new file mode 100644
index 000000000000..c2553d26273d
--- /dev/null
+++ b/arch/m68knommu/include/asm/entry.h
@@ -0,0 +1,182 @@
1#ifndef __M68KNOMMU_ENTRY_H
2#define __M68KNOMMU_ENTRY_H
3
4#include <asm/setup.h>
5#include <asm/page.h>
6
7/*
8 * Stack layout in 'ret_from_exception':
9 *
10 * This allows access to the syscall arguments in registers d1-d5
11 *
12 * 0(sp) - d1
13 * 4(sp) - d2
14 * 8(sp) - d3
15 * C(sp) - d4
16 * 10(sp) - d5
17 * 14(sp) - a0
18 * 18(sp) - a1
19 * 1C(sp) - a2
20 * 20(sp) - d0
21 * 24(sp) - orig_d0
22 * 28(sp) - stack adjustment
23 * 2C(sp) - [ sr ] [ format & vector ]
24 * 2E(sp) - [ pc-hiword ] [ sr ]
25 * 30(sp) - [ pc-loword ] [ pc-hiword ]
26 * 32(sp) - [ format & vector ] [ pc-loword ]
27 * ^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^
28 * M68K COLDFIRE
29 */
30
31#define ALLOWINT 0xf8ff
32
33#ifdef __ASSEMBLY__
34
35/* process bits for task_struct.flags */
36PF_TRACESYS_OFF = 3
37PF_TRACESYS_BIT = 5
38PF_PTRACED_OFF = 3
39PF_PTRACED_BIT = 4
40PF_DTRACE_OFF = 1
41PF_DTRACE_BIT = 5
42
43LENOSYS = 38
44
45#define SWITCH_STACK_SIZE (6*4+4) /* Includes return address */
46
47/*
48 * This defines the normal kernel pt-regs layout.
49 *
50 * regs are a2-a6 and d6-d7 preserved by C code
51 * the kernel doesn't mess with usp unless it needs to
52 */
53
54#ifdef CONFIG_COLDFIRE
55/*
56 * This is made a little more tricky on the ColdFire. There is no
57 * separate kernel and user stack pointers. Need to artificially
58 * construct a usp in software... When doing this we need to disable
59 * interrupts, otherwise bad things could happen.
60 */
61.macro SAVE_ALL
62 move #0x2700,%sr /* disable intrs */
63 btst #5,%sp@(2) /* from user? */
64 bnes 6f /* no, skip */
65 movel %sp,sw_usp /* save user sp */
66 addql #8,sw_usp /* remove exception */
67 movel sw_ksp,%sp /* kernel sp */
68 subql #8,%sp /* room for exception */
69 clrl %sp@- /* stkadj */
70 movel %d0,%sp@- /* orig d0 */
71 movel %d0,%sp@- /* d0 */
72 lea %sp@(-32),%sp /* space for 8 regs */
73 moveml %d1-%d5/%a0-%a2,%sp@
74 movel sw_usp,%a0 /* get usp */
75 movel %a0@-,%sp@(PT_PC) /* copy exception program counter */
76 movel %a0@-,%sp@(PT_FORMATVEC)/* copy exception format/vector/sr */
77 bra 7f
78 6:
79 clrl %sp@- /* stkadj */
80 movel %d0,%sp@- /* orig d0 */
81 movel %d0,%sp@- /* d0 */
82 lea %sp@(-32),%sp /* space for 8 regs */
83 moveml %d1-%d5/%a0-%a2,%sp@
84 7:
85.endm
86
87.macro RESTORE_ALL
88 btst #5,%sp@(PT_SR) /* going user? */
89 bnes 8f /* no, skip */
90 move #0x2700,%sr /* disable intrs */
91 movel sw_usp,%a0 /* get usp */
92 movel %sp@(PT_PC),%a0@- /* copy exception program counter */
93 movel %sp@(PT_FORMATVEC),%a0@-/* copy exception format/vector/sr */
94 moveml %sp@,%d1-%d5/%a0-%a2
95 lea %sp@(32),%sp /* space for 8 regs */
96 movel %sp@+,%d0
97 addql #4,%sp /* orig d0 */
98 addl %sp@+,%sp /* stkadj */
99 addql #8,%sp /* remove exception */
100 movel %sp,sw_ksp /* save ksp */
101 subql #8,sw_usp /* set exception */
102 movel sw_usp,%sp /* restore usp */
103 rte
104 8:
105 moveml %sp@,%d1-%d5/%a0-%a2
106 lea %sp@(32),%sp /* space for 8 regs */
107 movel %sp@+,%d0
108 addql #4,%sp /* orig d0 */
109 addl %sp@+,%sp /* stkadj */
110 rte
111.endm
112
113/*
114 * Quick exception save, use current stack only.
115 */
116.macro SAVE_LOCAL
117 move #0x2700,%sr /* disable intrs */
118 clrl %sp@- /* stkadj */
119 movel %d0,%sp@- /* orig d0 */
120 movel %d0,%sp@- /* d0 */
121 lea %sp@(-32),%sp /* space for 8 regs */
122 moveml %d1-%d5/%a0-%a2,%sp@
123.endm
124
125.macro RESTORE_LOCAL
126 moveml %sp@,%d1-%d5/%a0-%a2
127 lea %sp@(32),%sp /* space for 8 regs */
128 movel %sp@+,%d0
129 addql #4,%sp /* orig d0 */
130 addl %sp@+,%sp /* stkadj */
131 rte
132.endm
133
134.macro SAVE_SWITCH_STACK
135 lea %sp@(-24),%sp /* 6 regs */
136 moveml %a3-%a6/%d6-%d7,%sp@
137.endm
138
139.macro RESTORE_SWITCH_STACK
140 moveml %sp@,%a3-%a6/%d6-%d7
141 lea %sp@(24),%sp /* 6 regs */
142.endm
143
144/*
145 * Software copy of the user and kernel stack pointers... Ugh...
146 * Need these to get around ColdFire not having separate kernel
147 * and user stack pointers.
148 */
149.globl sw_usp
150.globl sw_ksp
151
152#else /* !CONFIG_COLDFIRE */
153
154/*
155 * Standard 68k interrupt entry and exit macros.
156 */
157.macro SAVE_ALL
158 clrl %sp@- /* stkadj */
159 movel %d0,%sp@- /* orig d0 */
160 movel %d0,%sp@- /* d0 */
161 moveml %d1-%d5/%a0-%a2,%sp@-
162.endm
163
164.macro RESTORE_ALL
165 moveml %sp@+,%a0-%a2/%d1-%d5
166 movel %sp@+,%d0
167 addql #4,%sp /* orig d0 */
168 addl %sp@+,%sp /* stkadj */
169 rte
170.endm
171
172.macro SAVE_SWITCH_STACK
173 moveml %a3-%a6/%d6-%d7,%sp@-
174.endm
175
176.macro RESTORE_SWITCH_STACK
177 moveml %sp@+,%a3-%a6/%d6-%d7
178.endm
179
180#endif /* !CONFIG_COLDFIRE */
181#endif /* __ASSEMBLY__ */
182#endif /* __M68KNOMMU_ENTRY_H */