cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

events.h (4835B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef _XEN_EVENTS_H
      3#define _XEN_EVENTS_H
      4
      5#include <linux/interrupt.h>
      6#include <linux/irq.h>
      7#ifdef CONFIG_PCI_MSI
      8#include <linux/msi.h>
      9#endif
     10
     11#include <xen/interface/event_channel.h>
     12#include <asm/xen/hypercall.h>
     13#include <asm/xen/events.h>
     14
     15struct xenbus_device;
     16
     17unsigned xen_evtchn_nr_channels(void);
     18
     19int bind_evtchn_to_irq(evtchn_port_t evtchn);
     20int bind_evtchn_to_irq_lateeoi(evtchn_port_t evtchn);
     21int bind_evtchn_to_irqhandler(evtchn_port_t evtchn,
     22			      irq_handler_t handler,
     23			      unsigned long irqflags, const char *devname,
     24			      void *dev_id);
     25int bind_evtchn_to_irqhandler_lateeoi(evtchn_port_t evtchn,
     26			      irq_handler_t handler,
     27			      unsigned long irqflags, const char *devname,
     28			      void *dev_id);
     29int bind_virq_to_irq(unsigned int virq, unsigned int cpu, bool percpu);
     30int bind_virq_to_irqhandler(unsigned int virq, unsigned int cpu,
     31			    irq_handler_t handler,
     32			    unsigned long irqflags, const char *devname,
     33			    void *dev_id);
     34int bind_ipi_to_irqhandler(enum ipi_vector ipi,
     35			   unsigned int cpu,
     36			   irq_handler_t handler,
     37			   unsigned long irqflags,
     38			   const char *devname,
     39			   void *dev_id);
     40int bind_interdomain_evtchn_to_irq_lateeoi(struct xenbus_device *dev,
     41					   evtchn_port_t remote_port);
     42int bind_interdomain_evtchn_to_irqhandler_lateeoi(struct xenbus_device *dev,
     43						  evtchn_port_t remote_port,
     44						  irq_handler_t handler,
     45						  unsigned long irqflags,
     46						  const char *devname,
     47						  void *dev_id);
     48
     49/*
     50 * Common unbind function for all event sources. Takes IRQ to unbind from.
     51 * Automatically closes the underlying event channel (even for bindings
     52 * made with bind_evtchn_to_irqhandler()).
     53 */
     54void unbind_from_irqhandler(unsigned int irq, void *dev_id);
     55
     56/*
     57 * Send late EOI for an IRQ bound to an event channel via one of the *_lateeoi
     58 * functions above.
     59 */
     60void xen_irq_lateeoi(unsigned int irq, unsigned int eoi_flags);
     61/* Signal an event was spurious, i.e. there was no action resulting from it. */
     62#define XEN_EOI_FLAG_SPURIOUS	0x00000001
     63
     64#define XEN_IRQ_PRIORITY_MAX     EVTCHN_FIFO_PRIORITY_MAX
     65#define XEN_IRQ_PRIORITY_DEFAULT EVTCHN_FIFO_PRIORITY_DEFAULT
     66#define XEN_IRQ_PRIORITY_MIN     EVTCHN_FIFO_PRIORITY_MIN
     67int xen_set_irq_priority(unsigned irq, unsigned priority);
     68
     69/*
     70 * Allow extra references to event channels exposed to userspace by evtchn
     71 */
     72int evtchn_make_refcounted(evtchn_port_t evtchn);
     73int evtchn_get(evtchn_port_t evtchn);
     74void evtchn_put(evtchn_port_t evtchn);
     75
     76void xen_send_IPI_one(unsigned int cpu, enum ipi_vector vector);
     77void rebind_evtchn_irq(evtchn_port_t evtchn, int irq);
     78int xen_set_affinity_evtchn(struct irq_desc *desc, unsigned int tcpu);
     79
     80static inline void notify_remote_via_evtchn(evtchn_port_t port)
     81{
     82	struct evtchn_send send = { .port = port };
     83	(void)HYPERVISOR_event_channel_op(EVTCHNOP_send, &send);
     84}
     85
     86void notify_remote_via_irq(int irq);
     87
     88void xen_irq_resume(void);
     89
     90/* Clear an irq's pending state, in preparation for polling on it */
     91void xen_clear_irq_pending(int irq);
     92void xen_set_irq_pending(int irq);
     93bool xen_test_irq_pending(int irq);
     94
     95/* Poll waiting for an irq to become pending.  In the usual case, the
     96   irq will be disabled so it won't deliver an interrupt. */
     97void xen_poll_irq(int irq);
     98
     99/* Poll waiting for an irq to become pending with a timeout.  In the usual case,
    100 * the irq will be disabled so it won't deliver an interrupt. */
    101void xen_poll_irq_timeout(int irq, u64 timeout);
    102
    103/* Determine the IRQ which is bound to an event channel */
    104unsigned int irq_from_evtchn(evtchn_port_t evtchn);
    105int irq_from_virq(unsigned int cpu, unsigned int virq);
    106evtchn_port_t evtchn_from_irq(unsigned irq);
    107
    108int xen_set_callback_via(uint64_t via);
    109void xen_evtchn_do_upcall(struct pt_regs *regs);
    110void xen_hvm_evtchn_do_upcall(void);
    111
    112/* Bind a pirq for a physical interrupt to an irq. */
    113int xen_bind_pirq_gsi_to_irq(unsigned gsi,
    114			     unsigned pirq, int shareable, char *name);
    115
    116#ifdef CONFIG_PCI_MSI
    117/* Allocate a pirq for a MSI style physical interrupt. */
    118int xen_allocate_pirq_msi(struct pci_dev *dev, struct msi_desc *msidesc);
    119/* Bind an PSI pirq to an irq. */
    120int xen_bind_pirq_msi_to_irq(struct pci_dev *dev, struct msi_desc *msidesc,
    121			     int pirq, int nvec, const char *name, domid_t domid);
    122#endif
    123
    124/* De-allocates the above mentioned physical interrupt. */
    125int xen_destroy_irq(int irq);
    126
    127/* Return irq from pirq */
    128int xen_irq_from_pirq(unsigned pirq);
    129
    130/* Return the pirq allocated to the irq. */
    131int xen_pirq_from_irq(unsigned irq);
    132
    133/* Return the irq allocated to the gsi */
    134int xen_irq_from_gsi(unsigned gsi);
    135
    136/* Determine whether to ignore this IRQ if it is passed to a guest. */
    137int xen_test_irq_shared(int irq);
    138
    139/* initialize Xen IRQ subsystem */
    140void xen_init_IRQ(void);
    141#endif	/* _XEN_EVENTS_H */