Ignore:
Timestamp:
Jun 30, 2017, 5:18:13 PM (5 years ago)
Author:
max@…
Message:

complete hal_ppm_init, to take into account the reserved areas

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/hal/x86_64/core/hal_init.c

    r114 r116  
    8080}
    8181
     82static 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
    82111static void init_bootinfo_core(boot_core_t *core)
    83112{
     
    109138static void init_bootinfo(boot_info_t *info)
    110139{
    111         extern paddr_t pa_avail;
    112         extern vaddr_t va_avail;
     140        size_t offset;
    113141
    114142        extern uint64_t __kernel_data_start;
    115143        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);
    119144
    120145        memset(info, 0, sizeof(boot_info_t));
     
    136161        init_bootinfo_core(&info->core[0]);
    137162
    138         info->rsvd_nr = 0;
    139         /* rsvd XXX */
     163        info->rsvd_nr = init_bootinfo_rsvd(&info->rsvd);
    140164
    141165        /* 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;
    144168        info->pages_nr = 0; /* XXX */
    145169
Note: See TracChangeset for help on using the changeset viewer.