Changes in kernel/generic/src/mm/page.c [2107e79:8757be86] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/page.c
r2107e79 r8757be86 65 65 #include <arch/mm/asid.h> 66 66 #include <mm/as.h> 67 #include <mm/km.h>68 67 #include <mm/frame.h> 69 68 #include <arch/barrier.h> … … 76 75 #include <errno.h> 77 76 #include <align.h> 78 #include <macros.h>79 #include <bitops.h>80 77 81 78 /** Virtual operations for page subsystem. */ … … 85 82 { 86 83 page_arch_init(); 87 }88 89 /** Map memory structure90 *91 * Identity-map memory structure92 * considering possible crossings93 * of page boundaries.94 *95 * @param addr Address of the structure.96 * @param size Size of the structure.97 *98 */99 void map_structure(uintptr_t addr, size_t size)100 {101 size_t length = size + (addr - (addr & ~(PAGE_SIZE - 1)));102 size_t cnt = length / PAGE_SIZE + (length % PAGE_SIZE > 0);103 104 size_t i;105 for (i = 0; i < cnt; i++)106 page_mapping_insert(AS_KERNEL, addr + i * PAGE_SIZE,107 addr + i * PAGE_SIZE, PAGE_NOT_CACHEABLE | PAGE_WRITE);108 109 /* Repel prefetched accesses to the old mapping. */110 memory_barrier();111 84 } 112 85 … … 193 166 } 194 167 195 uintptr_t hw_map(uintptr_t physaddr, size_t size)196 {197 uintptr_t virtaddr;198 size_t asize;199 size_t align;200 pfn_t i;201 202 asize = ALIGN_UP(size, PAGE_SIZE);203 align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));204 virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align));205 206 page_table_lock(AS_KERNEL, true);207 for (i = 0; i < ADDR2PFN(asize); i++) {208 uintptr_t addr = PFN2ADDR(i);209 page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr,210 PAGE_NOT_CACHEABLE | PAGE_WRITE);211 }212 page_table_unlock(AS_KERNEL, true);213 214 return virtaddr;215 }216 217 168 int page_find_mapping(uintptr_t virt, void **phys) 218 169 {
Note:
See TracChangeset
for help on using the changeset viewer.