On 2023/2/13 10:36, Binbin Wu wrote:
On 2/9/2023 12:16 PM, Yi Liu wrote:
From: Lu Baolu baolu.lu@linux.intel.com
Introduce a new iommu op get
get -> to get
the IOMMU hardware capabilities for iommufd. This information will be used by any vIOMMU driver which is owned by userspace.
This op chooses to make the special parameters opaque to the core. This suits the current usage model where accessing any of the IOMMU device special parameters does require a userspace driver that matches the kernel driver. If a need for common parameters, implemented similarly by several drivers, arises then there is room in the design to grow a generic parameter set as well. No warpper
warpper -> wrapper
Thanks, will update.
API is added as it is supposed to be used by iommufd only.
Signed-off-by: Lu Baolu baolu.lu@linux.intel.com Signed-off-by: Yi Liu yi.l.liu@intel.com Signed-off-by: Nicolin Chen nicolinc@nvidia.com
include/linux/iommu.h | 8 ++++++++ include/uapi/linux/iommufd.h | 6 ++++++ 2 files changed, 14 insertions(+)
diff --git a/include/linux/iommu.h b/include/linux/iommu.h index cb586d054c57..97b398d19fd2 100644 --- a/include/linux/iommu.h +++ b/include/linux/iommu.h @@ -15,6 +15,7 @@ #include <linux/of.h> #include <linux/ioasid.h> #include <uapi/linux/iommu.h> +#include <uapi/linux/iommufd.h> #define IOMMU_READ (1 << 0) #define IOMMU_WRITE (1 << 1) @@ -223,6 +224,11 @@ struct iommu_iotlb_gather { /** * struct iommu_ops - iommu ops and capabilities * @capable: check capability
- @hw_info: IOMMU hardware capabilities. The type of the returned
data is
- * defined in include/uapi/linux/iommufd.h. The data buffer is
- * allocated in the IOMMU driver and the caller should free it
- * after use. Return the data buffer if success, or ERR_PTR on
- * failure.
* @domain_alloc: allocate iommu domain * @probe_device: Add device to iommu driver handling * @release_device: Remove device from iommu driver handling @@ -252,6 +258,7 @@ struct iommu_iotlb_gather { */ struct iommu_ops { bool (*capable)(struct device *dev, enum iommu_cap); + void *(*hw_info)(struct device *dev, u32 *length); /* Domain allocation and freeing by the iommu driver */ struct iommu_domain *(*domain_alloc)(unsigned iommu_domain_type); @@ -280,6 +287,7 @@ struct iommu_ops { void (*remove_dev_pasid)(struct device *dev, ioasid_t pasid); const struct iommu_domain_ops *default_domain_ops; + enum iommu_device_data_type driver_type;
How to understand the name "iommu_device_data_type"?
This is to tell userspace which type of IOMMU the returned information comes from, Intel VT-d, ARM or others...
Is it just refer to the driver types or it has a more generic meaning?
IOMMU driver sets this field to distinguish different IOMMU hardware.
Best regards, baolu