xref: /kernel/linux/linux-6.6/arch/x86/xen/smp.h (revision 62306a36)
162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _XEN_SMP_H
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifdef CONFIG_SMP
562306a36Sopenharmony_ci
662306a36Sopenharmony_civoid asm_cpu_bringup_and_idle(void);
762306a36Sopenharmony_ciasmlinkage void cpu_bringup_and_idle(void);
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciextern void xen_send_IPI_mask(const struct cpumask *mask,
1062306a36Sopenharmony_ci			      int vector);
1162306a36Sopenharmony_ciextern void xen_send_IPI_mask_allbutself(const struct cpumask *mask,
1262306a36Sopenharmony_ci				int vector);
1362306a36Sopenharmony_ciextern void xen_send_IPI_allbutself(int vector);
1462306a36Sopenharmony_ciextern void xen_send_IPI_all(int vector);
1562306a36Sopenharmony_ciextern void xen_send_IPI_self(int vector);
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciextern int xen_smp_intr_init(unsigned int cpu);
1862306a36Sopenharmony_ciextern void xen_smp_intr_free(unsigned int cpu);
1962306a36Sopenharmony_ciint xen_smp_intr_init_pv(unsigned int cpu);
2062306a36Sopenharmony_civoid xen_smp_intr_free_pv(unsigned int cpu);
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_civoid xen_smp_cpus_done(unsigned int max_cpus);
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_civoid xen_smp_send_reschedule(int cpu);
2562306a36Sopenharmony_civoid xen_smp_send_call_function_ipi(const struct cpumask *mask);
2662306a36Sopenharmony_civoid xen_smp_send_call_function_single_ipi(int cpu);
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_civoid __noreturn xen_cpu_bringup_again(unsigned long stack);
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_cistruct xen_common_irq {
3162306a36Sopenharmony_ci	int irq;
3262306a36Sopenharmony_ci	char *name;
3362306a36Sopenharmony_ci};
3462306a36Sopenharmony_ci#else /* CONFIG_SMP */
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_cistatic inline int xen_smp_intr_init(unsigned int cpu)
3762306a36Sopenharmony_ci{
3862306a36Sopenharmony_ci	return 0;
3962306a36Sopenharmony_ci}
4062306a36Sopenharmony_cistatic inline void xen_smp_intr_free(unsigned int cpu) {}
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistatic inline int xen_smp_intr_init_pv(unsigned int cpu)
4362306a36Sopenharmony_ci{
4462306a36Sopenharmony_ci	return 0;
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_cistatic inline void xen_smp_intr_free_pv(unsigned int cpu) {}
4762306a36Sopenharmony_ci#endif /* CONFIG_SMP */
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci#endif
50