Subversion Repositories HelenOS

Rev

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

Rev 3022 Rev 4055
Line 24... Line 24...
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
29
/** @addtogroup ia64mm 
29
/** @addtogroup ia64mm
30
 * @{
30
 * @{
31
 */
31
 */
32
/** @file
32
/** @file
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 <config.h>
37
#include <config.h>
38
#include <panic.h>
38
#include <panic.h>
-
 
39
#include <arch/bootinfo.h>
-
 
40
#include <align.h>
-
 
41
#include <macros.h>
39
 
42
 
-
 
43
#define KERNEL_RESERVED_AREA_BASE   (0x4400000)
-
 
44
#define KERNEL_RESERVED_AREA_SIZE   (16 * 1024 * 1024)
40
/*
45
 
41
 * This is Ski-specific and certainly not sufficient
46
#define ROM_BASE    0xa0000               /* for simulators */
42
 * for real ia64 systems that provide memory map.
47
#define ROM_SIZE    (384 * 1024)          /* for simulators */
43
 */
48
 
44
#define MEMORY_SIZE (64 * 1024 * 1024)
49
#define MIN_ZONE_SIZE   (64 * 1024)
-
 
50
 
45
#define MEMORY_BASE (64 * 1024 * 1024)
51
#define MINCONF 1
-
 
52
 
-
 
53
uintptr_t last_frame = 0;
46
 
54
 
47
#define ROM_BASE    0xa0000               //For ski
-
 
48
#define ROM_SIZE    (384 * 1024)          //For ski
-
 
49
void poke_char(int x,int y,char ch, char c);
-
 
50
void frame_arch_init(void)
55
void frame_arch_init(void)
51
{
56
{
-
 
57
    if (config.cpu_active == 1) {
-
 
58
        unsigned int i;
-
 
59
        for (i = 0; i < bootinfo->memmap_items; i++) {
-
 
60
            if (bootinfo->memmap[i].type == EFI_MEMMAP_FREE_MEM) {
-
 
61
                uint64_t base = bootinfo->memmap[i].base;
-
 
62
                uint64_t size = bootinfo->memmap[i].size;
-
 
63
                uint64_t abase = ALIGN_UP(base, FRAME_SIZE);
-
 
64
 
-
 
65
                if (size > FRAME_SIZE)
-
 
66
                    size -= abase - base;
-
 
67
 
-
 
68
                if (size > MIN_ZONE_SIZE) {
-
 
69
                    zone_create(abase >> FRAME_WIDTH,
-
 
70
                        size >> FRAME_WIDTH,
52
    zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0);
71
                        max(MINCONF, abase >> FRAME_WIDTH),
-
 
72
                        0);
-
 
73
                }
-
 
74
                if (abase + size > last_frame)
-
 
75
                    last_frame = abase + size;
-
 
76
            }
-
 
77
        }
53
   
78
       
54
    /*
79
        /*
55
     * Blacklist ROM regions.
80
         * Blacklist ROM regions.
56
     */
81
         */
57
    frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE));
82
        frame_mark_unavailable(ADDR2PFN(ROM_BASE),
-
 
83
            SIZE2FRAMES(ROM_SIZE));
58
   
84
 
-
 
85
        frame_mark_unavailable(ADDR2PFN(KERNEL_RESERVED_AREA_BASE),
-
 
86
            SIZE2FRAMES(KERNEL_RESERVED_AREA_SIZE));
-
 
87
    }  
59
}
88
}
60
 
89
 
61
/** @}
90
/** @}
62
 */
91
 */