diff options
| author | Peter Wemm <peter@FreeBSD.org> | 1999-09-11 20:31:32 +0000 |
|---|---|---|
| committer | Peter Wemm <peter@FreeBSD.org> | 1999-09-11 20:31:32 +0000 |
| commit | 1a16554b8f19ee207005be4a179f5449b4716853 (patch) | |
| tree | 675bc4ada9ac834ce07a28a2ac33a46174263dff | |
| parent | f273033f6006e5a2d77a14e3be5f76f695160888 (diff) | |
Notes
| -rw-r--r-- | sys/amd64/amd64/pmap.c | 20 | ||||
| -rw-r--r-- | sys/amd64/include/pmap.h | 1 | ||||
| -rw-r--r-- | sys/i386/i386/pmap.c | 20 | ||||
| -rw-r--r-- | sys/i386/include/pmap.h | 1 |
4 files changed, 36 insertions, 6 deletions
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 6129ed86f48f..ac9cd3c19a8f 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -3280,10 +3280,11 @@ pmap_mapdev(pa, size) vm_offset_t pa; vm_size_t size; { - vm_offset_t va, tmpva; + vm_offset_t va, tmpva, offset; unsigned *pte; - size = roundup(size, PAGE_SIZE); + offset = pa & PAGE_MASK; + size = roundup(offset + size, PAGE_SIZE); va = kmem_alloc_pageable(kernel_map, size); #if !defined(MAX_PERF) @@ -3301,7 +3302,20 @@ pmap_mapdev(pa, size) } invltlb(); - return ((void *) va); + return ((void *)(va + offset)); +} + +void +pmap_unmapdev(va, size) + vm_offset_t va; + vm_size_t size; +{ + vm_offset_t base, offset; + + base = va & PG_FRAME; + offset = va & PAGE_MASK; + size = roundup(offset + size, PAGE_SIZE); + kmem_free(kernel_map, base, size); } /* diff --git a/sys/amd64/include/pmap.h b/sys/amd64/include/pmap.h index b9f3f745a4e7..bb617abe193f 100644 --- a/sys/amd64/include/pmap.h +++ b/sys/amd64/include/pmap.h @@ -253,6 +253,7 @@ extern vm_offset_t virtual_end; void pmap_bootstrap __P(( vm_offset_t, vm_offset_t)); pmap_t pmap_kernel __P((void)); void *pmap_mapdev __P((vm_offset_t, vm_size_t)); +void pmap_unmapdev __P((vm_offset_t, vm_size_t)); unsigned *pmap_pte __P((pmap_t, vm_offset_t)) __pure2; vm_page_t pmap_use_pt __P((pmap_t, vm_offset_t)); #ifdef SMP diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index 6129ed86f48f..ac9cd3c19a8f 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -3280,10 +3280,11 @@ pmap_mapdev(pa, size) vm_offset_t pa; vm_size_t size; { - vm_offset_t va, tmpva; + vm_offset_t va, tmpva, offset; unsigned *pte; - size = roundup(size, PAGE_SIZE); + offset = pa & PAGE_MASK; + size = roundup(offset + size, PAGE_SIZE); va = kmem_alloc_pageable(kernel_map, size); #if !defined(MAX_PERF) @@ -3301,7 +3302,20 @@ pmap_mapdev(pa, size) } invltlb(); - return ((void *) va); + return ((void *)(va + offset)); +} + +void +pmap_unmapdev(va, size) + vm_offset_t va; + vm_size_t size; +{ + vm_offset_t base, offset; + + base = va & PG_FRAME; + offset = va & PAGE_MASK; + size = roundup(offset + size, PAGE_SIZE); + kmem_free(kernel_map, base, size); } /* diff --git a/sys/i386/include/pmap.h b/sys/i386/include/pmap.h index b9f3f745a4e7..bb617abe193f 100644 --- a/sys/i386/include/pmap.h +++ b/sys/i386/include/pmap.h @@ -253,6 +253,7 @@ extern vm_offset_t virtual_end; void pmap_bootstrap __P(( vm_offset_t, vm_offset_t)); pmap_t pmap_kernel __P((void)); void *pmap_mapdev __P((vm_offset_t, vm_size_t)); +void pmap_unmapdev __P((vm_offset_t, vm_size_t)); unsigned *pmap_pte __P((pmap_t, vm_offset_t)) __pure2; vm_page_t pmap_use_pt __P((pmap_t, vm_offset_t)); #ifdef SMP |
