linux/include/xen/events.h
<<
>>
Prefs
   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
  10int bind_evtchn_to_irq(unsigned int evtchn);
  11int bind_evtchn_to_irqhandler(unsigned int evtchn,
  12                              irq_handler_t handler,
  13                              unsigned long irqflags, const char *devname,
  14                              void *dev_id);
  15int 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);
  19int 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 */
  31void unbind_from_irqhandler(unsigned int irq, void *dev_id);
  32
  33void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector);
  34int resend_irq_on_evtchn(unsigned int irq);
  35void rebind_evtchn_irq(int evtchn, int irq);
  36
  37static 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
  43extern void notify_remote_via_irq(int irq);
  44
  45extern void xen_irq_resume(void);
  46
  47/* Clear an irq's pending state, in preparation for polling on it */
  48void xen_clear_irq_pending(int irq);
  49void xen_set_irq_pending(int irq);
  50bool xen_test_irq_pending(int irq);
  51
  52/* Poll waiting for an irq to become pending.  In the usual case, the
  53   irq will be disabled so it won't deliver an interrupt. */
  54void xen_poll_irq(int irq);
  55
  56/* Determine the IRQ which is bound to an event channel */
  57unsigned irq_from_evtchn(unsigned int evtchn);
  58
  59#endif  /* _XEN_EVENTS_H */
  60