1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _ASM_X86_XEN_EVENTS_H 3*4882a593Smuzhiyun #define _ASM_X86_XEN_EVENTS_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <xen/xen.h> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun enum ipi_vector { 8*4882a593Smuzhiyun XEN_RESCHEDULE_VECTOR, 9*4882a593Smuzhiyun XEN_CALL_FUNCTION_VECTOR, 10*4882a593Smuzhiyun XEN_CALL_FUNCTION_SINGLE_VECTOR, 11*4882a593Smuzhiyun XEN_SPIN_UNLOCK_VECTOR, 12*4882a593Smuzhiyun XEN_IRQ_WORK_VECTOR, 13*4882a593Smuzhiyun XEN_NMI_VECTOR, 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun XEN_NR_IPIS, 16*4882a593Smuzhiyun }; 17*4882a593Smuzhiyun xen_irqs_disabled(struct pt_regs * regs)18*4882a593Smuzhiyunstatic inline int xen_irqs_disabled(struct pt_regs *regs) 19*4882a593Smuzhiyun { 20*4882a593Smuzhiyun return raw_irqs_disabled_flags(regs->flags); 21*4882a593Smuzhiyun } 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* No need for a barrier -- XCHG is a barrier on x86. */ 24*4882a593Smuzhiyun #define xchg_xen_ulong(ptr, val) xchg((ptr), (val)) 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun extern int xen_have_vector_callback; 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* 29*4882a593Smuzhiyun * Events delivered via platform PCI interrupts are always 30*4882a593Smuzhiyun * routed to vcpu 0 and hence cannot be rebound. 31*4882a593Smuzhiyun */ xen_support_evtchn_rebind(void)32*4882a593Smuzhiyunstatic inline bool xen_support_evtchn_rebind(void) 33*4882a593Smuzhiyun { 34*4882a593Smuzhiyun return (!xen_hvm_domain() || xen_have_vector_callback); 35*4882a593Smuzhiyun } 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #endif /* _ASM_X86_XEN_EVENTS_H */ 38