Changes in kernel/arch/riscv64/src/mm/frame.c [8b6aa39:ccc362a1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/riscv64/src/mm/frame.c
r8b6aa39 rccc362a1 32 32 33 33 #include <mm/frame.h> 34 #include <arch/boot/boot.h> 34 35 #include <arch/mm/frame.h> 36 #include <arch/drivers/ucb.h> 35 37 #include <mm/as.h> 36 38 #include <config.h> … … 39 41 #include <align.h> 40 42 #include <macros.h> 41 42 43 #include <print.h> 43 44 44 size_t hardcoded_unmapped_ktext_size = 0; 45 size_t hardcoded_unmapped_kdata_size = 0; 45 uintptr_t physmem_start; 46 uintptr_t htif_frame; 47 uintptr_t pt_frame; 48 memmap_t memmap; 46 49 47 50 void physmem_print(void) … … 49 52 } 50 53 54 static void frame_common_arch_init(bool low) 55 { 56 pfn_t minconf = 57 max3(ADDR2PFN(physmem_start), htif_frame + 1, pt_frame + 1); 58 59 for (size_t i = 0; i < memmap.cnt; i++) { 60 /* To be safe, make the available zone possibly smaller */ 61 uintptr_t base = ALIGN_UP((uintptr_t) memmap.zones[i].start, 62 FRAME_SIZE); 63 size_t size = ALIGN_DOWN(memmap.zones[i].size - 64 (base - ((uintptr_t) memmap.zones[i].start)), FRAME_SIZE); 65 66 if (!frame_adjust_zone_bounds(low, &base, &size)) 67 return; 68 69 pfn_t pfn = ADDR2PFN(base); 70 size_t count = SIZE2FRAMES(size); 71 pfn_t conf; 72 73 if (low) { 74 if ((minconf < pfn) || (minconf >= pfn + count)) 75 conf = pfn; 76 else 77 conf = minconf; 78 79 zone_create(pfn, count, conf, 80 ZONE_AVAILABLE | ZONE_LOWMEM); 81 } else { 82 conf = zone_external_conf_alloc(count); 83 if (conf != 0) 84 zone_create(pfn, count, conf, 85 ZONE_AVAILABLE | ZONE_HIGHMEM); 86 } 87 } 88 } 51 89 52 90 void frame_low_arch_init(void) 53 91 { 92 frame_common_arch_init(true); 93 94 frame_mark_unavailable(htif_frame, 1); 95 frame_mark_unavailable(pt_frame, 1); 54 96 } 55 97 56 98 void frame_high_arch_init(void) 57 99 { 100 frame_common_arch_init(false); 58 101 } 59 102
Note:
See TracChangeset
for help on using the changeset viewer.