summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorskra <skra@FreeBSD.org>2016-02-02 21:10:55 +0000
committerskra <skra@FreeBSD.org>2016-02-02 21:10:55 +0000
commita6cb20ae14309c434280be518b3b8e4786b749b6 (patch)
treef139554d82162933a133fdced2b62bd3bf056e93
parent3e85ebe5f5e7719e9b0c364faa475505a06c1405 (diff)
downloadFreeBSD-src-a6cb20ae14309c434280be518b3b8e4786b749b6.zip
FreeBSD-src-a6cb20ae14309c434280be518b3b8e4786b749b6.tar.gz
Make pmap_preboot_map_attr() vm subsystem compliant, so its arguments
do not depend on pmap internals. This is a preparation for hiding internal pmap definitions as much as possible from the rest of system. Simultaneously, the protection argument evaluation is fixed. Happily, it did not effect the mappings. And it's the reason why it was not fixed earlier.
-rw-r--r--sys/arm/arm/pmap-v6.c14
-rw-r--r--sys/arm/include/pmap-v6.h4
2 files changed, 9 insertions, 9 deletions
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 23167d6..d4ab930 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -645,7 +645,7 @@ pt2map_pt2pg(vm_offset_t va)
* vm_offset_t pmap_preboot_reserve_pages(u_int num);
* vm_offset_t pmap_preboot_get_vpages(u_int num);
* void pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size,
- * int prot, int attr);
+ * vm_prot_t prot, vm_memattr_t attr);
*
* (2) for all stages:
*
@@ -984,15 +984,16 @@ pmap_preboot_get_vpages(u_int num)
* Pre-bootstrap epoch page mapping(s) with attributes.
*/
void
-pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size, int prot,
- int attr)
+pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size,
+ vm_prot_t prot, vm_memattr_t attr)
{
u_int num;
- u_int l1_attr, l1_prot;
+ u_int l1_attr, l1_prot, l2_prot;
pt1_entry_t *pte1p;
pt2_entry_t *pte2p;
- l1_prot = ATTR_TO_L1(prot);
+ l2_prot = prot & VM_PROT_WRITE ? PTE2_AP_KRW : PTE2_AP_KR;
+ l1_prot = ATTR_TO_L1(l2_prot);
l1_attr = ATTR_TO_L1(attr);
/* Map all the pages. */
@@ -1006,13 +1007,12 @@ pmap_preboot_map_attr(vm_paddr_t pa, vm_offset_t va, vm_size_t size, int prot,
num -= PTE1_SIZE;
} else {
pte2p = pmap_preboot_vtopte2(va);
- pte2_store(pte2p, PTE2_KERN(pa, prot, attr));
+ pte2_store(pte2p, PTE2_KERN(pa, l2_prot, attr));
va += PAGE_SIZE;
pa += PAGE_SIZE;
num -= PAGE_SIZE;
}
}
-
}
/*
diff --git a/sys/arm/include/pmap-v6.h b/sys/arm/include/pmap-v6.h
index c22b937..3c46d9d 100644
--- a/sys/arm/include/pmap-v6.h
+++ b/sys/arm/include/pmap-v6.h
@@ -216,8 +216,8 @@ vm_paddr_t pmap_preboot_get_pages(u_int );
void pmap_preboot_map_pages(vm_paddr_t , vm_offset_t , u_int );
vm_offset_t pmap_preboot_reserve_pages(u_int );
vm_offset_t pmap_preboot_get_vpages(u_int );
-void pmap_preboot_map_attr(vm_paddr_t , vm_offset_t , vm_size_t ,
- int , int );
+void pmap_preboot_map_attr(vm_paddr_t, vm_offset_t, vm_size_t, vm_prot_t,
+ vm_memattr_t);
static __inline void
pmap_map_chunk(vm_offset_t l1pt, vm_offset_t va, vm_offset_t pa,
vm_size_t size, int prot, int cache)
OpenPOWER on IntegriCloud