This source file includes following definitions.
- to_vp_device
- virtio_pci_legacy_probe
- virtio_pci_legacy_remove
   1 
   2 #ifndef _DRIVERS_VIRTIO_VIRTIO_PCI_COMMON_H
   3 #define _DRIVERS_VIRTIO_VIRTIO_PCI_COMMON_H
   4 
   5 
   6 
   7 
   8 
   9 
  10 
  11 
  12 
  13 
  14 
  15 
  16 
  17 
  18 
  19 #include <linux/module.h>
  20 #include <linux/list.h>
  21 #include <linux/pci.h>
  22 #include <linux/slab.h>
  23 #include <linux/interrupt.h>
  24 #include <linux/virtio.h>
  25 #include <linux/virtio_config.h>
  26 #include <linux/virtio_ring.h>
  27 #include <linux/virtio_pci.h>
  28 #include <linux/highmem.h>
  29 #include <linux/spinlock.h>
  30 
  31 struct virtio_pci_vq_info {
  32         
  33         struct virtqueue *vq;
  34 
  35         
  36         struct list_head node;
  37 
  38         
  39         unsigned msix_vector;
  40 };
  41 
  42 
  43 struct virtio_pci_device {
  44         struct virtio_device vdev;
  45         struct pci_dev *pci_dev;
  46 
  47         
  48         
  49         u8 __iomem *isr;
  50 
  51         
  52         
  53         struct virtio_pci_common_cfg __iomem *common;
  54         
  55         void __iomem *device;
  56         
  57         void __iomem *notify_base;
  58 
  59         
  60         size_t notify_len;
  61         size_t device_len;
  62 
  63         
  64         int notify_map_cap;
  65 
  66         
  67         u32 notify_offset_multiplier;
  68 
  69         int modern_bars;
  70 
  71         
  72         
  73         void __iomem *ioaddr;
  74 
  75         
  76         spinlock_t lock;
  77         struct list_head virtqueues;
  78 
  79         
  80         struct virtio_pci_vq_info **vqs;
  81 
  82         
  83         int msix_enabled;
  84         int intx_enabled;
  85         cpumask_var_t *msix_affinity_masks;
  86         
  87 
  88         char (*msix_names)[256];
  89         
  90         unsigned msix_vectors;
  91         
  92         unsigned msix_used_vectors;
  93 
  94         
  95         bool per_vq_vectors;
  96 
  97         struct virtqueue *(*setup_vq)(struct virtio_pci_device *vp_dev,
  98                                       struct virtio_pci_vq_info *info,
  99                                       unsigned idx,
 100                                       void (*callback)(struct virtqueue *vq),
 101                                       const char *name,
 102                                       bool ctx,
 103                                       u16 msix_vec);
 104         void (*del_vq)(struct virtio_pci_vq_info *info);
 105 
 106         u16 (*config_vector)(struct virtio_pci_device *vp_dev, u16 vector);
 107 };
 108 
 109 
 110 
 111 
 112 enum {
 113         VP_MSIX_CONFIG_VECTOR = 0,
 114         VP_MSIX_VQ_VECTOR = 1,
 115 };
 116 
 117 
 118 static struct virtio_pci_device *to_vp_device(struct virtio_device *vdev)
 119 {
 120         return container_of(vdev, struct virtio_pci_device, vdev);
 121 }
 122 
 123 
 124 void vp_synchronize_vectors(struct virtio_device *vdev);
 125 
 126 bool vp_notify(struct virtqueue *vq);
 127 
 128 void vp_del_vqs(struct virtio_device *vdev);
 129 
 130 int vp_find_vqs(struct virtio_device *vdev, unsigned nvqs,
 131                 struct virtqueue *vqs[], vq_callback_t *callbacks[],
 132                 const char * const names[], const bool *ctx,
 133                 struct irq_affinity *desc);
 134 const char *vp_bus_name(struct virtio_device *vdev);
 135 
 136 
 137 
 138 
 139 
 140 
 141 int vp_set_vq_affinity(struct virtqueue *vq, const struct cpumask *cpu_mask);
 142 
 143 const struct cpumask *vp_get_vq_affinity(struct virtio_device *vdev, int index);
 144 
 145 #if IS_ENABLED(CONFIG_VIRTIO_PCI_LEGACY)
 146 int virtio_pci_legacy_probe(struct virtio_pci_device *);
 147 void virtio_pci_legacy_remove(struct virtio_pci_device *);
 148 #else
 149 static inline int virtio_pci_legacy_probe(struct virtio_pci_device *vp_dev)
 150 {
 151         return -ENODEV;
 152 }
 153 static inline void virtio_pci_legacy_remove(struct virtio_pci_device *vp_dev)
 154 {
 155 }
 156 #endif
 157 int virtio_pci_modern_probe(struct virtio_pci_device *);
 158 void virtio_pci_modern_remove(struct virtio_pci_device *);
 159 
 160 #endif