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>
enum ipi_vector {
XEN_RESCHEDULE_VECTOR ,
XEN_CALL_FUNCTION_VECTOR ,
XEN_NR_IPIS ,
} ;
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 ) ;
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 ) ;
# endif /* _XEN_EVENTS_H */