#include <linux/init.h>
#include <linux/module.h>
#include <linux/device.h>
#include <linux/kernel.h>
#include <linux/slab.h>
#include <linux/uuid.h>
#include <linux/group_cpus.h>
#include <linux/virtio.h>
#include <linux/vdpa.h>
#include <linux/virtio_config.h>
#include <linux/virtio_ring.h>
#define MOD_VERSION …
#define MOD_AUTHOR …
#define MOD_DESC …
#define MOD_LICENSE …
struct virtio_vdpa_device { … };
struct virtio_vdpa_vq_info { … };
static inline struct virtio_vdpa_device *
to_virtio_vdpa_device(struct virtio_device *dev)
{ … }
static struct vdpa_device *vd_get_vdpa(struct virtio_device *vdev)
{ … }
static void virtio_vdpa_get(struct virtio_device *vdev, unsigned int offset,
void *buf, unsigned int len)
{ … }
static void virtio_vdpa_set(struct virtio_device *vdev, unsigned int offset,
const void *buf, unsigned int len)
{ … }
static u32 virtio_vdpa_generation(struct virtio_device *vdev)
{ … }
static u8 virtio_vdpa_get_status(struct virtio_device *vdev)
{ … }
static void virtio_vdpa_set_status(struct virtio_device *vdev, u8 status)
{ … }
static void virtio_vdpa_reset(struct virtio_device *vdev)
{ … }
static bool virtio_vdpa_notify(struct virtqueue *vq)
{ … }
static bool virtio_vdpa_notify_with_data(struct virtqueue *vq)
{ … }
static irqreturn_t virtio_vdpa_config_cb(void *private)
{ … }
static irqreturn_t virtio_vdpa_virtqueue_cb(void *private)
{ … }
static struct virtqueue *
virtio_vdpa_setup_vq(struct virtio_device *vdev, unsigned int index,
void (*callback)(struct virtqueue *vq),
const char *name, bool ctx)
{ … }
static void virtio_vdpa_del_vq(struct virtqueue *vq)
{ … }
static void virtio_vdpa_del_vqs(struct virtio_device *vdev)
{ … }
static void default_calc_sets(struct irq_affinity *affd, unsigned int affvecs)
{ … }
static struct cpumask *
create_affinity_masks(unsigned int nvecs, struct irq_affinity *affd)
{ … }
static int virtio_vdpa_find_vqs(struct virtio_device *vdev, unsigned int nvqs,
struct virtqueue *vqs[],
struct virtqueue_info vqs_info[],
struct irq_affinity *desc)
{ … }
static u64 virtio_vdpa_get_features(struct virtio_device *vdev)
{ … }
static int virtio_vdpa_finalize_features(struct virtio_device *vdev)
{ … }
static const char *virtio_vdpa_bus_name(struct virtio_device *vdev)
{ … }
static int virtio_vdpa_set_vq_affinity(struct virtqueue *vq,
const struct cpumask *cpu_mask)
{ … }
static const struct cpumask *
virtio_vdpa_get_vq_affinity(struct virtio_device *vdev, int index)
{ … }
static const struct virtio_config_ops virtio_vdpa_config_ops = …;
static void virtio_vdpa_release_dev(struct device *_d)
{ … }
static int virtio_vdpa_probe(struct vdpa_device *vdpa)
{ … }
static void virtio_vdpa_remove(struct vdpa_device *vdpa)
{ … }
static struct vdpa_driver virtio_vdpa_driver = …;
module_vdpa_driver(…) …;
MODULE_VERSION(…);
MODULE_LICENSE(…);
MODULE_AUTHOR(…);
MODULE_DESCRIPTION(…);