Subversion Repositories HelenOS

Rev

Rev 1790 | Rev 1903 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1790 Rev 1793
Line 33... Line 33...
33
 */
33
 */
34
 
34
 
35
#include <arch/mm/frame.h>
35
#include <arch/mm/frame.h>
36
#include <mm/frame.h>
36
#include <mm/frame.h>
37
#include <arch/boot/boot.h>
37
#include <arch/boot/boot.h>
-
 
38
#include <arch/types.h>
38
#include <config.h>
39
#include <config.h>
39
#include <align.h>
40
#include <align.h>
-
 
41
#include <macros.h>
-
 
42
 
-
 
43
uintptr_t last_frame = NULL;
40
 
44
 
41
/** Create memory zones according to information stored in bootinfo.
45
/** Create memory zones according to information stored in bootinfo.
42
 *
46
 *
43
 * Walk the bootinfo memory map and create frame zones according to it.
47
 * Walk the bootinfo memory map and create frame zones according to it.
44
 * The first frame is not blacklisted here as it is done in generic
48
 * The first frame is not blacklisted here as it is done in generic
Line 48... Line 52...
48
{
52
{
49
    int i;
53
    int i;
50
    pfn_t confdata;
54
    pfn_t confdata;
51
 
55
 
52
    for (i = 0; i < bootinfo.memmap.count; i++) {
56
    for (i = 0; i < bootinfo.memmap.count; i++) {
-
 
57
        uintptr_t start = bootinfo.memmap.zones[i].start;
-
 
58
        size_t size = bootinfo.memmap.zones[i].size;
53
 
59
 
54
        /*
60
        /*
55
         * The memmap is created by HelenOS boot loader.
61
         * The memmap is created by HelenOS boot loader.
56
         * It already contains no holes.
62
         * It already contains no holes.
57
         */
63
         */
58
   
64
   
59
        confdata = ADDR2PFN(bootinfo.memmap.zones[i].start);
65
        confdata = ADDR2PFN(start);
60
        if (confdata == 0)
66
        if (confdata == 0)
61
            confdata = 2;
67
            confdata = 2;
62
        zone_create(ADDR2PFN(bootinfo.memmap.zones[i].start),
68
        zone_create(ADDR2PFN(start), SIZE2FRAMES(ALIGN_DOWN(size, FRAME_SIZE)), confdata, 0);
-
 
69
       
63
            SIZE2FRAMES(ALIGN_DOWN(bootinfo.memmap.zones[i].size, PAGE_SIZE)),
70
        last_frame = max(last_frame, start + ALIGN_UP(size, FRAME_SIZE));
64
            confdata, 0);
-
 
65
    }
71
    }
66
 
72
 
67
}
73
}
68
 
74
 
69
/** @}
75
/** @}