Changes in kernel/arch/riscv64/src/mm/frame.c [ccc362a1:8b6aa39] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/riscv64/src/mm/frame.c
rccc362a1 r8b6aa39 32 32 33 33 #include <mm/frame.h> 34 #include <arch/boot/boot.h>35 34 #include <arch/mm/frame.h> 36 #include <arch/drivers/ucb.h>37 35 #include <mm/as.h> 38 36 #include <config.h> … … 41 39 #include <align.h> 42 40 #include <macros.h> 41 43 42 #include <print.h> 44 43 45 uintptr_t physmem_start; 46 uintptr_t htif_frame; 47 uintptr_t pt_frame; 48 memmap_t memmap; 44 size_t hardcoded_unmapped_ktext_size = 0; 45 size_t hardcoded_unmapped_kdata_size = 0; 49 46 50 47 void physmem_print(void) … … 52 49 } 53 50 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 else77 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 }89 51 90 52 void frame_low_arch_init(void) 91 53 { 92 frame_common_arch_init(true);93 94 frame_mark_unavailable(htif_frame, 1);95 frame_mark_unavailable(pt_frame, 1);96 54 } 97 55 98 56 void frame_high_arch_init(void) 99 57 { 100 frame_common_arch_init(false);101 58 } 102 59
Note:
See TracChangeset
for help on using the changeset viewer.