/* SPDX-License-Identifier: GPL-2.0-only */ #ifndef _ASMRISCV_SMP_H_ #define _ASMRISCV_SMP_H_ #include #include #define smp_wait_for_event() cpu_relax() #define smp_send_event() cpu_relax() static inline int smp_processor_id(void) { return current_thread_info()->cpu; } typedef void (*secondary_func_t)(void); struct secondary_data { unsigned long satp; unsigned long stvec; secondary_func_t func; } __attribute__((aligned(16))); void secondary_entry(unsigned long hartid, unsigned long sp_phys); secondary_func_t secondary_cinit(struct secondary_data *data); void smp_boot_secondary(int cpu, void (*func)(void)); void smp_boot_secondary_nofail(int cpu, void (*func)(void)); #endif /* _ASMRISCV_SMP_H_ */