+extern void *last_kernel_symbol;
+
+#define LG_PPNUM_PAGES (I386_LPGBYTES >> PAGE_SHIFT)
+#define LG_PPNUM_MASK (I386_LPGMASK >> PAGE_SHIFT)
+
+/* set so no region large page fragment pages exist */
+#define RESET_FRAG(r) (((r)->alloc_frag_up = 1), ((r)->alloc_frag_down = 0))
+
+boolean_t memmap = FALSE;
+#if DEBUG || DEVELOPMENT
+static void
+kprint_memmap(vm_offset_t maddr, unsigned int msize, unsigned int mcount)
+{
+ unsigned int i;
+ unsigned int j;
+ pmap_memory_region_t *p = pmap_memory_regions;
+ EfiMemoryRange *mptr;
+ addr64_t region_start, region_end;
+ addr64_t efi_start, efi_end;
+
+ for (j = 0; j < pmap_memory_region_count; j++, p++) {
+ kprintf("pmap region %d type %d base 0x%llx alloc_up 0x%llx alloc_down 0x%llx"
+ " alloc_frag_up 0x%llx alloc_frag_down 0x%llx top 0x%llx\n",
+ j, p->type,
+ (addr64_t) p->base << I386_PGSHIFT,
+ (addr64_t) p->alloc_up << I386_PGSHIFT,
+ (addr64_t) p->alloc_down << I386_PGSHIFT,
+ (addr64_t) p->alloc_frag_up << I386_PGSHIFT,
+ (addr64_t) p->alloc_frag_down << I386_PGSHIFT,
+ (addr64_t) p->end << I386_PGSHIFT);
+ region_start = (addr64_t) p->base << I386_PGSHIFT;
+ region_end = ((addr64_t) p->end << I386_PGSHIFT) - 1;
+ mptr = (EfiMemoryRange *) maddr;
+ for (i = 0;
+ i < mcount;
+ i++, mptr = (EfiMemoryRange *)(((vm_offset_t)mptr) + msize)) {
+ if (mptr->Type != kEfiLoaderCode &&
+ mptr->Type != kEfiLoaderData &&
+ mptr->Type != kEfiBootServicesCode &&
+ mptr->Type != kEfiBootServicesData &&
+ mptr->Type != kEfiConventionalMemory) {
+ efi_start = (addr64_t)mptr->PhysicalStart;
+ efi_end = efi_start + ((vm_offset_t)mptr->NumberOfPages << I386_PGSHIFT) - 1;
+ if ((efi_start >= region_start && efi_start <= region_end) ||
+ (efi_end >= region_start && efi_end <= region_end)) {
+ kprintf(" *** Overlapping region with EFI runtime region %d\n", i);
+ }
+ }
+ }
+ }
+}
+#define DPRINTF(x...) do { if (memmap) kprintf(x); } while (0)