xref: /kvm-unit-tests/lib/arm/asm/smp.h (revision 018550041b3837264cbaa6c8984ba57a93491a51)
168ea0e0bSAndrew Jones #ifndef _ASMARM_SMP_H_
268ea0e0bSAndrew Jones #define _ASMARM_SMP_H_
368ea0e0bSAndrew Jones /*
468ea0e0bSAndrew Jones  * Copyright (C) 2015, Red Hat Inc, Andrew Jones <drjones@redhat.com>
568ea0e0bSAndrew Jones  *
668ea0e0bSAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
768ea0e0bSAndrew Jones  */
8dfc1fec2SAndrew Jones #include <cpumask.h>
905a76472SAndrew Jones #include <asm/barrier.h>
1068ea0e0bSAndrew Jones #include <asm/thread_info.h>
1168ea0e0bSAndrew Jones 
1268ea0e0bSAndrew Jones #define smp_processor_id()		(current_thread_info()->cpu)
1368ea0e0bSAndrew Jones 
146afb9481SAlexandru Elisei typedef void (*secondary_entry_fn)(void);
156afb9481SAlexandru Elisei 
166afb9481SAlexandru Elisei struct secondary_data {
176afb9481SAlexandru Elisei 	void *stack;            /* must be first member of struct */
186afb9481SAlexandru Elisei 	secondary_entry_fn entry;
196afb9481SAlexandru Elisei };
206afb9481SAlexandru Elisei extern struct secondary_data secondary_data;
216afb9481SAlexandru Elisei 
2205a76472SAndrew Jones #define smp_wait_for_event()	wfe()
2305a76472SAndrew Jones #define smp_send_event()	sev()
2405a76472SAndrew Jones 
25ce024192SAndrew Jones extern bool cpu0_calls_idle;
26ce024192SAndrew Jones 
2768ea0e0bSAndrew Jones extern void halt(void);
289246de4cSAndrew Jones extern void do_idle(void);
2968ea0e0bSAndrew Jones 
30e713fd55SAndrew Jones extern void on_cpu_async(int cpu, void (*func)(void *data), void *data);
31e713fd55SAndrew Jones extern void on_cpu(int cpu, void (*func)(void *data), void *data);
3200b34f56SAndrew Jones extern void on_cpus(void (*func)(void *data), void *data);
3368ea0e0bSAndrew Jones 
34*01855004SAndrew Jones extern void smp_boot_secondary(int cpu, secondary_entry_fn entry);
35*01855004SAndrew Jones extern void smp_boot_secondary_nofail(int cpu, secondary_entry_fn entry);
36*01855004SAndrew Jones 
3768ea0e0bSAndrew Jones #endif /* _ASMARM_SMP_H_ */
38