1 #ifndef _XEN_EVENTS_H 2 #define _XEN_EVENTS_H 3 4 #include <linux/interrupt.h> 5 6 #include <xen/interface/event_channel.h> 7 #include <asm/xen/hypercall.h> 8 9 enum ipi_vector { 10 XEN_RESCHEDULE_VECTOR, 11 XEN_CALL_FUNCTION_VECTOR, 12 13 XEN_NR_IPIS, 14 }; 15 16 int bind_evtchn_to_irq(unsigned int evtchn); 17 int bind_evtchn_to_irqhandler(unsigned int evtchn, 18 irq_handler_t handler, 19 unsigned long irqflags, const char *devname, 20 void *dev_id); 21 int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, 22 irq_handler_t handler, 23 unsigned long irqflags, const char *devname, 24 void *dev_id); 25 int bind_ipi_to_irqhandler(enum ipi_vector ipi, 26 unsigned int cpu, 27 irq_handler_t handler, 28 unsigned long irqflags, 29 const char *devname, 30 void *dev_id); 31 32 /* 33 * Common unbind function for all event sources. Takes IRQ to unbind from. 34 * Automatically closes the underlying event channel (even for bindings 35 * made with bind_evtchn_to_irqhandler()). 36 */ 37 void unbind_from_irqhandler(unsigned int irq, void *dev_id); 38 39 void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector); 40 41 static inline void notify_remote_via_evtchn(int port) 42 { 43 struct evtchn_send send = { .port = port }; 44 (void)HYPERVISOR_event_channel_op(EVTCHNOP_send, &send); 45 } 46 47 extern void notify_remote_via_irq(int irq); 48 #endif /* _XEN_EVENTS_H */ 49