xref: /haiku/src/system/boot/platform/efi/smp.cpp (revision 52f7c9389475e19fc21487b38064b4390eeb6fea)
1 /*
2  * Copyright 2008, Dustin Howett, dustin.howett@gmail.com. All rights reserved.
3  * Copyright 2004-2010, Axel Dörfler, axeld@pinc-software.de.
4  * Distributed under the terms of the MIT License.
5  *
6  * Copyright 2001, Travis Geiselbrecht. All rights reserved.
7  * Distributed under the terms of the NewOS License.
8 */
9 
10 
11 #include "smp.h"
12 
13 #include <string.h>
14 
15 #include <KernelExport.h>
16 
17 #include <kernel.h>
18 #include <safemode.h>
19 #include <boot/platform.h>
20 #include <boot/stage2.h>
21 #include <boot/menu.h>
22 
23 #include "arch_smp.h"
24 
25 
26 #define NO_SMP 0
27 
28 //#define TRACE_SMP
29 #ifdef TRACE_SMP
30 #	define TRACE(x) dprintf x
31 #else
32 #	define TRACE(x) ;
33 #endif
34 
35 
36 int
37 smp_get_current_cpu(void)
38 {
39 	return arch_smp_get_current_cpu();
40 }
41 
42 
43 void
44 smp_init_other_cpus(void)
45 {
46 	arch_smp_init_other_cpus();
47 }
48 
49 
50 void
51 smp_boot_other_cpus(addr_t pageTable,
52 	addr_t kernelEntry, addr_t virtKernelArgs)
53 {
54 	if (gKernelArgs.num_cpus < 2)
55 		return;
56 
57 	arch_smp_boot_other_cpus(pageTable,
58 		kernelEntry, virtKernelArgs);
59 }
60 
61 
62 void
63 smp_add_safemode_menus(Menu *menu)
64 {
65 	arch_smp_add_safemode_menus(menu);
66 }
67 
68 
69 void
70 smp_init(void)
71 {
72 #if NO_SMP
73 	gKernelArgs.num_cpus = 1;
74 	return;
75 #endif
76 
77 	arch_smp_init();
78 }
79