Subversion Repositories HelenOS

Rev

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

Rev 1757 Rev 1780
Line 99... Line 99...
99
/*
99
/*
100
 * These 'hardcoded' variables will be intialized by
100
 * These 'hardcoded' variables will be intialized by
101
 * the linker or the low level assembler code with
101
 * the linker or the low level assembler code with
102
 * appropriate sizes and addresses.
102
 * appropriate sizes and addresses.
103
 */
103
 */
104
__address hardcoded_load_address = 0;   /**< Virtual address of where the kernel is loaded. */
104
uintptr_t hardcoded_load_address = 0;   /**< Virtual address of where the kernel is loaded. */
105
size_t hardcoded_ktext_size = 0;    /**< Size of the kernel code in bytes. */
105
size_t hardcoded_ktext_size = 0;    /**< Size of the kernel code in bytes. */
106
size_t hardcoded_kdata_size = 0;    /**< Size of the kernel data in bytes. */
106
size_t hardcoded_kdata_size = 0;    /**< Size of the kernel data in bytes. */
107
 
107
 
108
void main_bsp(void);
108
void main_bsp(void);
109
void main_ap(void);
109
void main_ap(void);
Line 130... Line 130...
130
 * Assuming interrupts_disable().
130
 * Assuming interrupts_disable().
131
 *
131
 *
132
 */
132
 */
133
void main_bsp(void)
133
void main_bsp(void)
134
{
134
{
135
    __address stackaddr;
135
    uintptr_t stackaddr;
136
 
136
 
137
    config.cpu_count = 1;
137
    config.cpu_count = 1;
138
    config.cpu_active = 1;
138
    config.cpu_active = 1;
139
   
139
   
140
    config.base = hardcoded_load_address;
140
    config.base = hardcoded_load_address;
Line 200... Line 200...
200
    page_init();
200
    page_init();
201
    tlb_init();
201
    tlb_init();
202
    arch_post_mm_init();
202
    arch_post_mm_init();
203
 
203
 
204
    version_print();
204
    version_print();
205
    printf("%.*p: hardcoded_ktext_size=%zdK, hardcoded_kdata_size=%zdK\n", sizeof(__address) * 2, config.base, hardcoded_ktext_size >> 10, hardcoded_kdata_size >> 10);
205
    printf("%.*p: hardcoded_ktext_size=%zdK, hardcoded_kdata_size=%zdK\n", sizeof(uintptr_t) * 2, config.base, hardcoded_ktext_size >> 10, hardcoded_kdata_size >> 10);
206
 
206
 
207
    arch_pre_smp_init();
207
    arch_pre_smp_init();
208
    smp_init();
208
    smp_init();
209
   
209
   
210
    slab_enable_cpucache(); /* Slab must be initialized AFTER we know the number of processors */
210
    slab_enable_cpucache(); /* Slab must be initialized AFTER we know the number of processors */
Line 221... Line 221...
221
    thread_init();
221
    thread_init();
222
    futex_init();
222
    futex_init();
223
    klog_init();
223
    klog_init();
224
   
224
   
225
    for (i = 0; i < init.cnt; i++)
225
    for (i = 0; i < init.cnt; i++)
226
        printf("init[%zd].addr=%.*p, init[%zd].size=%zd\n", i, sizeof(__address) * 2, init.tasks[i].addr, i, init.tasks[i].size);
226
        printf("init[%zd].addr=%.*p, init[%zd].size=%zd\n", i, sizeof(uintptr_t) * 2, init.tasks[i].addr, i, init.tasks[i].size);
227
   
227
   
228
    ipc_init();
228
    ipc_init();
229
 
229
 
230
    /*
230
    /*
231
     * Create kernel task.
231
     * Create kernel task.
Line 295... Line 295...
295
    /*
295
    /*
296
     * If we woke kmp up before we left the kernel stack, we could
296
     * If we woke kmp up before we left the kernel stack, we could
297
     * collide with another CPU coming up. To prevent this, we
297
     * collide with another CPU coming up. To prevent this, we
298
     * switch to this cpu's private stack prior to waking kmp up.
298
     * switch to this cpu's private stack prior to waking kmp up.
299
     */
299
     */
300
    context_set(&CPU->saved_context, FADDR(main_ap_separated_stack), (__address) CPU->stack, CPU_STACK_SIZE);
300
    context_set(&CPU->saved_context, FADDR(main_ap_separated_stack), (uintptr_t) CPU->stack, CPU_STACK_SIZE);
301
    context_restore(&CPU->saved_context);
301
    context_restore(&CPU->saved_context);
302
    /* not reached */
302
    /* not reached */
303
}
303
}
304
 
304
 
305
 
305