Subversion Repositories HelenOS-historic

Rev

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

Rev 953 Rev 956
Line 29... Line 29...
29
#include "main.h" 
29
#include "main.h" 
30
#include "printf.h"
30
#include "printf.h"
31
#include "ofw.h"
31
#include "ofw.h"
32
#include "asm.h"
32
#include "asm.h"
33
 
33
 
-
 
34
#define KERNEL_PHYSICAL_ADDRESS 0x1000
34
#define KERNEL_LOAD_ADDRESS 0x400000
35
#define KERNEL_VIRTUAL_ADDRESS 0x80001000
35
#define KERNEL_START &_binary_____________kernel_kernel_bin_start
36
#define KERNEL_START &_binary_____________kernel_kernel_bin_start
36
#define KERNEL_END &_binary_____________kernel_kernel_bin_end
37
#define KERNEL_END &_binary_____________kernel_kernel_bin_end
37
#define KERNEL_SIZE ((unsigned int) KERNEL_END - (unsigned int) KERNEL_START)
38
#define KERNEL_SIZE ((unsigned int) KERNEL_END - (unsigned int) KERNEL_START)
38
 
39
 
39
void bootstrap(void)
40
void bootstrap(void)
40
{
41
{
41
    printf("\nHelenOS PPC Bootloader\n");
42
    printf("\nHelenOS PPC Bootloader\n");
42
   
43
   
43
    void *loader = ofw_translate(&start);
44
    void *phys = ofw_translate(&start);
44
    printf("loaded at %L (physical %L)\n", &start, loader);
45
    printf("loaded at %L (physical %L)\n", &start, phys);
45
    printf("kernel load address %L (size %d)\n", KERNEL_LOAD_ADDRESS, KERNEL_SIZE);
-
 
46
   
46
   
-
 
47
    // FIXME: map just the kernel
47
    void *addr = ofw_claim((void *) KERNEL_LOAD_ADDRESS, KERNEL_SIZE, 1);
48
    if (ofw_map((void *) KERNEL_PHYSICAL_ADDRESS, (void *) KERNEL_VIRTUAL_ADDRESS, 1024 * 1024, 0) != 0) {
48
    if (addr == NULL) {
-
 
49
        printf("Error: Unable to claim memory");
49
        printf("Unable to map kernel memory at %L (physical %L)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS);
50
        halt();
50
        halt();
51
    }
51
    }
-
 
52
    printf("kernel memory mapped at %L (physical %L, size %d bytes)\n", KERNEL_VIRTUAL_ADDRESS, KERNEL_PHYSICAL_ADDRESS, KERNEL_SIZE);
52
    printf("Claimed memory at %L\n", addr);
53
    // FIXME: relocate the kernel in real mode
53
    memcpy(addr, KERNEL_START, KERNEL_SIZE);
54
    memcpy((void *) KERNEL_VIRTUAL_ADDRESS, KERNEL_START, KERNEL_SIZE);
-
 
55
   
-
 
56
    // FIXME: proper framebuffer mapping
-
 
57
    ofw_map((void *) 0x84000000, (void *) 0x84000000, 2 * 1024 * 1024, 0);
54
   
58
   
55
    printf("Booting the kernel...\n");
59
    printf("Booting the kernel...\n");
-
 
60
   
56
    jump_to_kernel(addr);
61
    flush_instruction_cache();
-
 
62
    jump_to_kernel((void *) KERNEL_VIRTUAL_ADDRESS);
57
}
63
}