Changeset 2eb893b in mainline for kernel/arch/ia64/src/mm/frame.c


Ignore:
Timestamp:
2008-11-22T16:52:33Z (17 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
13964ef
Parents:
48eb7a14
Message:

IA64 correctly find CPU wakeup vector from SAL & EFI memory map support

File:
1 edited

Legend:

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

    r48eb7a14 r2eb893b  
    3737#include <config.h>
    3838#include <panic.h>
     39#include <arch/bootinfo.h>
     40#include <align.h>
     41#include <macros.h>
    3942
    4043/*
     
    4245 * for real ia64 systems that provide memory map.
    4346 */
    44 #define MEMORY_SIZE     (64 * 1024 * 1024)
     47#define MEMORY_SIZE     (256 * 1024 * 1024)
    4548#define MEMORY_BASE     (0 * 64 * 1024 * 1024)
     49
     50#define KERNEL_RESERVED_AREA_BASE (0x4400000)
     51#define KERNEL_RESERVED_AREA_SIZE (16*1024*1024)
    4652
    4753#define ONE_TO_ONE_MAPPING_SIZE (256*1048576) // Mapped at start
     
    5157void poke_char(int x,int y,char ch, char c);
    5258
     59#define MIN_ZONE_SIZE (64*1024)
     60
    5361uintptr_t last_frame;
     62#define MINCONF 1
    5463
    5564void frame_arch_init(void)
    5665{
    5766
    58         if(config.cpu_active==1)
    59         {
    60                 zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0);
     67        if(config.cpu_active==1){
     68               
     69               
     70               
     71                unsigned int i;
     72                for(i=0;i<bootinfo->memmap_items;i++){
     73                        if (bootinfo->memmap[i].type==EFI_MEMMAP_FREE_MEM){
     74                                uint64_t base=bootinfo->memmap[i].base;
     75                                uint64_t size=bootinfo->memmap[i].size;
     76                                uint64_t abase=ALIGN_UP(base,FRAME_SIZE);
     77                                if(size>FRAME_SIZE) size -=abase-base;
     78                               
     79
     80                                if(size>MIN_ZONE_SIZE)  {
     81                                        zone_create(abase >> FRAME_WIDTH, (size) >> FRAME_WIDTH, max(MINCONF,((abase) >> FRAME_WIDTH)), 0);
     82                                }       
     83                        }
     84                }
     85               
     86                //zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0);
    6187       
    6288                /*
    6389                * Blacklist ROM regions.
    6490                */
    65                 //frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE));
     91                frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE));
    6692
    67                 frame_mark_unavailable(ADDR2PFN(0), SIZE2FRAMES(1048576));
    68                 last_frame=SIZE2FRAMES((VRN_KERNEL<<VRN_SHIFT)+ONE_TO_ONE_MAPPING_SIZE);       
     93                frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE), SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE));
    6994        }       
    7095}
Note: See TracChangeset for help on using the changeset viewer.