xref: /kvm-unit-tests/lib/arm/asm/smp.h (revision 05a764725512259a073c804f2616fb4f5ac461e8)
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>
9*05a76472SAndrew 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 
22*05a76472SAndrew Jones #define smp_wait_for_event()	wfe()
23*05a76472SAndrew Jones #define smp_send_event()	sev()
24*05a76472SAndrew 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 
3068ea0e0bSAndrew Jones extern void smp_boot_secondary(int cpu, secondary_entry_fn entry);
31e713fd55SAndrew Jones extern void on_cpu_async(int cpu, void (*func)(void *data), void *data);
32e713fd55SAndrew Jones extern void on_cpu(int cpu, void (*func)(void *data), void *data);
3300b34f56SAndrew Jones extern void on_cpus(void (*func)(void *data), void *data);
3468ea0e0bSAndrew Jones 
3568ea0e0bSAndrew Jones #endif /* _ASMARM_SMP_H_ */
36