> From: Christoph Hellwig <hch@xxxxxx> > Sent: Thursday, August 26, 2021 12:19 AM > > Create a new private drivers/vfio/vfio.h header for the interface between > the VFIO core and the iommu drivers. > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx> > --- > drivers/vfio/vfio.c | 1 + > drivers/vfio/vfio.h | 47 +++++++++++++++++++++++++++++ > drivers/vfio/vfio_iommu_spapr_tce.c | 1 + > drivers/vfio/vfio_iommu_type1.c | 1 + > include/linux/vfio.h | 44 --------------------------- > 5 files changed, 50 insertions(+), 44 deletions(-) > create mode 100644 drivers/vfio/vfio.h > > diff --git a/drivers/vfio/vfio.c b/drivers/vfio/vfio.c > index 7b9629cbbf0e80..f73158fce8c446 100644 > --- a/drivers/vfio/vfio.c > +++ b/drivers/vfio/vfio.c > @@ -32,6 +32,7 @@ > #include <linux/vfio.h> > #include <linux/wait.h> > #include <linux/sched/signal.h> > +#include "vfio.h" > > #define DRIVER_VERSION "0.3" > #define DRIVER_AUTHOR "Alex Williamson > <alex.williamson@xxxxxxxxxx>" > diff --git a/drivers/vfio/vfio.h b/drivers/vfio/vfio.h > new file mode 100644 > index 00000000000000..a78de649eb2f16 > --- /dev/null > +++ b/drivers/vfio/vfio.h > @@ -0,0 +1,47 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (C) 2012 Red Hat, Inc. All rights reserved. > + * Author: Alex Williamson <alex.williamson@xxxxxxxxxx> > + */ > + > +/* events for the backend driver notify callback */ > +enum vfio_iommu_notify_type { > + VFIO_IOMMU_CONTAINER_CLOSE = 0, > +}; > + > +/** > + * struct vfio_iommu_driver_ops - VFIO IOMMU driver callbacks > + */ > +struct vfio_iommu_driver_ops { > + char *name; > + struct module *owner; > + void *(*open)(unsigned long arg); > + void (*release)(void *iommu_data); > + long (*ioctl)(void *iommu_data, unsigned int cmd, > + unsigned long arg); > + int (*attach_group)(void *iommu_data, > + struct iommu_group *group); > + void (*detach_group)(void *iommu_data, > + struct iommu_group *group); > + int (*pin_pages)(void *iommu_data, > + struct iommu_group *group, > + unsigned long *user_pfn, > + int npage, int prot, > + unsigned long *phys_pfn); > + int (*unpin_pages)(void *iommu_data, > + unsigned long *user_pfn, int npage); > + int (*register_notifier)(void *iommu_data, > + unsigned long *events, > + struct notifier_block *nb); > + int (*unregister_notifier)(void *iommu_data, > + struct notifier_block *nb); > + int (*dma_rw)(void *iommu_data, dma_addr_t > user_iova, > + void *data, size_t count, bool write); > + struct iommu_domain *(*group_iommu_domain)(void > *iommu_data, > + struct iommu_group > *group); > + void (*notify)(void *iommu_data, > + enum vfio_iommu_notify_type event); > +}; > + > +int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops *ops); > +void vfio_unregister_iommu_driver(const struct vfio_iommu_driver_ops > *ops); > diff --git a/drivers/vfio/vfio_iommu_spapr_tce.c > b/drivers/vfio/vfio_iommu_spapr_tce.c > index fe888b5dcc0062..3efd09faeca4a8 100644 > --- a/drivers/vfio/vfio_iommu_spapr_tce.c > +++ b/drivers/vfio/vfio_iommu_spapr_tce.c > @@ -20,6 +20,7 @@ > #include <linux/sched/mm.h> > #include <linux/sched/signal.h> > #include <linux/mm.h> > +#include "vfio.h" > > #include <asm/iommu.h> > #include <asm/tce.h> > diff --git a/drivers/vfio/vfio_iommu_type1.c > b/drivers/vfio/vfio_iommu_type1.c > index 0b4f7c174c7a2b..92777797578e50 100644 > --- a/drivers/vfio/vfio_iommu_type1.c > +++ b/drivers/vfio/vfio_iommu_type1.c > @@ -40,6 +40,7 @@ > #include <linux/notifier.h> > #include <linux/dma-iommu.h> > #include <linux/irqdomain.h> > +#include "vfio.h" > > #define DRIVER_VERSION "0.2" > #define DRIVER_AUTHOR "Alex Williamson > <alex.williamson@xxxxxxxxxx>" > diff --git a/include/linux/vfio.h b/include/linux/vfio.h > index 7a57a0077f9637..76191d7abed185 100644 > --- a/include/linux/vfio.h > +++ b/include/linux/vfio.h > @@ -82,50 +82,6 @@ extern void vfio_device_put(struct vfio_device > *device); > > int vfio_assign_device_set(struct vfio_device *device, void *set_id); > > -/* events for the backend driver notify callback */ > -enum vfio_iommu_notify_type { > - VFIO_IOMMU_CONTAINER_CLOSE = 0, > -}; > - > -/** > - * struct vfio_iommu_driver_ops - VFIO IOMMU driver callbacks > - */ > -struct vfio_iommu_driver_ops { > - char *name; > - struct module *owner; > - void *(*open)(unsigned long arg); > - void (*release)(void *iommu_data); > - long (*ioctl)(void *iommu_data, unsigned int cmd, > - unsigned long arg); > - int (*attach_group)(void *iommu_data, > - struct iommu_group *group); > - void (*detach_group)(void *iommu_data, > - struct iommu_group *group); > - int (*pin_pages)(void *iommu_data, > - struct iommu_group *group, > - unsigned long *user_pfn, > - int npage, int prot, > - unsigned long *phys_pfn); > - int (*unpin_pages)(void *iommu_data, > - unsigned long *user_pfn, int npage); > - int (*register_notifier)(void *iommu_data, > - unsigned long *events, > - struct notifier_block *nb); > - int (*unregister_notifier)(void *iommu_data, > - struct notifier_block *nb); > - int (*dma_rw)(void *iommu_data, dma_addr_t > user_iova, > - void *data, size_t count, bool write); > - struct iommu_domain *(*group_iommu_domain)(void > *iommu_data, > - struct iommu_group > *group); > - void (*notify)(void *iommu_data, > - enum vfio_iommu_notify_type event); > -}; > - > -extern int vfio_register_iommu_driver(const struct vfio_iommu_driver_ops > *ops); > - > -extern void vfio_unregister_iommu_driver( > - const struct vfio_iommu_driver_ops *ops); > - > /* > * External user API > */ > -- > 2.30.2