Subversion Repositories HelenOS-historic

Rev

Rev 1267 | Rev 1277 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
987 decky 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>
1004 decky 30
#include <arch/mm/page.h>
987 decky 31
 
32
.section K_UNMAPPED_TEXT_START, "ax"
33
 
1215 decky 34
.macro CONTEXT_STORE
1004 decky 35
 
1267 decky 36
	# save SP in SPRG1
37
	# save R12 in SPRG2, backup CR in R12
38
 
39
	mtsprg1 sp
40
	mtsprg2 r12
41
	mfcr r12
1004 decky 42
 
1267 decky 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
1004 decky 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)
1267 decky 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)
1004 decky 94
 
1267 decky 95
	mfsrr0 r3
96
	stw r3, 120(sp)
97
 
98
	mfsrr1 r3
1004 decky 99
	stw r3, 124(sp)
100
 
1267 decky 101
	mflr r3
1004 decky 102
	stw r3, 128(sp)
103
 
1267 decky 104
	stw r12, 132(sp)
1004 decky 105
 
1267 decky 106
	mfctr r3
1004 decky 107
	stw r3, 136(sp)
108
 
1267 decky 109
	mfxer r3
1004 decky 110
	stw r3, 140(sp)
1215 decky 111
.endm
1004 decky 112
 
1215 decky 113
.org 0x100
114
.global exc_system_reset
115
exc_system_reset:
116
	b exc_system_reset
117
 
118
.org 0x200
119
.global exc_machine_check
120
exc_machine_check:
121
	b exc_machine_check
122
 
123
.org 0x300
124
.global exc_data_storage
125
exc_data_storage:
126
	CONTEXT_STORE
1267 decky 127
 
1215 decky 128
	lis r3, pht_refill@ha
129
	addi r3, r3, pht_refill@l
1267 decky 130
	mtsrr0 r3
1215 decky 131
 
132
	mfmsr r3
133
	ori r3, r3, (msr_ir | msr_dr)@l
1267 decky 134
	mtsrr1 r3
1215 decky 135
 
136
	lis r3, iret@ha
137
	addi r3, r3, iret@l
138
	mtlr r3
139
 
140
	addis sp, sp, 0x8000
1269 decky 141
	li r3, 1
142
	mr r4, sp
1215 decky 143
	rfi
144
 
145
.org 0x400
146
.global exc_instruction_storage
147
exc_instruction_storage:
1267 decky 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
1269 decky 163
	li r3, 0
164
	mr r4, sp
1267 decky 165
	rfi
1215 decky 166
 
167
.org 0x500
168
.global exc_external
169
exc_external:
170
	b exc_external
171
 
172
.org 0x600
173
.global exc_alignment
174
exc_alignment:
175
	b exc_alignment
176
 
177
.org 0x700
178
.global exc_program
179
exc_program:
180
	b exc_program
181
 
182
.org 0x800
183
.global exc_fp_unavailable
184
exc_fp_unavailable:
185
	b exc_fp_unavailable
186
 
187
.org 0x900
188
.global exc_decrementer
189
exc_decrementer:
190
	CONTEXT_STORE	
191
 
1004 decky 192
	lis r3, exc_dispatch@ha
193
	addi r3, r3, exc_dispatch@l
1267 decky 194
	mtsrr0 r3
1004 decky 195
 
196
	mfmsr r3
197
	ori r3, r3, (msr_ir | msr_dr)@l
1267 decky 198
	mtsrr1 r3
1004 decky 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
1267 decky 206
	mr r4, sp
990 decky 207
	rfi
987 decky 208
 
209
.org 0xa00
210
.global exc_reserved0
211
exc_reserved0:
212
	b exc_reserved0
213
 
214
.org 0xb00
215
.global exc_reserved1
216
exc_reserved1:
217
	b exc_reserved1
218
 
219
.org 0xc00
220
.global exc_syscall
221
exc_syscall:
222
	b exc_syscall
223
 
224
.org 0xd00
225
.global exc_trace
226
exc_trace:
227
	b exc_trace