Implement pmap_mapdev.

This commit is contained in:
Benno Rice 2001-10-14 08:38:16 +00:00
parent 7947a33926
commit bdf71f568b
4 changed files with 82 additions and 0 deletions

View file

@ -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);
}

View file

@ -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));

View file

@ -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);
}

View file

@ -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);
}