Subversion Repositories HelenOS

Rev

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

Rev 1894 Rev 1901
Line 77... Line 77...
77
#include <typedefs.h>
77
#include <typedefs.h>
78
#include <ipc/ipc.h>
78
#include <ipc/ipc.h>
79
#include <macros.h>
79
#include <macros.h>
80
#include <adt/btree.h>
80
#include <adt/btree.h>
81
#include <console/klog.h>
81
#include <console/klog.h>
82
 
-
 
83
#ifdef CONFIG_SMP
-
 
84
#include <arch/smp/apic.h>
-
 
85
#include <arch/smp/mps.h>
-
 
86
#endif /* CONFIG_SMP */
-
 
87
#include <smp/smp.h>
82
#include <smp/smp.h>
88
 
83
 
89
/** Global configuration structure. */
84
/** Global configuration structure. */
90
config_t config;
85
config_t config;
91
 
86
 
Line 269... Line 264...
269
 
264
 
270
#ifdef CONFIG_SMP
265
#ifdef CONFIG_SMP
271
/** Main kernel routine for application CPUs.
266
/** Main kernel routine for application CPUs.
272
 *
267
 *
273
 * Executed by application processors, temporary stack
268
 * Executed by application processors, temporary stack
274
 * is at ctx.sp which was set during BP boot.
269
 * is at ctx.sp which was set during BSP boot.
275
 * This function passes control directly to
270
 * This function passes control directly to
276
 * main_ap_separated_stack().
271
 * main_ap_separated_stack().
277
 *
272
 *
278
 * Assuming interrupts_disable()'d.
273
 * Assuming interrupts_disable()'d.
279
 *
274
 *
280
 */
275
 */
281
void main_ap(void)
276
void main_ap(void)
282
{
277
{
283
    /*
278
    /*
284
     * Incrementing the active CPU counter will guarantee that the
279
     * Incrementing the active CPU counter will guarantee that the
285
     * pm_init() will not attempt to build GDT and IDT tables again.
280
     * *_init() functions can find out that they need to
286
     * Neither frame_init() will do the complete thing. Neither cpu_init()
281
     * do initialization for AP only.
287
     * will do.
-
 
288
     */
282
     */
289
    config.cpu_active++;
283
    config.cpu_active++;
290
 
284
 
291
    /*
285
    /*
292
     * The THE structure is well defined because ctx.sp is used as stack.
286
     * The THE structure is well defined because ctx.sp is used as stack.
Line 298... Line 292...
298
    page_init();
292
    page_init();
299
    tlb_init();
293
    tlb_init();
300
    arch_post_mm_init();
294
    arch_post_mm_init();
301
   
295
   
302
    cpu_init();
296
    cpu_init();
303
   
-
 
304
    calibrate_delay_loop();
297
    calibrate_delay_loop();
305
 
-
 
306
    l_apic_init();
298
    arch_post_cpu_init();
307
    l_apic_debug();
-
 
308
 
299
 
309
    the_copy(THE, (the_t *) CPU->stack);
300
    the_copy(THE, (the_t *) CPU->stack);
310
 
301
 
311
    /*
302
    /*
312
     * If we woke kmp up before we left the kernel stack, we could
303
     * If we woke kmp up before we left the kernel stack, we could