Home | History | Annotate | Line # | Download | only in common
      1 /* $NetBSD: start.S,v 1.14 2005/12/11 12:16:20 christos Exp $ */
      2 
      3 /*
      4  * Copyright (c) 1999 Christopher G. Demetriou.  All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. All advertising materials mentioning features or use of this software
     15  *    must display the following acknowledgement:
     16  *      This product includes software developed by Christopher G. Demetriou
     17  *	for the NetBSD Project.
     18  * 4. The name of the author may not be used to endorse or promote products
     19  *    derived from this software without specific prior written permission
     20  *
     21  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     22  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     23  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     24  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     25  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     26  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     27  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     28  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     29  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     30  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 /*
     34  * Mach Operating System
     35  * Copyright (c) 1992 Carnegie Mellon University
     36  * All Rights Reserved.
     37  *
     38  * Permission to use, copy, modify and distribute this software and its
     39  * documentation is hereby granted, provided that both the copyright
     40  * notice and this permission notice appear in all copies of the
     41  * software, derivative works or modified versions, and any portions
     42  * thereof, and that both notices appear in supporting documentation.
     43  *
     44  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
     45  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
     46  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
     47  *
     48  * Carnegie Mellon requests users of this software to return to
     49  *
     50  *  Software Distribution Coordinator  or  Software.Distribution (at) CS.CMU.EDU
     51  *  School of Computer Science
     52  *  Carnegie Mellon University
     53  *  Pittsburgh PA 15213-3890
     54  *
     55  * any improvements or extensions that they make and grant Carnegie Mellon
     56  * the rights to redistribute these changes.
     57  */
     58 
     59 #include "include/asm.h"
     60 
     61 /*
     62  * start --
     63  *	Entry point for boot/standalone programs.
     64  *
     65  * Unified and Primary Bootstrap arguments:
     66  *	None.
     67  *
     68  * Secondary Bootstrap arguments:
     69  *	a0		first free physical page
     70  *
     71  * Standalone program arguments:
     72  *
     73  *	a0		first free physical page
     74  *	a1		page table base register (PTBR)
     75  *	a2		bootinfo magic number
     76  *	a3		pointer to the bootinfo structure
     77  *	a4		bootinfo version number
     78  *
     79  * All bootstrap and standalone programs leave exception and interrupt
     80  * handling to the firmware, and run from the firmware-provided stack.
     81  * To return to the firmware, these programs simply invoke the 'halt'
     82  * PALcode operation.
     83  *
     84  * Bootstrap programs have to clear their own BSS.  Standalone programs
     85  * have their BSS cleared by the bootstraps.
     86  */
     87 	.text
     88 	.set	noreorder		/* don't reorder instructions */
     89 
     90 #define ENTRY_FRAME	32
     91 
     92 NESTED(start, 1, ENTRY_FRAME, ra, 0, 0)
     93 	br	pv,Lstartgp
     94 Lstartgp:
     95 	LDGP(pv)
     96 
     97 #if defined(STANDALONE_PROGRAM)
     98 
     99 	/*
    100 	 * save the arguments, invoke init_prom_calls() to set up console
    101 	 * callbacks and output, then restore the arguments.
    102 	 */
    103 	mov	a0, s0
    104 	mov	a1, s1
    105 	mov	a2, s2
    106 	mov	a3, s3
    107 	mov	a4, s4
    108 	CALL(init_prom_calls)
    109 	mov	s0, a0
    110 	mov	s1, a1
    111 	mov	s2, a2
    112 	mov	s3, a3
    113 	mov	s4, a4
    114 
    115 #else /* defined(STANDALONE_PROGRAM) */
    116 
    117 #if !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK)
    118 	lda	sp,start		/* start stack below text */
    119 	lda	sp,-ENTRY_FRAME(sp)
    120 
    121 	or	a0,zero,s0
    122 #endif /* !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK) */
    123 	lda	a0,_edata
    124 	xor	a1,a1,a1
    125 	lda	a2,_end
    126 	subq	a2,a0,a2
    127 	CALL(memset)
    128 #if !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK)
    129 	or	s0,zero,a0
    130 #endif /* !defined(PRIMARY_BOOTBLOCK) && !defined(UNIFIED_BOOTBLOCK) */
    131 
    132 #endif /* defined(STANDALONE_PROGRAM) */
    133 
    134 	CALL(main)			/* transfer to C */
    135 
    136 XLEAF(_rtt, 0)
    137 XLEAF(halt, 0)
    138 	call_pal PAL_halt		/* halt if we ever return */
    139 END(start)
    140