diff mbox series

[09/14] vfio: move the vfio_iommu_driver_ops interface out of <linux/vfio.h>

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

Commit Message

Christoph Hellwig Aug. 25, 2021, 4:19 p.m. UTC
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>
---
 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

Comments

Tian, Kevin Aug. 26, 2021, 3:14 a.m. UTC | #1
> 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 mbox series

Patch

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
  */