Changeset d4673296 in mainline for kernel/generic
- Timestamp:
- 2012-01-27T21:12:25Z (13 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- adec5b45
- Parents:
- 4dee0cb
- Location:
- kernel/generic
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/mm/km.h
r4dee0cb rd4673296 49 49 extern bool km_is_non_identity(uintptr_t); 50 50 51 extern uintptr_t hw_map(uintptr_t, size_t); 52 51 53 extern uintptr_t km_temporary_page_get(uintptr_t *, frame_flags_t); 52 54 extern void km_temporary_page_put(uintptr_t); -
kernel/generic/include/mm/page.h
r4dee0cb rd4673296 66 66 extern void map_structure(uintptr_t, size_t); 67 67 68 extern uintptr_t hw_map(uintptr_t, size_t);69 70 68 extern int page_find_mapping(uintptr_t, void **); 71 69 extern sysarg_t sys_page_find_mapping(uintptr_t, void *); -
kernel/generic/src/mm/km.c
r4dee0cb rd4673296 46 46 #include <debug.h> 47 47 #include <arch.h> 48 #include <align.h> 49 #include <macros.h> 50 #include <bitops.h> 48 51 49 52 static ra_arena_t *km_ni_arena; … … 120 123 ra_free(km_ni_arena, page, size); 121 124 } 125 126 uintptr_t hw_map(uintptr_t physaddr, size_t size) 127 { 128 uintptr_t virtaddr; 129 size_t asize; 130 size_t align; 131 pfn_t i; 132 133 asize = ALIGN_UP(size, PAGE_SIZE); 134 align = ispwr2(size) ? size : (1U << (fnzb(size) + 1)); 135 virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align)); 136 137 page_table_lock(AS_KERNEL, true); 138 for (i = 0; i < ADDR2PFN(asize); i++) { 139 uintptr_t addr = PFN2ADDR(i); 140 page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr, 141 PAGE_NOT_CACHEABLE | PAGE_WRITE); 142 } 143 page_table_unlock(AS_KERNEL, true); 144 145 return virtaddr; 146 } 147 122 148 123 149 /** Unmap kernen non-identity page. -
kernel/generic/src/mm/page.c
r4dee0cb rd4673296 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. */ … … 193 190 } 194 191 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 192 int page_find_mapping(uintptr_t virt, void **phys) 218 193 {
Note:
See TracChangeset
for help on using the changeset viewer.