1/* $OpenBSD: srt0.S,v 1.11 2011/04/17 09:49:48 kettenis Exp $ */ 2 3/* 4 * Copyright (c) 1998-2004 Michael Shalayeff 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT, 20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 25 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 26 * THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28/* 29 * Copyright 1996 1995 by Open Software Foundation, Inc. 30 * All Rights Reserved 31 * 32 * Permission to use, copy, modify, and distribute this software and 33 * its documentation for any purpose and without fee is hereby granted, 34 * provided that the above copyright notice appears in all copies and 35 * that both the copyright notice and this permission notice appear in 36 * supporting documentation. 37 * 38 * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE 39 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 40 * FOR A PARTICULAR PURPOSE. 41 * 42 * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR 43 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 44 * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT, 45 * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 46 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 47 * 48 */ 49; 50; Copyright (c) 1990 mt Xinu, Inc. All rights reserved. 51; Copyright (c) 1990 University of Utah. All rights reserved. 52; 53; This file may be freely distributed in any form as long as 54; this copyright notice is included. 55; THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR 56; IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED 57; WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. 58; 59; Utah $Hdr: srt0.c 1.3 94/12/13$ 60; 61 62#define _LOCORE 63#include <machine/asm.h> 64#include <machine/cpu.h> 65#include <machine/iomod.h> 66 67/* 68 * This is the ending of the begin 69 */ 70ENTRY(begin,0) 71 72 blr %r0,%r5 ; Get address of 'boff' into 'r5', 73 ldo begin-boff(%r5),%r5 ; and subtract to get 'begin'. 74boff 75 ldil L%RELOC,%r4 76 ldo R%RELOC(%r4),%r4 77 ldo start-begin(%r4),%rp 78 ldil L%edata,%r3 79 ldo R%edata(%r3),%r3 ; Get address of edata. 80 ldil L%begin,%r1 81 ldo R%begin(%r1),%r1 ; Get address of begin 82 sub %r3,%r1,%r3 ; Subtract to get # of bytes to copy 83copyloop ; do 84 ldwm 4(%r5),%r1 ; *r4++ = *r5++; 85 addib,>= -4,%r3,copyloop ; while (--r3 >= 0); 86 stwm %r1,4(%r4) 87 88 ; here we zero the .bss 89 ldil L%__bss_start, %r4 90 ldo R%__bss_start(%r4), %r4 91 ldil L%__bss_end, %r3 92 ldo R%__bss_end(%r3), %r3 93zeroloop 94 combf,<,n %r3,%r4, zeroloop ; while (r4 < r3); 95 stwm %r0,4(%r4) ; *r4++ = 0; 96 97 ldil L%$global$,%dp 98 ldo R%$global$(%dp),%dp 99 ldil L%start,%r1 100 ldo R%start(%r1),%r1 101 sub %dp,%r1,%dp ; Subtract to get difference 102 add %rp,%dp,%dp ; and relocate it. 103 104; 105; We have relocated ourself to RELOC. If we are running on a machine 106; with separate instruction and data caches, we must flush our data 107; cache before trying to execute the code starting at rp. 108; 109 ldil L%RELOC,%r22 ; Set %t1 to start of relocated code. 110 ldo R%RELOC(%r22),%r22 111 ldil L%edata,%r21 ; Set r21 to address of edata 112 ldo R%edata(%r21),%r21 113 ldil L%begin,%r1 ; set %r1 to address of begin 114 ldo R%begin(%r1),%r1 115 sub %r21,%r1,%r21 ; Subtract to get length 116 mtsp %r0,%sr0 ; Set sr0 to kernel space. 117 ldo -1(%r21),%r21 118 fdc %r21(0,%r22) 119loop addib,>,n -16,%r21,loop ; Decrement by cache line size (16). 120 fdc %r21(%sr0,%r22) 121 fdc 0(%sr0,%r22) ; Flush first word at addr to handle 122 sync ; arbitrary cache line boundary. 123 nop ; Prevent prefetching. 124 nop 125 nop 126 nop 127 nop 128 nop 129 nop 130 bv 0(rp) 131 nop 132EXIT(begin) /* jump to relocated code */ 133 134start 135 ldil L%HEAP_LIMIT, %sp 136 ldo R%HEAP_LIMIT(%sp), %sp 137 138 comb,= %r0, %r26, call_boot 139 nop 140 .import boottimeout, data 141 ldil L%boottimeout, %r22 142 stw %r0, R%boottimeout(%r22) 143 144call_boot 145 b boot ; Call boot(), 146 copy %r0, arg0 ; use default boot device 147 nop 148 149/* 150 * rtt - restart the box 151 */ 152LEAF_ENTRY(_rtt) 153 ldil L%HPPA_LBCAST, %r25 154 ldi CMD_RESET, %r26 155 stw %r26,R%iomod_command(%r25) 156forever ; Loop until bus reset takes effect. 157 b,n forever 158 159 bv 0(rp) 160 ldo -48(sp),sp 161EXIT(_rtt) 162 163 .end 164