Return to bugcrt.c CVS log | Up to [local] / sys / arch / mvme68k / stand / bugcrt |
File: [local] / sys / arch / mvme68k / stand / bugcrt / bugcrt.c (download)
Revision 1.1.1.1 (vendor branch), Tue Mar 4 16:07:37 2008 UTC (16 years, 6 months ago) by nbrk
Import of OpenBSD 4.2 release kernel tree with initial code to support Jornada 720/728, StrongARM 1110-based handheld PC. At this point kernel roots on NFS and boots into vfs_mountroot() and traps. What is supported: - glass console, Jornada framebuffer (jfb) works in 16bpp direct color mode (needs some palette tweaks for non black/white/blue colors, i think) - saic, SA11x0 interrupt controller (needs cleanup) - sacom, SA11x0 UART (supported only as boot console for now) - SA11x0 GPIO controller fully supported (but can't handle multiple interrupt handlers on one gpio pin) - sassp, SSP port on SA11x0 that attaches spibus - Jornada microcontroller (jmcu) to control kbd, battery, etc throught the SPI bus (wskbd attaches on jmcu, but not tested) - tod functions seem work - initial code for SA-1111 (chip companion) : this is TODO Next important steps, i think: - gpio and intc on sa1111 - pcmcia support for sa11x0 (and sa1111 help logic) - REAL root on nfs when we have PCMCIA support (we may use any of supported pccard NICs) - root on wd0! (using already supported PCMCIA-ATA) |
/* $OpenBSD: bugcrt.c,v 1.5 2003/08/20 00:25:08 deraadt Exp $ */ #include <sys/types.h> #include <machine/prom.h> #include "libbug.h" #include "stand.h" void __main(void); void start(void); struct mvmeprom_args bugargs = { 1 }; /* not in BSS */ asm (".text"); asm (".long _start-0x10"); asm (".long _start"); void start(void) { register int dev_lun asm (MVMEPROM_REG_DEVLUN); register int ctrl_lun asm (MVMEPROM_REG_CTRLLUN); register int flags asm (MVMEPROM_REG_FLAGS); register int ctrl_addr asm (MVMEPROM_REG_CTRLADDR); register int entry asm (MVMEPROM_REG_ENTRY); register int conf_blk asm (MVMEPROM_REG_CONFBLK); register char *arg_start asm (MVMEPROM_REG_ARGSTART); register char *arg_end asm (MVMEPROM_REG_ARGEND); register char *nbarg_start asm (MVMEPROM_REG_NBARGSTART); register char *nbarg_end asm (MVMEPROM_REG_NBARGEND); extern int edata, end; struct mvmeprom_brdid *id, *mvmeprom_getbrdid(void); bugargs.dev_lun = dev_lun; bugargs.ctrl_lun = ctrl_lun; bugargs.flags = flags; bugargs.ctrl_addr = ctrl_addr; bugargs.entry = entry; bugargs.conf_blk = conf_blk; bugargs.arg_start = arg_start; bugargs.arg_end = arg_end; bugargs.nbarg_start = nbarg_start; bugargs.nbarg_end = nbarg_end; *bugargs.arg_end = 0; bzero(&edata, (int)&end-(int)&edata); id = mvmeprom_getbrdid(); bugargs.cputyp = id->model; main(); _rtt(); /* NOTREACHED */ } void __main(void) { } void bugexec(void (*addr)(void)) { register int dev_lun asm (MVMEPROM_REG_DEVLUN); register int ctrl_lun asm (MVMEPROM_REG_CTRLLUN); register int flags asm (MVMEPROM_REG_FLAGS); register int ctrl_addr asm (MVMEPROM_REG_CTRLADDR); register int entry asm (MVMEPROM_REG_ENTRY); register int conf_blk asm (MVMEPROM_REG_CONFBLK); register char *arg_start asm (MVMEPROM_REG_ARGSTART); register char *arg_end asm (MVMEPROM_REG_ARGEND); dev_lun = bugargs.dev_lun; ctrl_lun = bugargs.ctrl_lun; flags = bugargs.flags; ctrl_addr = bugargs.ctrl_addr; entry = bugargs.entry; conf_blk = bugargs.conf_blk; arg_start = bugargs.arg_start; arg_end = bugargs.arg_end; (*addr)(); printf("bugexec: 0x%x returned!\n", addr); _rtt(); }