| 1452 | ***************************************************/ |
| 1453 | |
| 1454 | void |
| 1455 | pmap_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 | |
| 1488 | void |
| 1489 | pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa) |
no test coverage detected