1 /* $FreeBSD: releng/5.0/sys/powerpc/powerpc/locore.s 103599 2002-09-19 04:29:59Z grehan $ */
2 /* $NetBSD: locore.S,v 1.24 2000/05/31 05:09:17 thorpej Exp $ */
3
4 /*
5 * Copyright (C) 2001 Benno Rice
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in the
15 * documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY Benno Rice ``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 TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28 /*
29 * Copyright (C) 1995, 1996 Wolfgang Solfrank.
30 * Copyright (C) 1995, 1996 TooLs GmbH.
31 * All rights reserved.
32 *
33 * Redistribution and use in source and binary forms, with or without
34 * modification, are permitted provided that the following conditions
35 * are met:
36 * 1. Redistributions of source code must retain the above copyright
37 * notice, this list of conditions and the following disclaimer.
38 * 2. Redistributions in binary form must reproduce the above copyright
39 * notice, this list of conditions and the following disclaimer in the
40 * documentation and/or other materials provided with the distribution.
41 * 3. All advertising materials mentioning features or use of this software
42 * must display the following acknowledgement:
43 * This product includes software developed by TooLs GmbH.
44 * 4. The name of TooLs GmbH may not be used to endorse or promote products
45 * derived from this software without specific prior written permission.
46 *
47 * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR
48 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
49 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
50 * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
51 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
52 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
53 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
54 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
55 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
56 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
57 */
58
59 #include "opt_ddb.h"
60 #include "opt_ipkdb.h"
61 #include "assym.s"
62
63 #include <sys/syscall.h>
64
65 #include <machine/trap.h>
66 #include <machine/param.h>
67 #include <machine/sr.h>
68 #include <machine/spr.h>
69 #include <machine/psl.h>
70 #include <machine/asm.h>
71
72 /*
73 * Some instructions gas doesn't understand (yet?)
74 */
75 #define bdneq bdnzf 2,
76
77 /*
78 * Globals
79 */
80 .data
81 GLOBAL(tmpstk)
82 .space 8208
83 GLOBAL(esym)
84 .long 0 /* end of symbol table */
85
86 GLOBAL(ofmsr)
87 .long 0 /* msr used in Open Firmware */
88
89 GLOBAL(powersave)
90 .long 0
91
92 #define INTSTK 8192 /* 8K interrupt stack */
93 #define SPILLSTK 4096 /* 4K spill stack */
94
95 /*
96 * Dummy interrupt table to keep sysctl happy until
97 * it's worked out what to do with naming
98 */
99 GLOBAL(intrnames)
100 .asciz "dummy"
101 GLOBAL(eintrnames)
102 .align 4
103 GLOBAL(intrcnt)
104 .long 0
105 GLOBAL(eintrcnt)
106
107 /*
108 * File-scope for locore.S
109 */
110 idle_u:
111 .long 0 /* fake uarea during idle after exit */
112 openfirmware_entry:
113 .long 0 /* openfirmware entry point */
114 srsave:
115 .long 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
116
117 /*
118 * This symbol is here for the benefit of kvm_mkdb, and is supposed to
119 * mark the start of kernel text.
120 */
121 .text
122 .globl kernel_text
123 kernel_text:
124
125 /*
126 * Startup entry. Note, this must be the first thing in the text
127 * segment!
128 */
129 .text
130 .globl __start
131 __start:
132 #ifdef FIRMWORKSBUGS
133 mfmsr 0
134 andi. 0,0,PSL_IR|PSL_DR
135 beq 1f
136
137 bl ofwr_init
138 1:
139 #endif
140 li 8,0
141 li 9,0x100
142 mtctr 9
143 1:
144 dcbf 0,8
145 icbi 0,8
146 addi 8,8,0x20
147 bdnz 1b
148 sync
149 isync
150
151 mtibatu 0,0
152 mtibatu 1,0
153 mtibatu 2,0
154 mtibatu 3,0
155 mtdbatu 0,0
156 mtdbatu 1,0
157 mtdbatu 2,0
158 mtdbatu 3,0
159
160 li 9,0x12
161 mtibatl 0,9
162 mtdbatl 0,9
163 li 9,0x1ffe
164 mtibatu 0,9
165 mtdbatu 0,9
166 isync
167
168 /* Save the argument pointer and length */
169 mr 20,6
170 mr 21,7
171
172 lis 8,openfirmware_entry@ha
173 stw 5,openfirmware_entry@l(8) /* save client interface handler */
174 mr 3,5
175
176 lis 1,tmpstk@ha
177 addi 1,1,tmpstk@l
178 addi 1,1,8192
179
180 mfmsr 0
181 lis 9,ofmsr@ha
182 stw 0,ofmsr@l(9)
183
184 bl OF_init
185
186 lis 4,end@ha
187 addi 4,4,end@l
188 mr 5,4
189
190 lis 3,kernel_text@ha
191 addi 3,3,kernel_text@l
192
193 /* Restore the argument pointer and length */
194 mr 6,20
195 mr 7,21
196
197 bl powerpc_init
198 bl mi_startup
199 b OF_exit
200
201 /*
202 * int setfault()
203 *
204 * Similar to setjmp to setup for handling faults on accesses to user memory.
205 * Any routine using this may only call bcopy, either the form below,
206 * or the (currently used) C code optimized, so it doesn't use any non-volatile
207 * registers.
208 */
209 .globl setfault
210 setfault:
211 mflr 0
212 mfcr 12
213 mfsprg 4,0
214 lwz 4,PC_CURTHREAD(4)
215 lwz 4,TD_PCB(4)
216 stw 3,PCB_ONFAULT(4)
217 stw 0,0(3)
218 stw 1,4(3)
219 stw 2,8(3)
220 stmw 12,12(3)
221 xor 3,3,3
222 blr
223
224 #include <powerpc/powerpc/trap_subr.S>
Cache object: f1912da26f5b7c7434e37db62cf651a6
|