summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>1999-09-11 20:31:32 +0000
committerPeter Wemm <peter@FreeBSD.org>1999-09-11 20:31:32 +0000
commit1a16554b8f19ee207005be4a179f5449b4716853 (patch)
tree675bc4ada9ac834ce07a28a2ac33a46174263dff
parentf273033f6006e5a2d77a14e3be5f76f695160888 (diff)
Notes
-rw-r--r--sys/amd64/amd64/pmap.c20
-rw-r--r--sys/amd64/include/pmap.h1
-rw-r--r--sys/i386/i386/pmap.c20
-rw-r--r--sys/i386/include/pmap.h1
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