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 #include <asm/xen/events.h> 9 10 int bind_evtchn_to_irq(unsigned int evtchn); 11 int bind_evtchn_to_irqhandler(unsigned int evtchn, 12 irq_handler_t handler, 13 unsigned long irqflags, const char *devname, 14 void *dev_id); 15 int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu, 16 irq_handler_t handler, 17 unsigned long irqflags, const char *devname, 18 void *dev_id); 19 int bind_ipi_to_irqhandler(enum ipi_vector ipi, 20 unsigned int cpu, 21 irq_handler_t handler, 22 unsigned long irqflags, 23 const char *devname, 24 void *dev_id); 25 26 /* 27 * Common unbind function for all event sources. Takes IRQ to unbind from. 28 * Automatically closes the underlying event channel (even for bindings 29 * made with bind_evtchn_to_irqhandler()). 30 */ 31 void unbind_from_irqhandler(unsigned int irq, void *dev_id); 32 33 void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector); 34 int resend_irq_on_evtchn(unsigned int irq); 35 void rebind_evtchn_irq(int evtchn, int irq); 36 37 static inline void notify_remote_via_evtchn(int port) 38 { 39 struct evtchn_send send = { .port = port }; 40 (void)HYPERVISOR_event_channel_op(EVTCHNOP_send, &send); 41 } 42 43 extern void notify_remote_via_irq(int irq); 44 45 extern void xen_irq_resume(void); 46 47 /* Clear an irq's pending state, in preparation for polling on it */ 48 void xen_clear_irq_pending(int irq); 49 50 /* Poll waiting for an irq to become pending. In the usual case, the 51 irq will be disabled so it won't deliver an interrupt. */ 52 void xen_poll_irq(int irq); 53 54 #endif /* _XEN_EVENTS_H */ 55