Changeset 3debedec in mainline for arch/ppc32/src/mm/memory_init.c


Ignore:
Timestamp:
2006-02-16T20:26:14Z (19 years ago)
Author:
Ondrej Palkovsky <ondrap@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ba52899
Parents:
2a46e10
Message:

Made powerpc to get on PearPC to the version print when compiled with -O1:

  • create proper memory zones
  • switch to real mode on boot

TODO

  • kernel relocation during boot
  • autodetection of framebuffer settings (PCI?) - now includes hardcoded settings for PearPc.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ppc32/src/mm/memory_init.c

    r2a46e10 r3debedec  
    3030#include <genarch/ofw/ofw.h>
    3131#include <panic.h>
     32#include <mm/frame.h>
     33#include <align.h>
    3234
    3335#define MEMMAP_MAX_RECORDS 32
     
    3840} memmap_t;
    3941
    40 size_t get_memory_size(void)
     42static memmap_t memmap[MEMMAP_MAX_RECORDS];
     43size_t total_mem = 0;
     44
     45static void init_memmap(void)
    4146{
     47        int i;
     48
    4249        phandle handle = ofw_find_device("/memory");
    4350        if (handle == -1)
    4451                panic("No RAM\n");
    4552       
    46         memmap_t memmap[MEMMAP_MAX_RECORDS];
    4753        size_t ret = ofw_get_property(handle, "reg", &memmap, sizeof(memmap));
    4854        if (ret == -1)
    4955                panic("Device /memory has no reg property\n");
    5056       
    51         size_t total = 0;
    52         int i;
    5357       
    5458        for (i = 0; i < MEMMAP_MAX_RECORDS; i++) {
    5559                if (memmap[i].size == 0)
    5660                        break;
    57                 total += memmap[i].size;
     61                total_mem += memmap[i].size;
    5862        }
     63}
    5964
    60         return total;
     65void preboot_read_config(void)
     66{
     67        init_memmap();
    6168}
     69
     70size_t get_memory_size(void)
     71{
     72        return total_mem;
     73}
     74
     75void ppc_init_zones(void)
     76{
     77        int i;
     78        pfn_t confdata;
     79
     80        for (i = 0; i < MEMMAP_MAX_RECORDS; i++) {
     81                if (memmap[i].size == 0)
     82                        break;
     83                confdata = ADDR2PFN(memmap[i].start);
     84                if (confdata == 0)
     85                        confdata = 2;
     86                zone_create(ADDR2PFN(memmap[i].start),
     87                            SIZE2FRAMES(ALIGN_DOWN(memmap[i].size,PAGE_SIZE)),
     88                            confdata, 0);
     89        }
     90}
Note: See TracChangeset for help on using the changeset viewer.