Changeset View
Changeset View
Standalone View
Standalone View
sys/powerpc/booke/pmap.c
Show First 20 Lines • Show All 343 Lines • ▼ Show 20 Lines | static void mmu_booke_dumpsys_map(vm_paddr_t pa, size_t, | ||||
void **); | void **); | ||||
static void mmu_booke_dumpsys_unmap(vm_paddr_t pa, size_t, | static void mmu_booke_dumpsys_unmap(vm_paddr_t pa, size_t, | ||||
void *); | void *); | ||||
static void mmu_booke_scan_init(void); | static void mmu_booke_scan_init(void); | ||||
static vm_offset_t mmu_booke_quick_enter_page(vm_page_t m); | static vm_offset_t mmu_booke_quick_enter_page(vm_page_t m); | ||||
static void mmu_booke_quick_remove_page(vm_offset_t addr); | static void mmu_booke_quick_remove_page(vm_offset_t addr); | ||||
static int mmu_booke_change_attr(vm_offset_t addr, | static int mmu_booke_change_attr(vm_offset_t addr, | ||||
vm_size_t sz, vm_memattr_t mode); | vm_size_t sz, vm_memattr_t mode); | ||||
static int mmu_booke_map_user_ptr(pmap_t pm, | |||||
volatile const void *uaddr, void **kaddr, size_t ulen, size_t *klen); | |||||
static int mmu_booke_decode_kernel_ptr(vm_offset_t addr, | static int mmu_booke_decode_kernel_ptr(vm_offset_t addr, | ||||
int *is_user, vm_offset_t *decoded_addr); | int *is_user, vm_offset_t *decoded_addr); | ||||
static void mmu_booke_page_array_startup(long); | static void mmu_booke_page_array_startup(long); | ||||
static boolean_t mmu_booke_page_is_mapped(vm_page_t m); | static boolean_t mmu_booke_page_is_mapped(vm_page_t m); | ||||
static struct pmap_funcs mmu_booke_methods = { | static struct pmap_funcs mmu_booke_methods = { | ||||
/* pmap dispatcher interface */ | /* pmap dispatcher interface */ | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | static struct pmap_funcs mmu_booke_methods = { | ||||
.mapdev = mmu_booke_mapdev, | .mapdev = mmu_booke_mapdev, | ||||
.mapdev_attr = mmu_booke_mapdev_attr, | .mapdev_attr = mmu_booke_mapdev_attr, | ||||
.kenter = mmu_booke_kenter, | .kenter = mmu_booke_kenter, | ||||
.kenter_attr = mmu_booke_kenter_attr, | .kenter_attr = mmu_booke_kenter_attr, | ||||
.kextract = mmu_booke_kextract, | .kextract = mmu_booke_kextract, | ||||
.kremove = mmu_booke_kremove, | .kremove = mmu_booke_kremove, | ||||
.unmapdev = mmu_booke_unmapdev, | .unmapdev = mmu_booke_unmapdev, | ||||
.change_attr = mmu_booke_change_attr, | .change_attr = mmu_booke_change_attr, | ||||
.map_user_ptr = mmu_booke_map_user_ptr, | |||||
.decode_kernel_ptr = mmu_booke_decode_kernel_ptr, | .decode_kernel_ptr = mmu_booke_decode_kernel_ptr, | ||||
/* dumpsys() support */ | /* dumpsys() support */ | ||||
.dumpsys_map_chunk = mmu_booke_dumpsys_map, | .dumpsys_map_chunk = mmu_booke_dumpsys_map, | ||||
.dumpsys_unmap_chunk = mmu_booke_dumpsys_unmap, | .dumpsys_unmap_chunk = mmu_booke_dumpsys_unmap, | ||||
.dumpsys_pa_init = mmu_booke_scan_init, | .dumpsys_pa_init = mmu_booke_scan_init, | ||||
}; | }; | ||||
▲ Show 20 Lines • Show All 779 Lines • ▼ Show 20 Lines | mmu_booke_kremove(vm_offset_t va) | ||||
tlb_miss_lock(); | tlb_miss_lock(); | ||||
/* Invalidate entry in TLB0, update PTE. */ | /* Invalidate entry in TLB0, update PTE. */ | ||||
tlb0_flush_entry(va); | tlb0_flush_entry(va); | ||||
*pte = 0; | *pte = 0; | ||||
tlb_miss_unlock(); | tlb_miss_unlock(); | ||||
mtx_unlock_spin(&tlbivax_mutex); | mtx_unlock_spin(&tlbivax_mutex); | ||||
} | |||||
/* | |||||
* Provide a kernel pointer corresponding to a given userland pointer. | |||||
* The returned pointer is valid until the next time this function is | |||||
* called in this thread. This is used internally in copyin/copyout. | |||||
*/ | |||||
int | |||||
mmu_booke_map_user_ptr(pmap_t pm, volatile const void *uaddr, | |||||
void **kaddr, size_t ulen, size_t *klen) | |||||
{ | |||||
if (trunc_page((uintptr_t)uaddr + ulen) > VM_MAXUSER_ADDRESS) | |||||
return (EFAULT); | |||||
*kaddr = (void *)(uintptr_t)uaddr; | |||||
if (klen) | |||||
*klen = ulen; | |||||
return (0); | |||||
} | } | ||||
/* | /* | ||||
* Figure out where a given kernel pointer (usually in a fault) points | * Figure out where a given kernel pointer (usually in a fault) points | ||||
* to from the VM's perspective, potentially remapping into userland's | * to from the VM's perspective, potentially remapping into userland's | ||||
* address space. | * address space. | ||||
*/ | */ | ||||
static int | static int | ||||
▲ Show 20 Lines • Show All 1,905 Lines • Show Last 20 Lines |