Annotation of sys/arch/hppa64/stand/boot/srt0.S, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: srt0.S,v 1.1 2005/04/01 10:40:48 mickey Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 2005 Michael Shalayeff
! 5: * All rights reserved.
! 6: *
! 7: * Permission to use, copy, modify, and distribute this software for any
! 8: * purpose with or without fee is hereby granted, provided that the above
! 9: * copyright notice and this permission notice appear in all copies.
! 10: *
! 11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 15: * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
! 16: * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
! 17: * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 18: */
! 19: /*
! 20: * Copyright 1996 1995 by Open Software Foundation, Inc.
! 21: * All Rights Reserved
! 22: *
! 23: * Permission to use, copy, modify, and distribute this software and
! 24: * its documentation for any purpose and without fee is hereby granted,
! 25: * provided that the above copyright notice appears in all copies and
! 26: * that both the copyright notice and this permission notice appear in
! 27: * supporting documentation.
! 28: *
! 29: * OSF DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
! 30: * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
! 31: * FOR A PARTICULAR PURPOSE.
! 32: *
! 33: * IN NO EVENT SHALL OSF BE LIABLE FOR ANY SPECIAL, INDIRECT, OR
! 34: * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
! 35: * LOSS OF USE, DATA OR PROFITS, WHETHER IN ACTION OF CONTRACT,
! 36: * NEGLIGENCE, OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
! 37: * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 38: *
! 39: */
! 40: ;
! 41: ; Copyright (c) 1990 mt Xinu, Inc. All rights reserved.
! 42: ; Copyright (c) 1990 University of Utah. All rights reserved.
! 43: ;
! 44: ; This file may be freely distributed in any form as long as
! 45: ; this copyright notice is included.
! 46: ; THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
! 47: ; IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
! 48: ; WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
! 49: ;
! 50: ; Utah $Hdr: srt0.c 1.3 94/12/13$
! 51: ;
! 52:
! 53: #define _LOCORE
! 54: #include <machine/iomod.h>
! 55: #include <machine/asm.h>
! 56: #include <machine/frame.h>
! 57:
! 58: /*
! 59: * This is the ending of the begin
! 60: */
! 61: ENTRY(begin,0)
! 62:
! 63: blr %r0,%r5 ; Get address of 'boff' into 'r5',
! 64: ldo begin-boff(%r5),%r5 ; and subtract to get 'begin'.
! 65: boff
! 66: ldil L%RELOC,%r4
! 67: ldo R%RELOC(%r4),%r4
! 68: ldo start-begin(%r4),%rp
! 69: ldil L%edata,%r3
! 70: ldo R%edata(%r3),%r3 ; Get address of edata.
! 71: ldil L%begin,%r1
! 72: ldo R%begin(%r1),%r1 ; Get address of begin
! 73: sub %r3,%r1,%r3 ; Subtract to get # of bytes to copy
! 74: copyloop ; do
! 75: ldwm 4(%r5),%r1 ; *r4++ = *r5++;
! 76: addib,>= -4,%r3,copyloop ; while (--r3 >= 0);
! 77: stwm %r1,4(%r4)
! 78:
! 79: ; here we zero the .bss
! 80: ldil L%__bss_start, %r4
! 81: ldo R%__bss_start(%r4), %r4
! 82: ldil L%__bss_end, %r3
! 83: ldo R%__bss_end(%r3), %r3
! 84: zeroloop
! 85: combf,<,n %r3,%r4, zeroloop ; while (r4 < r3);
! 86: stwm %r0,4(%r4) ; *r4++ = 0;
! 87:
! 88: ldil L%$global$,%dp
! 89: ldo R%$global$(%dp),%dp
! 90: ldil L%start,%r1
! 91: ldo R%start(%r1),%r1
! 92: sub %dp,%r1,%dp ; Subtract to get difference
! 93: add %rp,%dp,%dp ; and relocate it.
! 94:
! 95: ;
! 96: ; We have relocated ourself to RELOC. If we are running on a machine
! 97: ; with separate instruction and data caches, we must flush our data
! 98: ; cache before trying to execute the code starting at rp.
! 99: ;
! 100: ldil L%RELOC,%r22 ; Set %t1 to start of relocated code.
! 101: ldo R%RELOC(%r22),%r22
! 102: ldil L%edata,%r21 ; Set r21 to address of edata
! 103: ldo R%edata(%r21),%r21
! 104: ldil L%begin,%r1 ; set %r1 to address of begin
! 105: ldo R%begin(%r1),%r1
! 106: sub %r21,%r1,%r21 ; Subtract to get length
! 107: mtsp %r0,%sr0 ; Set sr0 to kernel space.
! 108: ldo -1(%r21),%r21
! 109: fdc %r21(0,%r22)
! 110: loop addib,>,n -16,%r21,loop ; Decrement by cache line size (16).
! 111: fdc %r21(%sr0,%r22)
! 112: fdc 0(%sr0,%r22) ; Flush first word at addr to handle
! 113: sync ; arbitrary cache line boundary.
! 114: nop ; Prevent prefetching.
! 115: nop
! 116: nop
! 117: nop
! 118: nop
! 119: nop
! 120: nop
! 121: bv 0(%rp)
! 122: nop
! 123: EXIT(begin) /* jump to relocated code */
! 124:
! 125: start
! 126: ldil L%HEAP_LIMIT, %sp
! 127: ldo R%HEAP_LIMIT(%sp), %sp
! 128:
! 129: .import bootprompt, data
! 130: ldil L%bootprompt, %r1
! 131: stw %arg0, R%bootprompt(%r1)
! 132: b boot ; Call boot(),
! 133: copy %r0, %arg0 ; use default boot device
! 134: nop
! 135:
! 136: /*
! 137: * rtt - restart the box
! 138: */
! 139: LEAF_ENTRY(_rtt)
! 140: ldil L%LBCAST_ADDR, %arg1
! 141: ldi CMD_RESET, %arg0
! 142: stw %arg0, R%iomod_command(%arg1)
! 143: forever ; Loop until bus reset takes effect.
! 144: b,n forever
! 145:
! 146: bv 0(%rp)
! 147: ldo -48(%sp),%sp
! 148: EXIT(_rtt)
! 149:
! 150: ENTRY(pdc_call,96)
! 151: copy %r3, %r1
! 152: std %rp, HPPA_FRAME_RP(%sp)
! 153: copy %sp, %r3
! 154: std,ma %r1, HPPA_FRAME_SIZE+8*4(%sp)
! 155:
! 156: copy %arg0, %r1
! 157: copy %arg1, %arg0
! 158: copy %arg2, %arg1
! 159: copy %arg3, %arg2
! 160: copy arg4, %arg3
! 161: stw arg5, -(32 + 4*(4 + 1))(%sp)
! 162: stw arg6, -(32 + 4*(5 + 1))(%sp)
! 163: stw arg7, -(32 + 4*(6 + 1))(%sp)
! 164: ldw 0(ap), arg5
! 165: ldw 8(ap), arg6
! 166: ldw 16(ap), arg7
! 167: stw arg5, -(32 + 4*(7 + 1))(%sp)
! 168: stw arg6, -(32 + 4*(8 + 1))(%sp)
! 169: stw arg7, -(32 + 4*(9 + 1))(%sp)
! 170:
! 171: .call
! 172: blr %r0, %rp
! 173: bv,n %r0(%r1)
! 174: nop
! 175:
! 176: ldd HPPA_FRAME_RP(%r3), %rp
! 177: bv %r0(%rp)
! 178: ldd,mb -(HPPA_FRAME_SIZE+8*4)(%sp), %r3
! 179: EXIT(pdc_call)
! 180:
! 181: .end
CVSweb