Changeset 116 for trunk/hal/x86_64/core/hal_init.c
- Timestamp:
- Jun 30, 2017, 5:18:13 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/hal/x86_64/core/hal_init.c
r114 r116 80 80 } 81 81 82 static size_t init_bootinfo_rsvd(boot_rsvd_t *rsvd) 83 { 84 size_t mmap_length = mb_info.mi_mmap_length; 85 uint8_t *mmap_addr = (uint8_t *)&mb_mmap; 86 size_t i, rsvd_nr; 87 88 memset(rsvd, 0, sizeof(boot_rsvd_t)); 89 90 i = 0, rsvd_nr = 0; 91 while (i < mmap_length) { 92 struct multiboot_mmap *mm; 93 94 mm = (struct multiboot_mmap *)(mmap_addr + i); 95 96 rsvd[rsvd_nr].first_page = 97 rounddown(mm->mm_base_addr, PAGE_SIZE) / PAGE_SIZE; 98 rsvd[rsvd_nr].npages = 99 roundup(mm->mm_length, PAGE_SIZE) / PAGE_SIZE; 100 rsvd_nr++; 101 102 if (rsvd_nr == CONFIG_PPM_MAX_RSVD) 103 x86_panic("too many memory holes"); 104 105 i += mm->mm_size + 4; 106 } 107 108 return rsvd_nr; 109 } 110 82 111 static void init_bootinfo_core(boot_core_t *core) 83 112 { … … 109 138 static void init_bootinfo(boot_info_t *info) 110 139 { 111 extern paddr_t pa_avail; 112 extern vaddr_t va_avail; 140 size_t offset; 113 141 114 142 extern uint64_t __kernel_data_start; 115 143 extern uint64_t __kernel_end; 116 117 size_t pa_offset = pa_avail - 0;118 size_t va_offset = va_avail - CLUSTER_MIN_VA(0);119 144 120 145 memset(info, 0, sizeof(boot_info_t)); … … 136 161 init_bootinfo_core(&info->core[0]); 137 162 138 info->rsvd_nr = 0; 139 /* rsvd XXX */ 163 info->rsvd_nr = init_bootinfo_rsvd(&info->rsvd); 140 164 141 165 /* dev_ XXX */ 142 143 info->pages_offset = MAX(pa_offset, va_offset);166 offset = hal_gpt_bootstrap_uniformize(); 167 info->pages_offset = offset / PAGE_SIZE; 144 168 info->pages_nr = 0; /* XXX */ 145 169
Note: See TracChangeset
for help on using the changeset viewer.