mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Implement pmap_mapdev.
This commit is contained in:
parent
7947a33926
commit
bdf71f568b
4 changed files with 82 additions and 0 deletions
|
|
@ -1897,3 +1897,30 @@ pmap_new_proc(struct proc *p)
|
|||
m->valid = VM_PAGE_BITS_ALL;
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
pmap_mapdev(vm_offset_t pa, vm_size_t len)
|
||||
{
|
||||
vm_offset_t faddr;
|
||||
vm_offset_t taddr, va;
|
||||
int off;
|
||||
|
||||
faddr = trunc_page(pa);
|
||||
off = pa - faddr;
|
||||
len = round_page(off + len);
|
||||
|
||||
GIANT_REQUIRED;
|
||||
|
||||
va = taddr = kmem_alloc_pageable(kernel_map, len);
|
||||
|
||||
if (va == 0)
|
||||
return NULL;
|
||||
|
||||
for (; len > 0; len -= PAGE_SIZE) {
|
||||
pmap_kenter(taddr, faddr);
|
||||
faddr += PAGE_SIZE;
|
||||
taddr += PAGE_SIZE;
|
||||
}
|
||||
|
||||
return (void *)(va + off);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,6 +96,7 @@ extern vm_offset_t virtual_avail;
|
|||
extern vm_offset_t virtual_end;
|
||||
|
||||
void pmap_bootstrap __P((void));
|
||||
void *pmap_mapdev __P((vm_offset_t, vm_size_t));
|
||||
void pmap_setavailmem __P((u_int kernelstart, u_int kernelend));
|
||||
vm_offset_t pmap_steal_memory __P((vm_size_t));
|
||||
boolean_t ptemodify __P((struct vm_page *, u_int, u_int));
|
||||
|
|
|
|||
|
|
@ -1897,3 +1897,30 @@ pmap_new_proc(struct proc *p)
|
|||
m->valid = VM_PAGE_BITS_ALL;
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
pmap_mapdev(vm_offset_t pa, vm_size_t len)
|
||||
{
|
||||
vm_offset_t faddr;
|
||||
vm_offset_t taddr, va;
|
||||
int off;
|
||||
|
||||
faddr = trunc_page(pa);
|
||||
off = pa - faddr;
|
||||
len = round_page(off + len);
|
||||
|
||||
GIANT_REQUIRED;
|
||||
|
||||
va = taddr = kmem_alloc_pageable(kernel_map, len);
|
||||
|
||||
if (va == 0)
|
||||
return NULL;
|
||||
|
||||
for (; len > 0; len -= PAGE_SIZE) {
|
||||
pmap_kenter(taddr, faddr);
|
||||
faddr += PAGE_SIZE;
|
||||
taddr += PAGE_SIZE;
|
||||
}
|
||||
|
||||
return (void *)(va + off);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1897,3 +1897,30 @@ pmap_new_proc(struct proc *p)
|
|||
m->valid = VM_PAGE_BITS_ALL;
|
||||
}
|
||||
}
|
||||
|
||||
void *
|
||||
pmap_mapdev(vm_offset_t pa, vm_size_t len)
|
||||
{
|
||||
vm_offset_t faddr;
|
||||
vm_offset_t taddr, va;
|
||||
int off;
|
||||
|
||||
faddr = trunc_page(pa);
|
||||
off = pa - faddr;
|
||||
len = round_page(off + len);
|
||||
|
||||
GIANT_REQUIRED;
|
||||
|
||||
va = taddr = kmem_alloc_pageable(kernel_map, len);
|
||||
|
||||
if (va == 0)
|
||||
return NULL;
|
||||
|
||||
for (; len > 0; len -= PAGE_SIZE) {
|
||||
pmap_kenter(taddr, faddr);
|
||||
faddr += PAGE_SIZE;
|
||||
taddr += PAGE_SIZE;
|
||||
}
|
||||
|
||||
return (void *)(va + off);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue