1 #ifndef _ASMARM_SMP_H_ 2 #define _ASMARM_SMP_H_ 3 /* 4 * Copyright (C) 2015, Red Hat Inc, Andrew Jones <drjones@redhat.com> 5 * 6 * This work is licensed under the terms of the GNU LGPL, version 2. 7 */ 8 #include <asm/thread_info.h> 9 #include <asm/cpumask.h> 10 11 #define smp_processor_id() (current_thread_info()->cpu) 12 13 extern bool cpu0_calls_idle; 14 15 extern void halt(void); 16 extern void do_idle(void); 17 18 extern cpumask_t cpu_present_mask; 19 extern cpumask_t cpu_online_mask; 20 extern cpumask_t cpu_idle_mask; 21 #define cpu_present(cpu) cpumask_test_cpu(cpu, &cpu_present_mask) 22 #define cpu_online(cpu) cpumask_test_cpu(cpu, &cpu_online_mask) 23 #define cpu_idle(cpu) cpumask_test_cpu(cpu, &cpu_idle_mask) 24 #define for_each_present_cpu(cpu) for_each_cpu(cpu, &cpu_present_mask) 25 #define for_each_online_cpu(cpu) for_each_cpu(cpu, &cpu_online_mask) 26 27 static inline void set_cpu_present(int cpu, bool present) 28 { 29 if (present) 30 cpumask_set_cpu(cpu, &cpu_present_mask); 31 else 32 cpumask_clear_cpu(cpu, &cpu_present_mask); 33 } 34 35 static inline void set_cpu_online(int cpu, bool online) 36 { 37 if (online) 38 cpumask_set_cpu(cpu, &cpu_online_mask); 39 else 40 cpumask_clear_cpu(cpu, &cpu_online_mask); 41 } 42 43 static inline void set_cpu_idle(int cpu, bool idle) 44 { 45 if (idle) 46 cpumask_set_cpu(cpu, &cpu_idle_mask); 47 else 48 cpumask_clear_cpu(cpu, &cpu_idle_mask); 49 } 50 51 typedef void (*secondary_entry_fn)(void); 52 extern void smp_boot_secondary(int cpu, secondary_entry_fn entry); 53 extern void on_cpu_async(int cpu, void (*func)(void *data), void *data); 54 extern void on_cpu(int cpu, void (*func)(void *data), void *data); 55 extern void on_cpus(void (*func)(void *data), void *data); 56 57 #endif /* _ASMARM_SMP_H_ */ 58