1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef __ASM_SMP_H 3 #define __ASM_SMP_H 4 5 extern int init_per_cpu(int cpuid); 6 7 #if defined(CONFIG_SMP) 8 9 /* Page Zero Location PDC will look for the address to branch to when we poke 10 ** slave CPUs still in "Icache loop". 11 */ 12 #define PDC_OS_BOOT_RENDEZVOUS 0x10 13 #define PDC_OS_BOOT_RENDEZVOUS_HI 0x28 14 15 #ifndef ASSEMBLY 16 #include <linux/bitops.h> 17 #include <linux/threads.h> /* for NR_CPUS */ 18 #include <linux/cpumask.h> 19 typedef unsigned long address_t; 20 21 22 /* 23 * Private routines/data 24 * 25 * physical and logical are equivalent until we support CPU hotplug. 26 */ 27 #define cpu_number_map(cpu) (cpu) 28 #define cpu_logical_map(cpu) (cpu) 29 30 extern void smp_send_all_nop(void); 31 32 extern void arch_send_call_function_single_ipi(int cpu); 33 extern void arch_send_call_function_ipi_mask(const struct cpumask *mask); 34 35 #endif /* !ASSEMBLY */ 36 37 /* 38 * This is particularly ugly: it appears we can't actually get the definition 39 * of task_struct here, but we need access to the CPU this task is running on. 40 * Instead of using task_struct we're using TASK_CPU which is extracted from 41 * asm-offsets.h by kbuild to get the current processor ID. 42 * 43 * This also needs to be safeguarded when building asm-offsets.s because at 44 * that time TASK_CPU is not defined yet. It could have been guarded by 45 * TASK_CPU itself, but we want the build to fail if TASK_CPU is missing 46 * when building something else than asm-offsets.s 47 */ 48 #ifdef GENERATING_ASM_OFFSETS 49 #define raw_smp_processor_id() (0) 50 #else 51 #include <asm/asm-offsets.h> 52 #define raw_smp_processor_id() (*(unsigned int *)((void *)current + TASK_CPU)) 53 #endif 54 #else /* CONFIG_SMP */ 55 56 static inline void smp_send_all_nop(void) { return; } 57 58 #endif 59 60 #define NO_PROC_ID 0xFF /* No processor magic marker */ 61 #define ANY_PROC_ID 0xFF /* Any processor magic marker */ 62 static inline int __cpu_disable (void) { 63 return 0; 64 } 65 static inline void __cpu_die (unsigned int cpu) { 66 while(1) 67 ; 68 } 69 70 #endif /* __ASM_SMP_H */ 71