MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_mapdev_attr

Function pmap_mapdev_attr

freebsd/kern/subr_devmap.c:294–321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

292
293#if defined(__aarch64__)
294void *
295pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma)
296{
297 vm_offset_t va, offset;
298 void * rva;
299
300 /* First look in the static mapping table. */
301 if ((rva = devmap_ptov(pa, size)) != NULL)
302 return (rva);
303
304 offset = pa & PAGE_MASK;
305 pa = trunc_page(pa);
306 size = round_page(size + offset);
307
308 if (early_boot) {
309 akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size);
310 va = akva_devmap_vaddr;
311 KASSERT(va >= (VM_MAX_KERNEL_ADDRESS - (PMAP_MAPDEV_EARLY_SIZE)),
312 ("Too many early devmap mappings 2"));
313 } else
314 va = kva_alloc(size);
315 if (!va)
316 panic("pmap_mapdev: Couldn't alloc kernel virtual memory");
317
318 pmap_kenter(va, size, pa, ma);
319
320 return ((void *)(va + offset));
321}
322#endif
323
324/*

Callers

nothing calls this directly

Calls 4

devmap_ptovFunction · 0.85
kva_allocFunction · 0.85
panicFunction · 0.70
pmap_kenterFunction · 0.50

Tested by

no test coverage detected