]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/powerpc/aim/locore.S
This commit was generated by cvs2svn to compensate for changes in r102784,
[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  * File-scope for locore.S
97  */
98 idle_u:
99         .long   0                       /* fake uarea during idle after exit */
100 openfirmware_entry:
101         .long   0                       /* openfirmware entry point */
102 srsave:
103         .long   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
104
105 /*
106  * This symbol is here for the benefit of kvm_mkdb, and is supposed to
107  * mark the start of kernel text.
108  */
109         .text
110         .globl  kernel_text
111 kernel_text:
112
113 /*
114  * Startup entry.  Note, this must be the first thing in the text
115  * segment!
116  */
117         .text
118         .globl  __start
119 __start:
120 #ifdef  FIRMWORKSBUGS
121         mfmsr   0
122         andi.   0,0,PSL_IR|PSL_DR
123         beq     1f
124
125         bl      ofwr_init
126 1:
127 #endif
128         li      8,0
129         li      9,0x100
130         mtctr   9
131 1:
132         dcbf    0,8
133         icbi    0,8
134         addi    8,8,0x20
135         bdnz    1b
136         sync
137         isync
138
139         mtibatu 0,0
140         mtibatu 1,0
141         mtibatu 2,0
142         mtibatu 3,0
143         mtdbatu 0,0
144         mtdbatu 1,0
145         mtdbatu 2,0
146         mtdbatu 3,0
147
148         li      9,0x12
149         mtibatl 0,9
150         mtdbatl 0,9
151         li      9,0x1ffe
152         mtibatu 0,9
153         mtdbatu 0,9
154         isync
155
156         /* Save the argument pointer and length */
157         mr      20,6
158         mr      21,7
159
160         lis     8,openfirmware_entry@ha
161         stw     5,openfirmware_entry@l(8) /* save client interface handler */
162         mr      3,5
163
164         lis     1,tmpstk@ha
165         addi    1,1,tmpstk@l
166         addi    1,1,8192
167
168         mfmsr   0
169         lis     9,ofmsr@ha
170         stw     0,ofmsr@l(9)
171
172         bl      OF_init
173
174         lis     4,end@ha
175         addi    4,4,end@l
176         mr      5,4
177
178         lis     3,kernel_text@ha
179         addi    3,3,kernel_text@l
180
181         /* Restore the argument pointer and length */
182         mr      6,20
183         mr      7,21
184
185         bl      powerpc_init
186         bl      mi_startup
187         b       OF_exit
188
189 /*
190  * int setfault()
191  *
192  * Similar to setjmp to setup for handling faults on accesses to user memory.
193  * Any routine using this may only call bcopy, either the form below,
194  * or the (currently used) C code optimized, so it doesn't use any non-volatile
195  * registers.
196  */
197         .globl  setfault
198 setfault:
199         mflr    0
200         mfcr    12
201         mfsprg  4,0
202         lwz     4,PC_CURTHREAD(4)
203         lwz     4,TD_PCB(4)
204         stw     3,PCB_ONFAULT(4)
205         stw     0,0(3)
206         stw     1,4(3)
207         stw     2,8(3)
208         stmw    12,12(3)
209         xor     3,3,3
210         blr
211
212 #include <powerpc/powerpc/trap_subr.S>