Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 813 → Rev 814

/kernel/trunk/generic/src/main/main.c
43,7 → 43,6
#include <align.h>
#include <interrupt.h>
#include <arch/mm/memory_init.h>
#include <mm/heap.h>
#include <mm/frame.h>
#include <mm/page.h>
#include <genarch/mm/page_pt.h>
103,6 → 102,8
*/
void main_bsp(void)
{
__address stackaddr;
 
config.cpu_count = 1;
config.cpu_active = 1;
111,19 → 112,22
config.init_addr = init_addr;
config.init_size = init_size;
if (init_size > 0)
config.heap_addr = init_addr + init_size;
else
config.heap_addr = hardcoded_load_address + hardcoded_ktext_size + hardcoded_kdata_size;
config.kernel_size = ALIGN_UP(hardcoded_ktext_size + hardcoded_kdata_size, PAGE_SIZE);
stackaddr = config.base + config.kernel_size;
/* Avoid placing kernel on top of init */
if (overlaps(stackaddr,stackaddr+CONFIG_STACK_SIZE,
config.init_addr, config.init_addr+config.init_size)) {
stackaddr = ALIGN_UP(config.init_addr+config.init_size,
CONFIG_STACK_SIZE);
config.init_size = ALIGN_UP(config.init_size,CONFIG_STACK_SIZE) + CONFIG_STACK_SIZE;
} else {
config.kernel_size += CONFIG_STACK_SIZE;
}
config.heap_size = CONFIG_HEAP_SIZE + (config.memory_size / FRAME_SIZE) * sizeof(frame_t);
config.kernel_size = ALIGN_UP(config.heap_addr - hardcoded_load_address + config.heap_size, PAGE_SIZE);
config.heap_delta = config.kernel_size - (config.heap_addr - hardcoded_load_address + config.heap_size);
config.kernel_size = config.kernel_size + CONFIG_STACK_SIZE;
context_save(&ctx);
context_set(&ctx, FADDR(main_bsp_separated_stack), config.base + config.kernel_size - CONFIG_STACK_SIZE, CONFIG_STACK_SIZE);
context_set(&ctx, FADDR(main_bsp_separated_stack),
stackaddr, CONFIG_STACK_SIZE);
context_restore(&ctx);
/* not reached */
}
140,7 → 144,6
thread_t *t;
the_initialize(THE);
/*
* kconsole data structures must be initialized very early
* because other subsystems will register their respective
158,14 → 161,13
* Memory management subsystems initialization.
*/
arch_pre_mm_init();
early_heap_init(config.heap_addr, config.heap_size + config.heap_delta);
/* Initialize at least 1 memory segment big enough for slab to work */
frame_init();
slab_cache_init();
as_init();
page_init();
tlb_init();
arch_post_mm_init();
 
arch_post_mm_init();
version_print();
 
printf("%P: hardcoded_ktext_size=%dK, hardcoded_kdata_size=%dK\n",
178,11 → 180,9
 
printf("config.memory_size=%dM\n", config.memory_size/(1024*1024));
printf("config.cpu_count=%d\n", config.cpu_count);
 
cpu_init();
 
calibrate_delay_loop();
 
timeout_init();
scheduler_init();
task_init();