]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/powerpc/aim/locore.S
This commit was generated by cvs2svn to compensate for changes in r106121,
[FreeBSD/FreeBSD.git] / sys / powerpc / aim / locore.S
1 /* $FreeBSD$ */
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>