2007-07-18 05:37:05 +04:00
# ifndef _XEN_EVENTS_H
# define _XEN_EVENTS_H
2007-07-18 05:37:06 +04:00
# include <linux/interrupt.h>
# include <xen/interface/event_channel.h>
# include <asm/xen/hypercall.h>
2008-04-02 21:53:56 +04:00
# include <asm/xen/events.h>
2007-07-18 05:37:05 +04:00
2007-07-18 05:37:06 +04:00
int bind_evtchn_to_irq ( unsigned int evtchn ) ;
2007-07-18 05:37:05 +04:00
int bind_evtchn_to_irqhandler ( unsigned int evtchn ,
2007-07-18 05:37:06 +04:00
irq_handler_t handler ,
2007-07-18 05:37:05 +04:00
unsigned long irqflags , const char * devname ,
void * dev_id ) ;
int bind_virq_to_irqhandler ( unsigned int virq , unsigned int cpu ,
2007-07-18 05:37:06 +04:00
irq_handler_t handler ,
unsigned long irqflags , const char * devname ,
void * dev_id ) ;
int bind_ipi_to_irqhandler ( enum ipi_vector ipi ,
unsigned int cpu ,
irq_handler_t handler ,
unsigned long irqflags ,
const char * devname ,
void * dev_id ) ;
2007-07-18 05:37:05 +04:00
/*
* Common unbind function for all event sources . Takes IRQ to unbind from .
* Automatically closes the underlying event channel ( even for bindings
* made with bind_evtchn_to_irqhandler ( ) ) .
*/
void unbind_from_irqhandler ( unsigned int irq , void * dev_id ) ;
2007-07-18 05:37:06 +04:00
void xen_send_IPI_one ( unsigned int cpu , enum ipi_vector vector ) ;
2008-04-02 21:53:57 +04:00
int resend_irq_on_evtchn ( unsigned int irq ) ;
2008-05-27 02:31:23 +04:00
void rebind_evtchn_irq ( int evtchn , int irq ) ;
2007-07-18 05:37:06 +04:00
2007-07-18 05:37:05 +04:00
static inline void notify_remote_via_evtchn ( int port )
{
struct evtchn_send send = { . port = port } ;
( void ) HYPERVISOR_event_channel_op ( EVTCHNOP_send , & send ) ;
}
extern void notify_remote_via_irq ( int irq ) ;
2008-05-27 02:31:27 +04:00
extern void xen_irq_resume ( void ) ;
2007-07-18 05:37:05 +04:00
# endif /* _XEN_EVENTS_H */