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