Page MenuHomeFreeBSD

D15294.id44154.diff
No OneTemporary

D15294.id44154.diff

Index: head/sys/arm64/arm64/pmap.c
===================================================================
--- head/sys/arm64/arm64/pmap.c
+++ head/sys/arm64/arm64/pmap.c
@@ -1142,7 +1142,7 @@
* Low level mapping routines.....
***************************************************/
-static void
+void
pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode)
{
pd_entry_t *pde;
Index: head/sys/arm64/include/pmap.h
===================================================================
--- head/sys/arm64/include/pmap.h
+++ head/sys/arm64/include/pmap.h
@@ -140,10 +140,12 @@
((((va) | (pa)) & L1_OFFSET) == 0 && (size) >= L1_SIZE)
void pmap_bootstrap(vm_offset_t, vm_offset_t, vm_paddr_t, vm_size_t);
+void pmap_kenter(vm_offset_t sva, vm_size_t size, vm_paddr_t pa, int mode);
void pmap_kenter_device(vm_offset_t, vm_size_t, vm_paddr_t);
vm_paddr_t pmap_kextract(vm_offset_t va);
void pmap_kremove(vm_offset_t);
void pmap_kremove_device(vm_offset_t, vm_size_t);
+void *pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma);
void *pmap_mapdev(vm_offset_t, vm_size_t);
void *pmap_mapbios(vm_paddr_t, vm_size_t);
Index: head/sys/kern/subr_devmap.c
===================================================================
--- head/sys/kern/subr_devmap.c
+++ head/sys/kern/subr_devmap.c
@@ -287,6 +287,37 @@
return ((void *)(va + offset));
}
+#if defined(__aarch64__)
+void *
+pmap_mapdev_attr(vm_offset_t pa, vm_size_t size, vm_memattr_t ma)
+{
+ vm_offset_t va, offset;
+ void * rva;
+
+ /* First look in the static mapping table. */
+ if ((rva = devmap_ptov(pa, size)) != NULL)
+ return (rva);
+
+ offset = pa & PAGE_MASK;
+ pa = trunc_page(pa);
+ size = round_page(size + offset);
+
+ if (early_boot) {
+ akva_devmap_vaddr = trunc_page(akva_devmap_vaddr - size);
+ va = akva_devmap_vaddr;
+ KASSERT(va >= VM_MAX_KERNEL_ADDRESS - L2_SIZE,
+ ("Too many early devmap mappings"));
+ } else
+ va = kva_alloc(size);
+ if (!va)
+ panic("pmap_mapdev: Couldn't alloc kernel virtual memory");
+
+ pmap_kenter(va, size, pa, ma);
+
+ return ((void *)(va + offset));
+}
+#endif
+
/*
* Unmap device memory and free the kva space.
*/

File Metadata

Mime Type
text/plain
Expires
Wed, Dec 31, 12:41 AM (21 m, 20 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27397757
Default Alt Text
D15294.id44154.diff (2 KB)

Event Timeline