1 /* 2 * Copyright 2019-2020, 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 kernel_entry) 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