Home | History | Annotate | Line # | Download | only in libbug
bugcrt.c revision 1.1.2.2
      1  1.1.2.2  bouyer /*	$NetBSD: bugcrt.c,v 1.1.2.2 2000/11/20 20:15:29 bouyer Exp $	*/
      2  1.1.2.2  bouyer 
      3  1.1.2.2  bouyer #include <sys/types.h>
      4  1.1.2.2  bouyer #include <machine/prom.h>
      5  1.1.2.2  bouyer 
      6  1.1.2.2  bouyer #include "libbug.h"
      7  1.1.2.2  bouyer 
      8  1.1.2.2  bouyer struct mvmeprom_args bugargs = { 1 };	/* not in BSS */
      9  1.1.2.2  bouyer 
     10  1.1.2.2  bouyer 	asm (".text");
     11  1.1.2.2  bouyer 	asm (".long _start-0x10");
     12  1.1.2.2  bouyer 	asm (".long _start");
     13  1.1.2.2  bouyer start()
     14  1.1.2.2  bouyer {
     15  1.1.2.2  bouyer 	register int dev_lun asm (MVMEPROM_REG_DEVLUN);
     16  1.1.2.2  bouyer 	register int ctrl_lun asm (MVMEPROM_REG_CTRLLUN);
     17  1.1.2.2  bouyer 	register int flags asm (MVMEPROM_REG_FLAGS);
     18  1.1.2.2  bouyer 	register int ctrl_addr asm (MVMEPROM_REG_CTRLADDR);
     19  1.1.2.2  bouyer 	register int entry asm (MVMEPROM_REG_ENTRY);
     20  1.1.2.2  bouyer 	register int conf_blk asm (MVMEPROM_REG_CONFBLK);
     21  1.1.2.2  bouyer 	register char *arg_start asm (MVMEPROM_REG_ARGSTART);
     22  1.1.2.2  bouyer 	register char *arg_end asm (MVMEPROM_REG_ARGEND);
     23  1.1.2.2  bouyer 	register char *nbarg_start asm (MVMEPROM_REG_NBARGSTART);
     24  1.1.2.2  bouyer 	register char *nbarg_end asm (MVMEPROM_REG_NBARGEND);
     25  1.1.2.2  bouyer 	extern int edata, end;
     26  1.1.2.2  bouyer 	struct mvmeprom_brdid *id, *mvmeprom_getbrdid();
     27  1.1.2.2  bouyer 
     28  1.1.2.2  bouyer 	bugargs.dev_lun = dev_lun;
     29  1.1.2.2  bouyer 	bugargs.ctrl_lun = ctrl_lun;
     30  1.1.2.2  bouyer 	bugargs.flags = flags;
     31  1.1.2.2  bouyer 	bugargs.ctrl_addr = ctrl_addr;
     32  1.1.2.2  bouyer 	bugargs.entry = entry;
     33  1.1.2.2  bouyer 	bugargs.conf_blk = conf_blk;
     34  1.1.2.2  bouyer 	bugargs.arg_start = arg_start;
     35  1.1.2.2  bouyer 	bugargs.arg_end = arg_end;
     36  1.1.2.2  bouyer 	bugargs.nbarg_start = nbarg_start;
     37  1.1.2.2  bouyer 	bugargs.nbarg_end = nbarg_end;
     38  1.1.2.2  bouyer 
     39  1.1.2.2  bouyer 	/*
     40  1.1.2.2  bouyer 	 * Be sure not to de-reference NULL
     41  1.1.2.2  bouyer 	 */
     42  1.1.2.2  bouyer 	if ( bugargs.arg_end )
     43  1.1.2.2  bouyer 		*bugargs.arg_end = 0;
     44  1.1.2.2  bouyer 
     45  1.1.2.2  bouyer 	bzero(&edata, (int)&end-(int)&edata);
     46  1.1.2.2  bouyer 	id = mvmeprom_getbrdid();
     47  1.1.2.2  bouyer 	bugargs.cputyp = id->model;
     48  1.1.2.2  bouyer 	main();
     49  1.1.2.2  bouyer 	_rtt();
     50  1.1.2.2  bouyer 	/* NOTREACHED */
     51  1.1.2.2  bouyer }
     52  1.1.2.2  bouyer 
     53  1.1.2.2  bouyer __main()
     54  1.1.2.2  bouyer {
     55  1.1.2.2  bouyer }
     56  1.1.2.2  bouyer 
     57  1.1.2.2  bouyer 
     58  1.1.2.2  bouyer void
     59  1.1.2.2  bouyer bugexec(addr)
     60  1.1.2.2  bouyer 
     61  1.1.2.2  bouyer void (*addr)();
     62  1.1.2.2  bouyer 
     63  1.1.2.2  bouyer {
     64  1.1.2.2  bouyer 	register int dev_lun asm (MVMEPROM_REG_DEVLUN);
     65  1.1.2.2  bouyer 	register int ctrl_lun asm (MVMEPROM_REG_CTRLLUN);
     66  1.1.2.2  bouyer 	register int flags asm (MVMEPROM_REG_FLAGS);
     67  1.1.2.2  bouyer 	register int ctrl_addr asm (MVMEPROM_REG_CTRLADDR);
     68  1.1.2.2  bouyer 	register int entry asm (MVMEPROM_REG_ENTRY);
     69  1.1.2.2  bouyer 	register int conf_blk asm (MVMEPROM_REG_CONFBLK);
     70  1.1.2.2  bouyer 	register char *arg_start asm (MVMEPROM_REG_ARGSTART);
     71  1.1.2.2  bouyer 	register char *arg_end asm (MVMEPROM_REG_ARGEND);
     72  1.1.2.2  bouyer 
     73  1.1.2.2  bouyer 	dev_lun = bugargs.dev_lun;
     74  1.1.2.2  bouyer 	ctrl_lun = bugargs.ctrl_lun;
     75  1.1.2.2  bouyer 	flags = bugargs.flags;
     76  1.1.2.2  bouyer 	ctrl_addr = bugargs.ctrl_addr;
     77  1.1.2.2  bouyer 	entry = bugargs.entry;
     78  1.1.2.2  bouyer 	conf_blk = bugargs.conf_blk;
     79  1.1.2.2  bouyer 	arg_start = bugargs.arg_start;
     80  1.1.2.2  bouyer 	arg_end = bugargs.arg_end;
     81  1.1.2.2  bouyer 
     82  1.1.2.2  bouyer 	(*addr)();
     83  1.1.2.2  bouyer 	printf("bugexec: 0x%x returned!\n", addr);
     84  1.1.2.2  bouyer 
     85  1.1.2.2  bouyer 	_rtt();
     86  1.1.2.2  bouyer }
     87  1.1.2.2  bouyer 
     88