Extract the common parts of pmap_kenter_device to a new function. This will
be used when superpage support is added. Obtained from: ABT Systems Ltd MFC after: 1 month Sponsored by: The FreeBSD Foundation
This commit is contained in:
parent
267c747003
commit
ed24579135
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=303592
@ -1037,8 +1037,8 @@ pmap_kextract(vm_offset_t va)
|
|||||||
* Low level mapping routines.....
|
* Low level mapping routines.....
|
||||||
***************************************************/
|
***************************************************/
|
||||||
|
|
||||||
void
|
static void
|
||||||
pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa)
|
pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode)
|
||||||
{
|
{
|
||||||
pd_entry_t *pde;
|
pd_entry_t *pde;
|
||||||
pt_entry_t *pte;
|
pt_entry_t *pte;
|
||||||
@ -1046,23 +1046,22 @@ pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa)
|
|||||||
int lvl;
|
int lvl;
|
||||||
|
|
||||||
KASSERT((pa & L3_OFFSET) == 0,
|
KASSERT((pa & L3_OFFSET) == 0,
|
||||||
("pmap_kenter_device: Invalid physical address"));
|
("pmap_kenter: Invalid physical address"));
|
||||||
KASSERT((sva & L3_OFFSET) == 0,
|
KASSERT((sva & L3_OFFSET) == 0,
|
||||||
("pmap_kenter_device: Invalid virtual address"));
|
("pmap_kenter: Invalid virtual address"));
|
||||||
KASSERT((size & PAGE_MASK) == 0,
|
KASSERT((size & PAGE_MASK) == 0,
|
||||||
("pmap_kenter_device: Mapping is not page-sized"));
|
("pmap_kenter: Mapping is not page-sized"));
|
||||||
|
|
||||||
va = sva;
|
va = sva;
|
||||||
while (size != 0) {
|
while (size != 0) {
|
||||||
pde = pmap_pde(kernel_pmap, va, &lvl);
|
pde = pmap_pde(kernel_pmap, va, &lvl);
|
||||||
KASSERT(pde != NULL,
|
KASSERT(pde != NULL,
|
||||||
("pmap_kenter_device: Invalid page entry, va: 0x%lx", va));
|
("pmap_kenter: Invalid page entry, va: 0x%lx", va));
|
||||||
KASSERT(lvl == 2,
|
KASSERT(lvl == 2, ("pmap_kenter: Invalid level %d", lvl));
|
||||||
("pmap_kenter_device: Invalid level %d", lvl));
|
|
||||||
|
|
||||||
pte = pmap_l2_to_l3(pde, va);
|
pte = pmap_l2_to_l3(pde, va);
|
||||||
pmap_load_store(pte, (pa & ~L3_OFFSET) | ATTR_DEFAULT |
|
pmap_load_store(pte, (pa & ~L3_OFFSET) | ATTR_DEFAULT |
|
||||||
ATTR_IDX(DEVICE_MEMORY) | L3_PAGE);
|
ATTR_IDX(mode) | L3_PAGE);
|
||||||
PTE_SYNC(pte);
|
PTE_SYNC(pte);
|
||||||
|
|
||||||
va += PAGE_SIZE;
|
va += PAGE_SIZE;
|
||||||
@ -1072,6 +1071,13 @@ pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa)
|
|||||||
pmap_invalidate_range(kernel_pmap, sva, va);
|
pmap_invalidate_range(kernel_pmap, sva, va);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
pmap_kenter_device(vm_offset_t sva, vm_size_t size, vm_paddr_t pa)
|
||||||
|
{
|
||||||
|
|
||||||
|
pmap_kenter(sva, size, pa, DEVICE_MEMORY);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove a page from the kernel pagetables.
|
* Remove a page from the kernel pagetables.
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user