Annotation of sys/arch/hppa/stand/boot/srt0.S, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: srt0.S,v 1.10 2005/04/07 00:21:51 mickey 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: */
70: ENTRY(begin,0)
71:
72: blr %r0,%r5 ; Get address of 'boff' into 'r5',
73: ldo begin-boff(%r5),%r5 ; and subtract to get 'begin'.
74: boff
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
83: copyloop ; 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
93: zeroloop
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)
119: loop 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
132: EXIT(begin) /* jump to relocated code */
133:
134: start
135: ldil L%HEAP_LIMIT, %sp
136: ldo R%HEAP_LIMIT(%sp), %sp
137:
138: .import bootprompt, data
139: ldil L%bootprompt, t1
140: stw r26, R%bootprompt(t1)
141: b boot ; Call boot(),
142: copy %r0, arg0 ; use default boot device
143: nop
144:
145: /*
146: * rtt - restart the box
147: */
148: LEAF_ENTRY(_rtt)
149: ldil L%HPPA_LBCAST, %r25
150: ldi CMD_RESET, %r26
151: stw %r26,R%iomod_command(%r25)
152: forever ; Loop until bus reset takes effect.
153: b,n forever
154:
155: bv 0(rp)
156: ldo -48(sp),sp
157: EXIT(_rtt)
158:
159: .end
CVSweb