#include <linux/device.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/pci.h>
#include <linux/pm_runtime.h>
#include <linux/types.h>
#include <linux/uaccess.h>
#include <linux/vfio.h>
#include <linux/vfio_pci_core.h>
#include <linux/virtio_pci.h>
#include <linux/virtio_net.h>
#include <linux/virtio_pci_admin.h>
struct virtiovf_pci_core_device { … };
static int
virtiovf_issue_legacy_rw_cmd(struct virtiovf_pci_core_device *virtvdev,
loff_t pos, char __user *buf,
size_t count, bool read)
{ … }
static int
virtiovf_pci_bar0_rw(struct virtiovf_pci_core_device *virtvdev,
loff_t pos, char __user *buf,
size_t count, bool read)
{ … }
static ssize_t virtiovf_pci_read_config(struct vfio_device *core_vdev,
char __user *buf, size_t count,
loff_t *ppos)
{ … }
static ssize_t
virtiovf_pci_core_read(struct vfio_device *core_vdev, char __user *buf,
size_t count, loff_t *ppos)
{ … }
static ssize_t virtiovf_pci_write_config(struct vfio_device *core_vdev,
const char __user *buf, size_t count,
loff_t *ppos)
{ … }
static ssize_t
virtiovf_pci_core_write(struct vfio_device *core_vdev, const char __user *buf,
size_t count, loff_t *ppos)
{ … }
static int
virtiovf_pci_ioctl_get_region_info(struct vfio_device *core_vdev,
unsigned int cmd, unsigned long arg)
{ … }
static long
virtiovf_vfio_pci_core_ioctl(struct vfio_device *core_vdev, unsigned int cmd,
unsigned long arg)
{ … }
static int
virtiovf_set_notify_addr(struct virtiovf_pci_core_device *virtvdev)
{ … }
static int virtiovf_pci_open_device(struct vfio_device *core_vdev)
{ … }
static int virtiovf_get_device_config_size(unsigned short device)
{ … }
static int virtiovf_read_notify_info(struct virtiovf_pci_core_device *virtvdev)
{ … }
static int virtiovf_pci_init_device(struct vfio_device *core_vdev)
{ … }
static void virtiovf_pci_core_release_dev(struct vfio_device *core_vdev)
{ … }
static const struct vfio_device_ops virtiovf_vfio_pci_tran_ops = …;
static const struct vfio_device_ops virtiovf_vfio_pci_ops = …;
static bool virtiovf_bar0_exists(struct pci_dev *pdev)
{ … }
static int virtiovf_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *id)
{ … }
static void virtiovf_pci_remove(struct pci_dev *pdev)
{ … }
static const struct pci_device_id virtiovf_pci_table[] = …;
MODULE_DEVICE_TABLE(pci, virtiovf_pci_table);
static void virtiovf_pci_aer_reset_done(struct pci_dev *pdev)
{ … }
static const struct pci_error_handlers virtiovf_err_handlers = …;
static struct pci_driver virtiovf_pci_driver = …;
module_pci_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;