Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/mips64/src/mm/frame.c

    r4dee0cb r2429e4a  
    115115        for (i = 0; i < init.cnt; i++)
    116116                if (overlaps(frame << ZERO_PAGE_WIDTH, ZERO_PAGE_SIZE,
    117                     init.tasks[i].paddr, init.tasks[i].size)) {
     117                    KA2PA(init.tasks[i].addr), init.tasks[i].size)) {
    118118                        safe = false;
    119119                        break;
     
    123123}
    124124
    125 static void frame_add_region(pfn_t start_frame, pfn_t end_frame, bool low)
    126 {
    127         if (end_frame <= start_frame)
    128                 return;
    129 
    130         uintptr_t base = start_frame << ZERO_PAGE_WIDTH;
    131         size_t size = (end_frame - start_frame) << ZERO_PAGE_WIDTH;
    132 
    133         if (!frame_adjust_zone_bounds(low, &base, &size))
    134                 return;
    135 
    136         pfn_t first = ADDR2PFN(base);
    137         size_t count = SIZE2FRAMES(size);
    138         pfn_t conf_frame;
    139 
    140         if (low) {
     125static void frame_add_region(pfn_t start_frame, pfn_t end_frame)
     126{
     127        if (end_frame > start_frame) {
     128                /* Convert 1M frames to 16K frames */
     129                pfn_t first = ADDR2PFN(start_frame << ZERO_PAGE_WIDTH);
     130                pfn_t count = ADDR2PFN((end_frame - start_frame) << ZERO_PAGE_WIDTH);
     131               
    141132                /* Interrupt vector frame is blacklisted */
     133                pfn_t conf_frame;
    142134                if (first == 0)
    143135                        conf_frame = 1;
    144136                else
    145137                        conf_frame = first;
    146                 zone_create(first, count, conf_frame,
    147                     ZONE_AVAILABLE | ZONE_LOWMEM);
    148         } else {
    149                 conf_frame = zone_external_conf_alloc(count);
    150                 if (conf_frame != 0)
    151                         zone_create(first, count, conf_frame,
    152                             ZONE_AVAILABLE | ZONE_HIGHMEM);
    153         }
    154        
    155         if (phys_regions_count < MAX_REGIONS) {
    156                 phys_regions[phys_regions_count].start = first;
    157                 phys_regions[phys_regions_count].count = count;
    158                 phys_regions_count++;
     138               
     139                zone_create(first, count, conf_frame, 0);
     140               
     141                if (phys_regions_count < MAX_REGIONS) {
     142                        phys_regions[phys_regions_count].start = first;
     143                        phys_regions[phys_regions_count].count = count;
     144                        phys_regions_count++;
     145                }
    159146        }
    160147}
     
    169156 *
    170157 */
    171 void frame_low_arch_init(void)
     158void frame_arch_init(void)
    172159{
    173160        ipl_t ipl = interrupts_disable();
     
    220207               
    221208                if (!avail) {
    222                         frame_add_region(start_frame, frame, true);
     209                        frame_add_region(start_frame, frame);
    223210                        start_frame = frame + 1;
    224211                        avail = true;
     
    226213        }
    227214       
    228         frame_add_region(start_frame, frame, true);
     215        frame_add_region(start_frame, frame);
    229216       
    230217        /* Blacklist interrupt vector frame */
     
    242229}
    243230
    244 void frame_high_arch_init(void)
    245 {
    246 }
    247 
    248231void physmem_print(void)
    249232{
Note: See TracChangeset for help on using the changeset viewer.