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

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 3193c05 was ffe276f, checked in by Martin Decky <martin@…>, 15 years ago

restructure constants
change the return type of pic_get_pending()
coding style changes

  • Property mode set to 100644
File size: 5.7 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/cpu.h>
31#include <arch/mm/page.h>
32
33.section K_UNMAPPED_TEXT_START, "ax"
34
35.macro CONTEXT_STORE
36
37 # save r12 in SPRG1, backup CR in r12
38 # save SP in SPRG2
39
40 mtsprg1 r12
41 mfcr r12
42 mtsprg2 sp
43
44 # check whether SP is in kernel
45
46 andis. sp, sp, 0x8000
47 bne 1f
48
49 # stack is in user-space
50
51 mfsprg0 sp
52
53 b 2f
54
55 1:
56
57 # stack is in kernel
58
59 mfsprg2 sp
60 subis sp, sp, 0x8000
61
62 2:
63
64 subi sp, sp, 164
65 stw r0, 8(sp)
66 stw r2, 12(sp)
67 stw r3, 16(sp)
68 stw r4, 20(sp)
69 stw r5, 24(sp)
70 stw r6, 28(sp)
71 stw r7, 32(sp)
72 stw r8, 36(sp)
73 stw r9, 40(sp)
74 stw r10, 44(sp)
75 stw r11, 48(sp)
76 stw r13, 52(sp)
77 stw r14, 56(sp)
78 stw r15, 60(sp)
79 stw r16, 64(sp)
80 stw r17, 68(sp)
81 stw r18, 72(sp)
82 stw r19, 76(sp)
83 stw r20, 80(sp)
84 stw r21, 84(sp)
85 stw r22, 88(sp)
86 stw r23, 92(sp)
87 stw r24, 96(sp)
88 stw r25, 100(sp)
89 stw r26, 104(sp)
90 stw r27, 108(sp)
91 stw r28, 112(sp)
92 stw r29, 116(sp)
93 stw r30, 120(sp)
94 stw r31, 124(sp)
95
96 stw r12, 128(sp)
97
98 mfsrr0 r12
99 stw r12, 132(sp)
100
101 mfsrr1 r12
102 stw r12, 136(sp)
103
104 mflr r12
105 stw r12, 140(sp)
106
107 mfctr r12
108 stw r12, 144(sp)
109
110 mfxer r12
111 stw r12, 148(sp)
112
113 mfdar r12
114 stw r12, 152(sp)
115
116 mfsprg1 r12
117 stw r12, 156(sp)
118
119 mfsprg2 r12
120 stw r12, 160(sp)
121.endm
122
123.org 0x100
124.global exc_system_reset
125exc_system_reset:
126 CONTEXT_STORE
127
128 li r3, 0
129 b jump_to_kernel
130
131.org 0x200
132.global exc_machine_check
133exc_machine_check:
134 CONTEXT_STORE
135
136 li r3, 1
137 b jump_to_kernel
138
139.org 0x300
140.global exc_data_storage
141exc_data_storage:
142 CONTEXT_STORE
143
144 b data_storage
145
146.org 0x400
147.global exc_instruction_storage
148exc_instruction_storage:
149 CONTEXT_STORE
150
151 b instruction_storage
152
153.org 0x500
154.global exc_external
155exc_external:
156 CONTEXT_STORE
157
158 li r3, 4
159 b jump_to_kernel
160
161.org 0x600
162.global exc_alignment
163exc_alignment:
164 CONTEXT_STORE
165
166 li r3, 5
167 b jump_to_kernel
168
169.org 0x700
170.global exc_program
171exc_program:
172 CONTEXT_STORE
173
174 li r3, 6
175 b jump_to_kernel
176
177.org 0x800
178.global exc_fp_unavailable
179exc_fp_unavailable:
180 CONTEXT_STORE
181
182 li r3, 7
183 b jump_to_kernel
184
185.org 0x900
186.global exc_decrementer
187exc_decrementer:
188 CONTEXT_STORE
189
190 li r3, 8
191 b jump_to_kernel
192
193.org 0xa00
194.global exc_reserved0
195exc_reserved0:
196 CONTEXT_STORE
197
198 li r3, 9
199 b jump_to_kernel
200
201.org 0xb00
202.global exc_reserved1
203exc_reserved1:
204 CONTEXT_STORE
205
206 li r3, 10
207 b jump_to_kernel
208
209.org 0xc00
210.global exc_syscall
211exc_syscall:
212 CONTEXT_STORE
213
214 b jump_to_kernel_syscall
215
216.org 0xd00
217.global exc_trace
218exc_trace:
219 CONTEXT_STORE
220
221 li r3, 12
222 b jump_to_kernel
223
224.org 0x1000
225.global exc_itlb_miss
226exc_itlb_miss:
227 CONTEXT_STORE
228
229 b tlb_miss
230
231.org 0x1100
232.global exc_dtlb_miss_load
233exc_dtlb_miss_load:
234 CONTEXT_STORE
235
236 b tlb_miss
237
238.org 0x1200
239.global exc_dtlb_miss_store
240exc_dtlb_miss_store:
241 CONTEXT_STORE
242
243 b tlb_miss
244
245.org 0x4000
246data_storage:
247 li r3, 2
248 mr r4, sp
249 addi r4, r4, 8
250 bl pht_refill_real
251
252 cmpwi r3, 0
253 bne iret_real
254
255 li r3, 2
256 b jump_to_kernel
257
258instruction_storage:
259 li r3, 3
260 mr r4, sp
261 addi r4, r4, 8
262 bl pht_refill_real
263
264 cmpwi r3, 0
265 bne iret_real
266
267 li r3, 3
268 b jump_to_kernel
269
270tlb_miss:
271 li r3, 16
272 mfspr r4, tlbmiss
273 mfspr r5, ptehi
274 mfspr r6, ptelo
275 mr r7, sp
276 addi r7, r7, 20
277
278 bl tlb_refill_real
279 b iret_real
280
281jump_to_kernel:
282 lis r12, iret@ha
283 addi r12, r12, iret@l
284 mtlr r12
285
286 lis r12, exc_dispatch@ha
287 addi r12, r12, exc_dispatch@l
288 mtsrr0 r12
289
290 mfmsr r12
291 ori r12, r12, (MSR_IR | MSR_DR)@l
292 mtsrr1 r12
293
294 addis sp, sp, 0x8000
295 mr r4, sp
296 addi r4, r4, 8
297
298 rfi
299
300jump_to_kernel_syscall:
301 lis r12, syscall_handler@ha
302 addi r12, r12, syscall_handler@l
303 mtsrr0 r12
304
305 lis r12, iret_syscall@ha
306 addi r12, r12, iret_syscall@l
307 mtlr r12
308
309 mfmsr r12
310 ori r12, r12, (MSR_IR | MSR_DR)@l
311 mtsrr1 r12
312
313 addis sp, sp, 0x8000
314 rfi
315
316iret_real:
317 lwz r0, 8(sp)
318 lwz r2, 12(sp)
319 lwz r3, 16(sp)
320 lwz r4, 20(sp)
321 lwz r5, 24(sp)
322 lwz r6, 28(sp)
323 lwz r7, 32(sp)
324 lwz r8, 36(sp)
325 lwz r9, 40(sp)
326 lwz r10, 44(sp)
327 lwz r11, 48(sp)
328 lwz r13, 52(sp)
329 lwz r14, 56(sp)
330 lwz r15, 60(sp)
331 lwz r16, 64(sp)
332 lwz r17, 68(sp)
333 lwz r18, 72(sp)
334 lwz r19, 76(sp)
335 lwz r20, 80(sp)
336 lwz r21, 84(sp)
337 lwz r22, 88(sp)
338 lwz r23, 92(sp)
339 lwz r24, 96(sp)
340 lwz r25, 100(sp)
341 lwz r26, 104(sp)
342 lwz r27, 108(sp)
343 lwz r28, 112(sp)
344 lwz r29, 116(sp)
345 lwz r30, 120(sp)
346 lwz r31, 124(sp)
347
348 lwz r12, 128(sp)
349 mtcr r12
350
351 lwz r12, 132(sp)
352 mtsrr0 r12
353
354 lwz r12, 136(sp)
355 mtsrr1 r12
356
357 lwz r12, 140(sp)
358 mtlr r12
359
360 lwz r12, 144(sp)
361 mtctr r12
362
363 lwz r12, 148(sp)
364 mtxer r12
365
366 lwz r12, 156(sp)
367 lwz sp, 160(sp)
368
369 rfi
Note: See TracBrowser for help on using the repository browser.