| 1510 | } |
| 1511 | |
| 1512 | void |
| 1513 | pmap_kremove_device(vm_offset_t sva, vm_size_t size) |
| 1514 | { |
| 1515 | pt_entry_t *pte; |
| 1516 | vm_offset_t va; |
| 1517 | int lvl; |
| 1518 | |
| 1519 | KASSERT((sva & L3_OFFSET) == 0, |
| 1520 | ("pmap_kremove_device: Invalid virtual address")); |
| 1521 | KASSERT((size & PAGE_MASK) == 0, |
| 1522 | ("pmap_kremove_device: Mapping is not page-sized")); |
| 1523 | |
| 1524 | va = sva; |
| 1525 | while (size != 0) { |
| 1526 | pte = pmap_pte(kernel_pmap, va, &lvl); |
| 1527 | KASSERT(pte != NULL, ("Invalid page table, va: 0x%lx", va)); |
| 1528 | KASSERT(lvl == 3, |
| 1529 | ("Invalid device pagetable level: %d != 3", lvl)); |
| 1530 | pmap_clear(pte); |
| 1531 | |
| 1532 | va += PAGE_SIZE; |
| 1533 | size -= PAGE_SIZE; |
| 1534 | } |
| 1535 | pmap_invalidate_range(kernel_pmap, sva, va); |
| 1536 | } |
| 1537 | |
| 1538 | /* |
| 1539 | * Used to map a range of physical addresses into kernel |
nothing calls this directly
no test coverage detected