void cpu_physwindow_init(int cpu) { cpu_data_t *cdp = cpu_data_ptr[cpu]; cpu_desc_index_t *cdi = &cdp->cpu_desc_index; vm_offset_t phys_window; if (vm_allocate(kernel_map, &phys_window, PAGE_SIZE, VM_FLAGS_ANYWHERE) != KERN_SUCCESS) panic("cpu_physwindow_init: couldn't allocate phys map window"); /* * make sure the page that encompasses the * pte pointer we're interested in actually * exists in the page table */ pmap_expand(kernel_pmap, phys_window); cdp->cpu_physwindow_base = phys_window; cdp->cpu_physwindow_ptep = vtopte(phys_window); cdi->cdi_gdt[sel_idx(PHYS_WINDOW_SEL)] = physwindow_desc_pattern; cdi->cdi_gdt[sel_idx(PHYS_WINDOW_SEL)].offset = phys_window; fix_desc(&cdi->cdi_gdt[sel_idx(PHYS_WINDOW_SEL)], 1); }
void kdp_machine_init(void) { pt_entry_t *debugger_ptep; vm_map_offset_t debugger_window_kva; if (debug_boot_arg == 0) return; vm_map_entry_t e; kern_return_t kr = vm_map_find_space(kernel_map, &debugger_window_kva, PAGE_SIZE, 0, VM_MAKE_TAG(VM_MEMORY_IOKIT), &e); if (kr != KERN_SUCCESS) { panic("%s: vm_map_find_space failed with %d\n", __FUNCTION__, kr); } vm_map_unlock(kernel_map); debugger_ptep = pmap_pte(kernel_pmap, debugger_window_kva); if (debugger_ptep == NULL) { pmap_expand(kernel_pmap, debugger_window_kva); debugger_ptep = pmap_pte(kernel_pmap, debugger_window_kva); } }