iommufd: Add data structure for Intel VT-d stage-1 domain allocation
authorYi Liu <yi.l.liu@intel.com>
Thu, 26 Oct 2023 04:42:09 +0000 (21:42 -0700)
committerJason Gunthorpe <jgg@nvidia.com>
Thu, 26 Oct 2023 14:16:33 +0000 (11:16 -0300)
This adds IOMMU_HWPT_DATA_VTD_S1 for stage-1 hw_pagetable of Intel
VT-d and the corressponding data structure for userspace specified parameter
for the domain allocation.

Link: https://lore.kernel.org/r/20231026044216.64964-2-yi.l.liu@intel.com
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Signed-off-by: Yi Liu <yi.l.liu@intel.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
include/uapi/linux/iommufd.h

index d816deac906fd568f9e9bc87c4b88bf83fb4bb1a..3ce5ee5f09b67536d4411026838e40f9cde20c9e 100644 (file)
@@ -361,12 +361,42 @@ enum iommufd_hwpt_alloc_flags {
        IOMMU_HWPT_ALLOC_DIRTY_TRACKING = 1 << 1,
 };
 
+/**
+ * enum iommu_hwpt_vtd_s1_flags - Intel VT-d stage-1 page table
+ *                                entry attributes
+ * @IOMMU_VTD_S1_SRE: Supervisor request
+ * @IOMMU_VTD_S1_EAFE: Extended access enable
+ * @IOMMU_VTD_S1_WPE: Write protect enable
+ */
+enum iommu_hwpt_vtd_s1_flags {
+       IOMMU_VTD_S1_SRE = 1 << 0,
+       IOMMU_VTD_S1_EAFE = 1 << 1,
+       IOMMU_VTD_S1_WPE = 1 << 2,
+};
+
+/**
+ * struct iommu_hwpt_vtd_s1 - Intel VT-d stage-1 page table
+ *                            info (IOMMU_HWPT_DATA_VTD_S1)
+ * @flags: Combination of enum iommu_hwpt_vtd_s1_flags
+ * @pgtbl_addr: The base address of the stage-1 page table.
+ * @addr_width: The address width of the stage-1 page table
+ * @__reserved: Must be 0
+ */
+struct iommu_hwpt_vtd_s1 {
+       __aligned_u64 flags;
+       __aligned_u64 pgtbl_addr;
+       __u32 addr_width;
+       __u32 __reserved;
+};
+
 /**
  * enum iommu_hwpt_data_type - IOMMU HWPT Data Type
  * @IOMMU_HWPT_DATA_NONE: no data
+ * @IOMMU_HWPT_DATA_VTD_S1: Intel VT-d stage-1 page table
  */
 enum iommu_hwpt_data_type {
        IOMMU_HWPT_DATA_NONE,
+       IOMMU_HWPT_DATA_VTD_S1,
 };
 
 /**