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 * File-scope for locore.S 97 */ 98idle_u: 99 .long 0 /* fake uarea during idle after exit */ 100openfirmware_entry: 101 .long 0 /* openfirmware entry point */ 102srsave: 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 111kernel_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 1261: 127#endif 128 li 8,0 129 li 9,0x100 130 mtctr 9 1311: 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 198setfault: 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> 213