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