events.h 1.3 KB
Newer Older
J
Jeremy Fitzhardinge 已提交
1 2 3
#ifndef _XEN_EVENTS_H
#define _XEN_EVENTS_H

J
Jeremy Fitzhardinge 已提交
4 5 6 7 8 9 10 11 12 13 14
#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,
};
J
Jeremy Fitzhardinge 已提交
15 16

int bind_evtchn_to_irqhandler(unsigned int evtchn,
J
Jeremy Fitzhardinge 已提交
17
			      irq_handler_t handler,
J
Jeremy Fitzhardinge 已提交
18 19 20
			      unsigned long irqflags, const char *devname,
			      void *dev_id);
int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
J
Jeremy Fitzhardinge 已提交
21 22 23 24 25 26 27 28 29
			    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);
J
Jeremy Fitzhardinge 已提交
30 31 32 33 34 35 36 37

/*
 * 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);

J
Jeremy Fitzhardinge 已提交
38 39
void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector);

J
Jeremy Fitzhardinge 已提交
40 41 42 43 44 45 46 47
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 */