xref: /kvm-unit-tests/lib/arm/asm/smp.h (revision b36f35a82ff4cec5f71a68aa782332e2bc3488f7)
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 typedef void (*secondary_entry_fn)(void);
14 
15 struct secondary_data {
16 	void *stack;            /* must be first member of struct */
17 	secondary_entry_fn entry;
18 };
19 extern struct secondary_data secondary_data;
20 
21 extern bool cpu0_calls_idle;
22 
23 extern void halt(void);
24 extern void do_idle(void);
25 
26 extern cpumask_t cpu_present_mask;
27 extern cpumask_t cpu_online_mask;
28 extern cpumask_t cpu_idle_mask;
29 #define cpu_present(cpu)		cpumask_test_cpu(cpu, &cpu_present_mask)
30 #define cpu_online(cpu)			cpumask_test_cpu(cpu, &cpu_online_mask)
31 #define cpu_idle(cpu)			cpumask_test_cpu(cpu, &cpu_idle_mask)
32 #define for_each_present_cpu(cpu)	for_each_cpu(cpu, &cpu_present_mask)
33 #define for_each_online_cpu(cpu)	for_each_cpu(cpu, &cpu_online_mask)
34 
35 static inline void set_cpu_present(int cpu, bool present)
36 {
37 	if (present)
38 		cpumask_set_cpu(cpu, &cpu_present_mask);
39 	else
40 		cpumask_clear_cpu(cpu, &cpu_present_mask);
41 }
42 
43 static inline void set_cpu_online(int cpu, bool online)
44 {
45 	if (online)
46 		cpumask_set_cpu(cpu, &cpu_online_mask);
47 	else
48 		cpumask_clear_cpu(cpu, &cpu_online_mask);
49 }
50 
51 static inline void set_cpu_idle(int cpu, bool idle)
52 {
53 	if (idle)
54 		cpumask_set_cpu(cpu, &cpu_idle_mask);
55 	else
56 		cpumask_clear_cpu(cpu, &cpu_idle_mask);
57 }
58 
59 extern void smp_boot_secondary(int cpu, secondary_entry_fn entry);
60 extern void on_cpu_async(int cpu, void (*func)(void *data), void *data);
61 extern void on_cpu(int cpu, void (*func)(void *data), void *data);
62 extern void on_cpus(void (*func)(void *data), void *data);
63 
64 #endif /* _ASMARM_SMP_H_ */
65