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