source: mainline/arch/ppc32/src/exception.S@ 9a68b34d

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

PHT Refill handler

  • Property mode set to 100644
File size: 4.0 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 SP in SPRG1
37 # save R12 in SPRG2, backup CR in R12
38
39 mtsprg1 sp
40 mtsprg2 r12
41 mfcr r12
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 mfsprg1 sp
59 subis sp, sp, 0x8000
60
61 2:
62
63 subi sp, sp, 140
64 stw r0, 0(sp)
65 stw r2, 4(sp)
66 stw r3, 8(sp)
67 stw r4, 12(sp)
68 stw r5, 16(sp)
69 stw r6, 20(sp)
70 stw r7, 24(sp)
71 stw r8, 28(sp)
72 stw r9, 32(sp)
73 stw r10, 36(sp)
74 stw r11, 40(sp)
75 stw r13, 44(sp)
76 stw r14, 48(sp)
77 stw r15, 52(sp)
78 stw r16, 56(sp)
79 stw r17, 60(sp)
80 stw r18, 64(sp)
81 stw r19, 68(sp)
82 stw r20, 72(sp)
83 stw r21, 76(sp)
84 stw r22, 80(sp)
85 stw r23, 84(sp)
86 stw r24, 88(sp)
87 stw r25, 92(sp)
88 stw r26, 96(sp)
89 stw r27, 100(sp)
90 stw r28, 104(sp)
91 stw r29, 108(sp)
92 stw r30, 112(sp)
93 stw r31, 116(sp)
94
95 mfsrr0 r3
96 stw r3, 120(sp)
97
98 mfsrr1 r3
99 stw r3, 124(sp)
100
101 mflr r3
102 stw r3, 128(sp)
103
104 stw r12, 132(sp)
105
106 mfctr r3
107 stw r3, 136(sp)
108
109 mfxer r3
110 stw r3, 140(sp)
111.endm
112
113.org 0x100
114.global exc_system_reset
115exc_system_reset:
116 b exc_system_reset
117
118.org 0x200
119.global exc_machine_check
120exc_machine_check:
121 b exc_machine_check
122
123.org 0x300
124.global exc_data_storage
125exc_data_storage:
126 CONTEXT_STORE
127
128 lis r3, pht_refill@ha
129 addi r3, r3, pht_refill@l
130 mtsrr0 r3
131
132 mfmsr r3
133 ori r3, r3, (msr_ir | msr_dr)@l
134 mtsrr1 r3
135
136 lis r3, iret@ha
137 addi r3, r3, iret@l
138 mtlr r3
139
140 addis sp, sp, 0x8000
141 li r3, 1
142 mr r4, sp
143 rfi
144
145.org 0x400
146.global exc_instruction_storage
147exc_instruction_storage:
148 CONTEXT_STORE
149
150 lis r3, pht_refill@ha
151 addi r3, r3, pht_refill@l
152 mtsrr0 r3
153
154 mfmsr r3
155 ori r3, r3, (msr_ir | msr_dr)@l
156 mtsrr1 r3
157
158 lis r3, iret@ha
159 addi r3, r3, iret@l
160 mtlr r3
161
162 addis sp, sp, 0x8000
163 li r3, 0
164 mr r4, sp
165 rfi
166
167.org 0x500
168.global exc_external
169exc_external:
170 b exc_external
171
172.org 0x600
173.global exc_alignment
174exc_alignment:
175 b exc_alignment
176
177.org 0x700
178.global exc_program
179exc_program:
180 b exc_program
181
182.org 0x800
183.global exc_fp_unavailable
184exc_fp_unavailable:
185 b exc_fp_unavailable
186
187.org 0x900
188.global exc_decrementer
189exc_decrementer:
190 CONTEXT_STORE
191
192 lis r3, exc_dispatch@ha
193 addi r3, r3, exc_dispatch@l
194 mtsrr0 r3
195
196 mfmsr r3
197 ori r3, r3, (msr_ir | msr_dr)@l
198 mtsrr1 r3
199
200 lis r3, iret@ha
201 addi r3, r3, iret@l
202 mtlr r3
203
204 addis sp, sp, 0x8000
205 li r3, 10
206 mr r4, sp
207 rfi
208
209.org 0xa00
210.global exc_reserved0
211exc_reserved0:
212 b exc_reserved0
213
214.org 0xb00
215.global exc_reserved1
216exc_reserved1:
217 b exc_reserved1
218
219.org 0xc00
220.global exc_syscall
221exc_syscall:
222 b exc_syscall
223
224.org 0xd00
225.global exc_trace
226exc_trace:
227 b exc_trace
Note: See TracBrowser for help on using the repository browser.