Home | History | Annotate | Line # | Download | only in bootxxx
bootxxx.c revision 1.4.2.1
      1  1.4.2.1       jym /*	$NetBSD: bootxxx.c,v 1.4.2.1 2009/05/13 17:16:31 jym Exp $	*/
      2      1.1       leo 
      3      1.1       leo /*
      4      1.1       leo  * Copyright (c) 2001 Leo Weppelman.
      5      1.1       leo  * Copyright (c) 1995 Waldi Ravens.
      6      1.1       leo  * All rights reserved.
      7      1.1       leo  *
      8      1.1       leo  * Redistribution and use in source and binary forms, with or without
      9      1.1       leo  * modification, are permitted provided that the following conditions
     10      1.1       leo  * are met:
     11      1.1       leo  * 1. Redistributions of source code must retain the above copyright
     12      1.1       leo  *    notice, this list of conditions and the following disclaimer.
     13      1.1       leo  * 2. Redistributions in binary form must reproduce the above copyright
     14      1.1       leo  *    notice, this list of conditions and the following disclaimer in the
     15      1.1       leo  *    documentation and/or other materials provided with the distribution.
     16      1.1       leo  * 3. All advertising materials mentioning features or use of this software
     17      1.1       leo  *    must display the following acknowledgement:
     18      1.1       leo  *        This product includes software developed by Waldi Ravens.
     19      1.1       leo  * 4. The name of the author may not be used to endorse or promote products
     20      1.1       leo  *    derived from this software without specific prior written permission
     21      1.1       leo  *
     22      1.1       leo  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     23      1.1       leo  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     24      1.1       leo  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     25      1.1       leo  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     26      1.1       leo  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     27      1.1       leo  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     28      1.1       leo  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     29      1.1       leo  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     30      1.1       leo  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     31      1.1       leo  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     32      1.1       leo  */
     33      1.1       leo 
     34      1.1       leo #define	boot_BSD	bsd_startup
     35      1.1       leo 
     36      1.2  junyoung #include <lib/libsa/stand.h>
     37      1.1       leo #include <atari_stand.h>
     38      1.1       leo #include <libkern.h>
     39      1.1       leo #include <sys/boot_flag.h>
     40      1.1       leo #include <sys/reboot.h>
     41      1.1       leo #include <machine/cpu.h>
     42      1.1       leo #include <kparamb.h>
     43      1.1       leo #include <libtos.h>
     44      1.1       leo #include <tosdefs.h>
     45      1.1       leo 
     46      1.4   tsutsui int	bootxxx(void *, void *, osdsc_t *);
     47  1.4.2.1       jym void	boot_BSD(struct kparamb *)__attribute__((noreturn));
     48      1.1       leo 
     49      1.1       leo int
     50      1.1       leo bootxxx(readsector, disklabel, od)
     51      1.1       leo 	void	*readsector,
     52      1.1       leo 		*disklabel;
     53      1.1       leo 	osdsc_t	*od;
     54      1.1       leo {
     55      1.1       leo 	int		fd;
     56      1.1       leo 	char		*errmsg;
     57      1.1       leo 	extern char	end[], edata[];
     58      1.1       leo 
     59  1.4.2.1       jym 	memset(edata, 0, end - edata);
     60      1.1       leo 
     61      1.1       leo 	/* XXX: Limit should be 16MB */
     62      1.1       leo 	setheap(end, (void*)0x1000000);
     63      1.1       leo 	printf("\033v\nNetBSD/Atari tertiary bootloader "
     64  1.4.2.1       jym 					"($Revision: 1.4.2.1 $)\n\n");
     65      1.1       leo 
     66      1.1       leo 	if (init_dskio(readsector, disklabel, od->rootfs))
     67      1.1       leo 		return(-1);
     68      1.1       leo 
     69      1.1       leo 	sys_info(od);
     70      1.1       leo 	if (!(od->cputype & ATARI_ANYCPU)) {
     71      1.1       leo 		printf("Unknown CPU-type.\n");
     72      1.1       leo 		return(-2);
     73      1.1       leo 	}
     74      1.1       leo 
     75      1.1       leo 	if ((fd = open(od->osname, 0)) < 0) {
     76      1.1       leo 		printf("Cannot open kernel '%s'\n", od->osname);
     77      1.1       leo 		return (-3);
     78      1.1       leo 	}
     79      1.1       leo 
     80      1.1       leo #ifndef __ELF__		/* a.out */
     81      1.1       leo 	if (aout_load(fd, od, &errmsg, 1) != 0)
     82      1.1       leo #else
     83      1.1       leo 	if (elf_load(fd, od, &errmsg, 1) != 0)
     84      1.1       leo #endif
     85      1.1       leo 		return(-4);
     86      1.1       leo 
     87      1.1       leo 	boot_BSD(&od->kp);
     88      1.1       leo 	return(-5);
     89      1.1       leo 
     90      1.1       leo 	/* NOTREACHED */
     91      1.1       leo }
     92      1.1       leo 
     93      1.1       leo void
     94  1.4.2.1       jym _rtt(void)
     95      1.1       leo {
     96      1.1       leo 	printf("Halting...\n");
     97      1.1       leo 	for(;;)
     98      1.1       leo 		;
     99      1.1       leo }
    100