Message ID | 20210825161916.50393-10-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [01/14] vfio: Move vfio_iommu_group_get() to vfio_register_group_dev() | expand |
> From: Christoph Hellwig <hch@lst.de> > 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@lst.de> > Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> Reviewed-by: Kevin Tian <kevin.tian@intel.com> > --- > 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@redhat.com>" > 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@redhat.com> > + */ > + > +/* 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@redhat.com>" > 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
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@redhat.com>" 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@redhat.com> + */ + +/* 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@redhat.com>" 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 */