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