source: mainline/kernel/arch/ppc32/src/exception.S@ 11675207

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 11675207 was 11675207, checked in by jermar <jermar@…>, 17 years ago

Move everything to kernel/.

  • Property mode set to 100644
File size: 5.2 KB
Line 
1#
2# Copyright (C) 2006 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29#include <arch/asm/regname.h>
30#include <arch/mm/page.h>
31
32.section K_UNMAPPED_TEXT_START, "ax"
33
34.macro CONTEXT_STORE
35
36 # save R12 in SPRG1, backup CR in R12
37 # save SP in SPRG2
38
39 mtsprg1 r12
40 mfcr r12
41 mtsprg2 sp
42
43 # check whether SP is in kernel
44
45 andis. sp, sp, 0x8000
46 bne 1f
47
48 # stack is in user-space
49
50 mfsprg0 sp
51
52 b 2f
53
54 1:
55
56 # stack is in kernel
57
58 mfsprg2 sp
59 subis sp, sp, 0x8000
60
61 2:
62
63 subi sp, sp, 160
64 stw r0, 8(sp)
65 stw r2, 12(sp)
66 stw r3, 16(sp)
67 stw r4, 20(sp)
68 stw r5, 24(sp)
69 stw r6, 28(sp)
70 stw r7, 32(sp)
71 stw r8, 36(sp)
72 stw r9, 40(sp)
73 stw r10, 44(sp)
74 stw r11, 48(sp)
75 stw r13, 52(sp)
76 stw r14, 56(sp)
77 stw r15, 60(sp)
78 stw r16, 64(sp)
79 stw r17, 68(sp)
80 stw r18, 72(sp)
81 stw r19, 76(sp)
82 stw r20, 80(sp)
83 stw r21, 84(sp)
84 stw r22, 88(sp)
85 stw r23, 92(sp)
86 stw r24, 96(sp)
87 stw r25, 100(sp)
88 stw r26, 104(sp)
89 stw r27, 108(sp)
90 stw r28, 112(sp)
91 stw r29, 116(sp)
92 stw r30, 120(sp)
93 stw r31, 124(sp)
94
95 stw r12, 128(sp)
96
97 mfsrr0 r12
98 stw r12, 132(sp)
99
100 mfsrr1 r12
101 stw r12, 136(sp)
102
103 mflr r12
104 stw r12, 140(sp)
105
106 mfctr r12
107 stw r12, 144(sp)
108
109 mfxer r12
110 stw r12, 148(sp)
111
112 mfsprg1 r12
113 stw r12, 152(sp)
114
115 mfsprg2 r12
116 stw r12, 156(sp)
117.endm
118
119.org 0x100
120.global exc_system_reset
121exc_system_reset:
122 CONTEXT_STORE
123
124 li r3, 0
125 b jump_to_kernel
126
127.org 0x200
128.global exc_machine_check
129exc_machine_check:
130 CONTEXT_STORE
131
132 li r3, 1
133 b jump_to_kernel
134
135.org 0x300
136.global exc_data_storage
137exc_data_storage:
138 CONTEXT_STORE
139
140 li r3, 2
141 mr r4, sp
142 addi r4, r4, 8
143 bl pht_real_refill
144
145 cmpwi r3, 0
146 bne iret_real
147
148 li r3, 2
149 b jump_to_kernel
150
151.org 0x400
152.global exc_instruction_storage
153exc_instruction_storage:
154 CONTEXT_STORE
155
156 li r3, 3
157 mr r4, sp
158 addi r4, r4, 8
159 bl pht_real_refill
160
161 cmpwi r3, 0
162 bne iret_real
163
164 li r3, 3
165 b jump_to_kernel
166
167.org 0x500
168.global exc_external
169exc_external:
170 CONTEXT_STORE
171
172 li r3, 4
173 b jump_to_kernel
174
175.org 0x600
176.global exc_alignment
177exc_alignment:
178 CONTEXT_STORE
179
180 li r3, 5
181 b jump_to_kernel
182
183.org 0x700
184.global exc_program
185exc_program:
186 CONTEXT_STORE
187
188 li r3, 6
189 b jump_to_kernel
190
191.org 0x800
192.global exc_fp_unavailable
193exc_fp_unavailable:
194 CONTEXT_STORE
195
196 li r3, 7
197 b jump_to_kernel
198
199.org 0x900
200.global exc_decrementer
201exc_decrementer:
202 CONTEXT_STORE
203
204 li r3, 8
205 b jump_to_kernel
206
207.org 0xa00
208.global exc_reserved0
209exc_reserved0:
210 CONTEXT_STORE
211
212 li r3, 9
213 b jump_to_kernel
214
215.org 0xb00
216.global exc_reserved1
217exc_reserved1:
218 CONTEXT_STORE
219
220 li r3, 10
221 b jump_to_kernel
222
223.org 0xc00
224.global exc_syscall
225exc_syscall:
226 CONTEXT_STORE
227
228 b jump_to_kernel_syscall
229
230.org 0xd00
231.global exc_trace
232exc_trace:
233 CONTEXT_STORE
234
235 li r3, 12
236 b jump_to_kernel
237
238.org 0x4000
239jump_to_kernel:
240 lis r12, iret@ha
241 addi r12, r12, iret@l
242 mtlr r12
243
244 lis r12, exc_dispatch@ha
245 addi r12, r12, exc_dispatch@l
246 mtsrr0 r12
247
248 mfmsr r12
249 ori r12, r12, (msr_ir | msr_dr)@l
250 mtsrr1 r12
251
252 addis sp, sp, 0x8000
253 mr r4, sp
254 addi r4, r4, 8
255
256 rfi
257
258jump_to_kernel_syscall:
259 lis r12, syscall_handler@ha
260 addi r12, r12, syscall_handler@l
261 mtsrr0 r12
262
263 lis r12, iret_syscall@ha
264 addi r12, r12, iret_syscall@l
265 mtlr r12
266
267 mfmsr r12
268 ori r12, r12, (msr_ir | msr_dr)@l
269 mtsrr1 r12
270
271 addis sp, sp, 0x8000
272 rfi
273
274iret_real:
275
276 lwz r0, 8(sp)
277 lwz r2, 12(sp)
278 lwz r3, 16(sp)
279 lwz r4, 20(sp)
280 lwz r5, 24(sp)
281 lwz r6, 28(sp)
282 lwz r7, 32(sp)
283 lwz r8, 36(sp)
284 lwz r9, 40(sp)
285 lwz r10, 44(sp)
286 lwz r11, 48(sp)
287 lwz r13, 52(sp)
288 lwz r14, 56(sp)
289 lwz r15, 60(sp)
290 lwz r16, 64(sp)
291 lwz r17, 68(sp)
292 lwz r18, 72(sp)
293 lwz r19, 76(sp)
294 lwz r20, 80(sp)
295 lwz r21, 84(sp)
296 lwz r22, 88(sp)
297 lwz r23, 92(sp)
298 lwz r24, 96(sp)
299 lwz r25, 100(sp)
300 lwz r26, 104(sp)
301 lwz r27, 108(sp)
302 lwz r28, 112(sp)
303 lwz r29, 116(sp)
304 lwz r30, 120(sp)
305 lwz r31, 124(sp)
306
307 lwz r12, 128(sp)
308 mtcr r12
309
310 lwz r12, 132(sp)
311 mtsrr0 r12
312
313 lwz r12, 136(sp)
314 mtsrr1 r12
315
316 lwz r12, 140(sp)
317 mtlr r12
318
319 lwz r12, 144(sp)
320 mtctr r12
321
322 lwz r12, 148(sp)
323 mtxer r12
324
325 lwz r12, 152(sp)
326 lwz sp, 156(sp)
327
328 rfi
Note: See TracBrowser for help on using the repository browser.