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

Function pmap_kenter

freebsd/arm64/arm64/pmap.c:1454–1486  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1452 ***************************************************/
1453
1454void
1455pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode)
1456{
1457 pd_entry_t *pde;
1458 pt_entry_t *pte, attr;
1459 vm_offset_t va;
1460 int lvl;
1461
1462 KASSERT((pa & L3_OFFSET) == 0,
1463 ("pmap_kenter: Invalid physical address"));
1464 KASSERT((sva & L3_OFFSET) == 0,
1465 ("pmap_kenter: Invalid virtual address"));
1466 KASSERT((size & PAGE_MASK) == 0,
1467 ("pmap_kenter: Mapping is not page-sized"));
1468
1469 attr = ATTR_DEFAULT | ATTR_S1_AP(ATTR_S1_AP_RW) | ATTR_S1_XN |
1470 ATTR_S1_IDX(mode) | L3_PAGE;
1471 va = sva;
1472 while (size != 0) {
1473 pde = pmap_pde(kernel_pmap, va, &lvl);
1474 KASSERT(pde != NULL,
1475 ("pmap_kenter: Invalid page entry, va: 0x%lx", va));
1476 KASSERT(lvl == 2, ("pmap_kenter: Invalid level %d", lvl));
1477
1478 pte = pmap_l2_to_l3(pde, va);
1479 pmap_load_store(pte, (pa & ~L3_OFFSET) | attr);
1480
1481 va += PAGE_SIZE;
1482 pa += PAGE_SIZE;
1483 size -= PAGE_SIZE;
1484 }
1485 pmap_invalidate_range(kernel_pmap, sva, va);
1486}
1487
1488void
1489pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa)

Callers 4

pmap_kenter_deviceFunction · 0.70
pmap_mapbiosFunction · 0.70
pmap_demote_l1Function · 0.70
pmap_demote_l2_lockedFunction · 0.70

Calls 3

pmap_l2_to_l3Function · 0.85
pmap_pdeFunction · 0.70
pmap_invalidate_rangeFunction · 0.70

Tested by

no test coverage detected