xref: /freebsd/sys/powerpc/aim/locore.S (revision 71fe318b852b8dfb3e799cb12ef184750f7f8eac)
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
81GLOBAL(tmpstk)
82	.space	8208
83GLOBAL(esym)
84	.long	0			/* end of symbol table */
85
86GLOBAL(ofmsr)
87	.long	0			/* msr used in Open Firmware */
88
89GLOBAL(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 */
99GLOBAL(intrnames)
100	.asciz "dummy"
101GLOBAL(eintrnames)
102	.align 4
103GLOBAL(intrcnt)
104	.long 0
105GLOBAL(eintrcnt)
106
107/*
108 * File-scope for locore.S
109 */
110idle_u:
111	.long	0			/* fake uarea during idle after exit */
112openfirmware_entry:
113	.long	0			/* openfirmware entry point */
114srsave:
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
123kernel_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
1381:
139#endif
140	li	8,0
141	li	9,0x100
142	mtctr	9
1431:
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
210setfault:
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>
225