162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _ASM_X86_XEN_EVENTS_H
362306a36Sopenharmony_ci#define _ASM_X86_XEN_EVENTS_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <xen/xen.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_cienum ipi_vector {
862306a36Sopenharmony_ci	XEN_RESCHEDULE_VECTOR,
962306a36Sopenharmony_ci	XEN_CALL_FUNCTION_VECTOR,
1062306a36Sopenharmony_ci	XEN_CALL_FUNCTION_SINGLE_VECTOR,
1162306a36Sopenharmony_ci	XEN_SPIN_UNLOCK_VECTOR,
1262306a36Sopenharmony_ci	XEN_IRQ_WORK_VECTOR,
1362306a36Sopenharmony_ci	XEN_NMI_VECTOR,
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci	XEN_NR_IPIS,
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cistatic inline int xen_irqs_disabled(struct pt_regs *regs)
1962306a36Sopenharmony_ci{
2062306a36Sopenharmony_ci	return raw_irqs_disabled_flags(regs->flags);
2162306a36Sopenharmony_ci}
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci/* No need for a barrier -- XCHG is a barrier on x86. */
2462306a36Sopenharmony_ci#define xchg_xen_ulong(ptr, val) xchg((ptr), (val))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciextern bool xen_have_vector_callback;
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/*
2962306a36Sopenharmony_ci * Events delivered via platform PCI interrupts are always
3062306a36Sopenharmony_ci * routed to vcpu 0 and hence cannot be rebound.
3162306a36Sopenharmony_ci */
3262306a36Sopenharmony_cistatic inline bool xen_support_evtchn_rebind(void)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	return (!xen_hvm_domain() || xen_have_vector_callback);
3562306a36Sopenharmony_ci}
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciextern bool xen_percpu_upcall;
3862306a36Sopenharmony_ci#endif /* _ASM_X86_XEN_EVENTS_H */
39