Annotation of sys/arch/hppa64/stand/boot/srt0.S, Revision 1.1.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