mvme_bootstrap(void)
mvme_bootstrap()
mvme_bootstrap(void){	extern int kernelstart;	extern vm_offset_t size_memory(void);	extern struct consdev *cn_tab;	struct bugbrdid brdid;	cold = 1;  /* we are still booting */	/* zreo out the machine dependant function pointers */	bzero(&mdfp, sizeof(struct funcp));	buginit(); /* init the bug routines */	bugbrdid(&brdid);	cputyp = brdid.brdno;	/* to support the M8120.  It's based off of MVME187 */	if (cputyp == 0x8120)		cputyp = CPU_187;	/* 	 * set up interrupt and fp exception handlers 	 * based on the machine.	 */	switch (cputyp) {#ifdef MVME188	case CPU_188:		mdfp.interrupt_func = &m188_ext_int;		mdfp.fp_precise_func = &m88100_Xfp_precise;		/* clear and disable all interrupts */		*int_mask_reg[0] = 0;		*int_mask_reg[1] = 0;		*int_mask_reg[2] = 0;		*int_mask_reg[3] = 0;		break;#endif /* MVME188 */#ifdef MVME187	case CPU_187:		mdfp.interrupt_func = &sbc_ext_int;		mdfp.fp_precise_func = &m88100_Xfp_precise;		break;#endif /* MVME187 */#ifdef MVME197	case CPU_197:		mdfp.interrupt_func = &sbc_ext_int;		mdfp.fp_precise_func = &m88110_Xfp_precise;		set_tcfp(); /* Set Time Critical Floating Point Mode */		break;#endif /* MVME197 */	default:		panic("mvme_bootstrap: Can't determine cpu type.");	}	/* startup fake console driver.  It will be replaced by consinit() */	cn_tab = &bootcons;	uvmexp.pagesize = NBPG;	uvm_setpagesize();	first_addr = round_page(first_addr);	last_addr = size_memory();	cmmu_parity_enable();	identifycpu();	setup_board_config();	cmmu_init();	master_cpu = cmmu_cpu_number();	set_cpu_number(master_cpu);	printf("CPU%d is master CPU\n", master_cpu);#ifdef notevenclose	if (cputyp == CPU_188 && (boothowto & RB_MINIROOT)) {		int i;		for (i=0; i<MAX_CPUS; i++) {			if (!spin_cpu(i))				printf("CPU%d started\n", i);		}	}#endif 	avail_start = first_addr;	avail_end = last_addr;	/*	 * Steal MSGBUFSIZE at the top of physical memory for msgbuf	 */	avail_end -= round_page(MSGBUFSIZE);#ifdef DEBUG	printf("MVME%x boot: memory from 0x%x to 0x%x\n", cputyp, avail_start, avail_end);#endif 	pmap_bootstrap((vm_offset_t)trunc_page((unsigned)&kernelstart) /* = loadpt */, 		       &avail_start, &avail_end, &virtual_avail,		       &virtual_end);	/*	 * Tell the VM system about available physical memory.  	 * mvme88k only has one segment.	 */	uvm_page_physload(atop(avail_start), atop(avail_end),			  atop(avail_start), atop(avail_end),VM_FREELIST_DEFAULT);		/*	 * Must initialize p_addr before autoconfig or	 * the fault handler will get a NULL reference.	 */	proc0.p_addr = proc0paddr;	curproc = &proc0;	curpcb = &proc0paddr->u_pcb;	/* Initialize cached PTEs for u-area mapping. */	save_u_area(&proc0, (vm_offset_t)proc0paddr);	/*	 * Map proc0's u-area at the standard address (UADDR).	 */	load_u_area(&proc0);	/* Initialize the "u-area" pages. */	bzero((caddr_t)UADDR, UPAGES*NBPG);#ifdef DEBUG	printf("leaving mvme_bootstrap()\n");#endif }