-
-#ifdef BOOTDEBUG
-/*
- * Bootstrap the system enough to run with virtual memory.
- * Map the kernel's code and data, and allocate the system page table.
- *
- * On the HP this is called after mapping has already been enabled
- * and just syncs the pmap module with what has already been done.
- * [We can't call it easily with mapping off since the kernel is not
- * mapped with PA == VA, hence we would have to relocate every address
- * from the linked base (virtual) address 0 to the actual (physical)
- * address of 0xFFxxxxxx.]
- */
-void
-Opmap_bootstrap(firstaddr, loadaddr)
- vm_offset_t firstaddr;
- vm_offset_t loadaddr;
-{
-#if BSDVM_COMPAT
- vm_offset_t va;
- struct pte *pte;
-#endif
-
- avail_start = firstaddr;
- avail_end = maxmem << PGSHIFT;
-
-#if BSDVM_COMPAT
- /* XXX: allow for msgbuf */
- avail_end -= luna_round_page(sizeof(struct msgbuf));
-#endif
-
- mem_size = physmem << PGSHIFT;
- virtual_avail = VM_MIN_KERNEL_ADDRESS + (firstaddr - loadaddr);
- virtual_end = VM_MAX_KERNEL_ADDRESS;
-#if defined(DYNPGSIZE)
- lunapagesperpage = PAGE_SIZE / LUNA_PAGE_SIZE;
-#endif
- /*
- * Initialize protection array.
- */
- {
- register int *kp, prot;
-
- kp = protection_codes;
- for (prot = 0; prot < 8; prot++) {
- switch (prot) {
- case VM_PROT_NONE | VM_PROT_NONE | VM_PROT_NONE:
- *kp++ = 0;
- break;
- case VM_PROT_READ | VM_PROT_NONE | VM_PROT_NONE:
- case VM_PROT_READ | VM_PROT_NONE | VM_PROT_EXECUTE:
- case VM_PROT_NONE | VM_PROT_NONE | VM_PROT_EXECUTE:
- *kp++ = PG_RO;
- break;
- case VM_PROT_NONE | VM_PROT_WRITE | VM_PROT_NONE:
- case VM_PROT_NONE | VM_PROT_WRITE | VM_PROT_EXECUTE:
- case VM_PROT_READ | VM_PROT_WRITE | VM_PROT_NONE:
- case VM_PROT_READ | VM_PROT_WRITE | VM_PROT_EXECUTE:
- *kp++ = PG_RW;
- break;
- }
- }
- }
- /*
- * Kernel page/segment table allocated in locore,
- * just initialize pointers.
- */
- kernel_pmap->pm_stab = Sysseg;
- kernel_pmap->pm_ptab = Sysmap;
-
- simple_lock_init(&kernel_pmap->pm_lock);
- kernel_pmap->pm_count = 1;
-
-#if BSDVM_COMPAT
- /*
- * Allocate all the submaps we need
- */
-#define SYSMAP(c, p, v, n) \
- v = (c)va; va += ((n)*LUNA_PAGE_SIZE); p = pte; pte += (n);
-
- va = virtual_avail;
- pte = &Sysmap[luna_btop(va)];
-
- SYSMAP(caddr_t ,CMAP1 ,CADDR1 ,1 )
- SYSMAP(caddr_t ,CMAP2 ,CADDR2 ,1 )
- SYSMAP(caddr_t ,mmap ,vmmap ,1 )
- SYSMAP(struct msgbuf * ,msgbufmap ,msgbufp ,1 )
- virtual_avail = va;
-#undef SYSMAP
-#endif
-}
-#endif