xref: /haiku/src/system/boot/platform/efi/arch/arm/arch_smp.cpp (revision 52f7c9389475e19fc21487b38064b4390eeb6fea)
1 /*
2  * Copyright 2019-2022, Haiku, Inc. All rights reserved.
3  * Released under the terms of the MIT License.
4 */
5 
6 
7 #include "arch_smp.h"
8 
9 #include <string.h>
10 
11 #include <KernelExport.h>
12 
13 #include <kernel.h>
14 #include <safemode.h>
15 #include <boot/platform.h>
16 #include <boot/stage2.h>
17 #include <boot/menu.h>
18 
19 
20 //#define TRACE_SMP
21 #ifdef TRACE_SMP
22 #	define TRACE(x) dprintf x
23 #else
24 #	define TRACE(x) ;
25 #endif
26 
27 
28 static platform_cpu_info sCpus[SMP_MAX_CPUS];
29 uint32 sCpuCount = 0;
30 
31 
32 void
33 arch_smp_register_cpu(platform_cpu_info** cpu)
34 {
35 	dprintf("arch_smp_register_cpu()\n");
36 	uint32 newCount = sCpuCount + 1;
37 	if (newCount > SMP_MAX_CPUS) {
38 		*cpu = NULL;
39 		return;
40 	}
41 	*cpu = &sCpus[sCpuCount];
42 	sCpuCount = newCount;
43 }
44 
45 
46 int
47 arch_smp_get_current_cpu(void)
48 {
49 	// One cpu for now.
50 	return 0;
51 }
52 
53 
54 void
55 arch_smp_init_other_cpus(void)
56 {
57 	// One cpu for now.
58 	gKernelArgs.num_cpus = 1;
59 	return;
60 }
61 
62 
63 void
64 arch_smp_boot_other_cpus(uint32 pml4, uint64 kernelEntry, addr_t virtKernelArgs)
65 {
66 	// One cpu for now.
67 }
68 
69 
70 void
71 arch_smp_add_safemode_menus(Menu *menu)
72 {
73 	MenuItem *item;
74 
75 	if (gKernelArgs.num_cpus < 2)
76 		return;
77 
78 	item = new(nothrow) MenuItem("Disable SMP");
79 	menu->AddItem(item);
80 	item->SetData(B_SAFEMODE_DISABLE_SMP);
81 	item->SetType(MENU_ITEM_MARKABLE);
82 	item->SetHelpText("Disables all but one CPU core.");
83 }
84 
85 
86 void
87 arch_smp_init(void)
88 {
89 	// One cpu for now.
90 }
91