Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/subr_devmap.c
Show First 20 Lines • Show All 281 Lines • ▼ Show 20 Lines | #endif | ||||
if (!va) | if (!va) | ||||
panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); | panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); | ||||
pmap_kenter_device(va, size, pa); | pmap_kenter_device(va, size, pa); | ||||
return ((void *)(va + offset)); | return ((void *)(va + offset)); | ||||
} | } | ||||
#if defined(__aarch64__) | |||||
void * | |||||
pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma) | |||||
{ | |||||
vm_offset_t va, offset; | |||||
void * rva; | |||||
/* First look in the static mapping table. */ | |||||
if ((rva = devmap_ptov(pa, size)) != NULL) | |||||
return (rva); | |||||
offset = pa & PAGE_MASK; | |||||
pa = trunc_page(pa); | |||||
size = round_page(size + offset); | |||||
if (early_boot) { | |||||
akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size); | |||||
va = akva_devmap_vaddr; | |||||
KASSERT(va >= VM_MAX_KERNEL_ADDRESS - L2_SIZE, | |||||
("Too many early devmap mappings")); | |||||
} else | |||||
va = kva_alloc(size); | |||||
if (!va) | |||||
panic("pmap_mapdev: Couldn't alloc kernel virtual memory"); | |||||
pmap_kenter(va, size, pa, ma); | |||||
return ((void *)(va + offset)); | |||||
} | |||||
#endif | |||||
/* | /* | ||||
* Unmap device memory and free the kva space. | * Unmap device memory and free the kva space. | ||||
*/ | */ | ||||
void | void | ||||
pmap_unmapdev(vm_offset_t va, vm_size_t size) | pmap_unmapdev(vm_offset_t va, vm_size_t size) | ||||
{ | { | ||||
vm_offset_t offset; | vm_offset_t offset; | ||||
Show All 22 Lines |