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