iommu_opsRegular
4.4: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_dm_regions)(struct device *, struct list_head *);
void (*put_dm_regions)(struct device *, struct list_head *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
long unsigned int pgsize_bitmap;
void *priv;
};
4.8: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_dm_regions)(struct device *, struct list_head *);
void (*put_dm_regions)(struct device *, struct list_head *);
void (*apply_dm_region)(struct device *, struct iommu_domain *, struct iommu_dm_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
long unsigned int pgsize_bitmap;
};
4.10: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
long unsigned int pgsize_bitmap;
};
4.13: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
long unsigned int pgsize_bitmap;
};
4.15: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync)(struct iommu_domain *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
long unsigned int pgsize_bitmap;
};
4.18: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync)(struct iommu_domain *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*domain_set_windows)(struct iommu_domain *, u32);
u32 (*domain_get_windows)(struct iommu_domain *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
long unsigned int pgsize_bitmap;
};
5.0: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync)(struct iommu_domain *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
long unsigned int pgsize_bitmap;
};
5.3: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
5.4: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
5.8: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
int (*sva_unbind_gpasid)(struct device *, int);
int (*def_domain_type)(struct device *);
long unsigned int pgsize_bitmap;
struct module *owner;
};
5.11: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
u32 (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
int (*sva_unbind_gpasid)(struct device *, u32);
int (*def_domain_type)(struct device *);
long unsigned int pgsize_bitmap;
struct module *owner;
};
5.13: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*enable_nesting)(struct iommu_domain *);
int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
u32 (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
int (*sva_unbind_gpasid)(struct device *, u32);
int (*def_domain_type)(struct device *);
long unsigned int pgsize_bitmap;
struct module *owner;
};
5.15: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t);
int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*enable_nesting)(struct iommu_domain *);
int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
u32 (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *);
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *);
int (*sva_unbind_gpasid)(struct device *, u32);
int (*def_domain_type)(struct device *);
long unsigned int pgsize_bitmap;
struct module *owner;
};
5.19: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
u32 (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*def_domain_type)(struct device *);
const struct iommu_domain_ops *default_domain_ops;
long unsigned int pgsize_bitmap;
struct module *owner;
};
6.2: ✅struct iommu_ops {
bool (*capable)(struct device *, enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
void (*get_resv_regions)(struct device *, struct list_head *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct device *);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*def_domain_type)(struct device *);
void (*remove_dev_pasid)(struct device *, ioasid_t);
const struct iommu_domain_ops *default_domain_ops;
long unsigned int pgsize_bitmap;
struct module *owner;
};
6.5: ✅struct iommu_ops {
bool (*capable)(struct device *, enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
void (*set_platform_dma_ops)(struct device *);
struct iommu_group * (*device_group)(struct device *);
void (*get_resv_regions)(struct device *, struct list_head *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct device *);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*def_domain_type)(struct device *);
void (*remove_dev_pasid)(struct device *, ioasid_t);
const struct iommu_domain_ops *default_domain_ops;
long unsigned int pgsize_bitmap;
struct module *owner;
};
6.8: ✅struct iommu_ops {
bool (*capable)(struct device *, enum iommu_cap);
void * (*hw_info)(struct device *, u32 *, u32 *);
struct iommu_domain * (*domain_alloc)(unsigned int);
struct iommu_domain * (*domain_alloc_user)(struct device *, u32, struct iommu_domain *, const struct iommu_user_data *);
struct iommu_domain * (*domain_alloc_paging)(struct device *);
struct iommu_device * (*probe_device)(struct device *);
void (*release_device)(struct device *);
void (*probe_finalize)(struct device *);
struct iommu_group * (*device_group)(struct device *);
void (*get_resv_regions)(struct device *, struct list_head *);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct device *);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
int (*def_domain_type)(struct device *);
void (*remove_dev_pasid)(struct device *, ioasid_t);
const struct iommu_domain_ops *default_domain_ops;
long unsigned int pgsize_bitmap;
struct module *owner;
struct iommu_domain *identity_domain;
struct iommu_domain *blocked_domain;
struct iommu_domain *default_domain;
};
arm64: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
armhf: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
ppc64el: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
riscv64: ✅struct iommu_ops {
};
aws: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
azure: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
gcp: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
lowlatency: ✅struct iommu_ops {
bool (*capable)(enum iommu_cap);
struct iommu_domain * (*domain_alloc)(unsigned int);
void (*domain_free)(struct iommu_domain *);
int (*attach_dev)(struct iommu_domain *, struct device *);
void (*detach_dev)(struct iommu_domain *, struct device *);
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int);
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *);
void (*flush_iotlb_all)(struct iommu_domain *);
void (*iotlb_sync_map)(struct iommu_domain *);
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *);
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t);
int (*add_device)(struct device *);
void (*remove_device)(struct device *);
struct iommu_group * (*device_group)(struct device *);
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *);
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *);
void (*get_resv_regions)(struct device *, struct list_head *);
void (*put_resv_regions)(struct device *, struct list_head *);
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *);
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int);
void (*domain_window_disable)(struct iommu_domain *, u32);
int (*of_xlate)(struct device *, struct of_phandle_args *);
bool (*is_attach_deferred)(struct iommu_domain *, struct device *);
bool (*dev_has_feat)(struct device *, enum iommu_dev_features);
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features);
int (*dev_enable_feat)(struct device *, enum iommu_dev_features);
int (*dev_disable_feat)(struct device *, enum iommu_dev_features);
int (*aux_attach_dev)(struct iommu_domain *, struct device *);
void (*aux_detach_dev)(struct iommu_domain *, struct device *);
int (*aux_get_pasid)(struct iommu_domain *, struct device *);
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *);
void (*sva_unbind)(struct iommu_sva *);
int (*sva_get_pasid)(struct iommu_sva *);
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *);
long unsigned int pgsize_bitmap;
};
Regular
4.4 and 4.8 ⚠️void (*apply_dm_region)(struct device *, struct iommu_domain *, struct iommu_dm_region *)
int (*of_xlate)(struct device *, struct of_phandle_args *)
void *priv
4.8 and 4.10 ⚠️void (*get_resv_regions)(struct device *, struct list_head *)
void (*put_resv_regions)(struct device *, struct list_head *)
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *)
void (*get_dm_regions)(struct device *, struct list_head *)
void (*put_dm_regions)(struct device *, struct list_head *)
void (*apply_dm_region)(struct device *, struct iommu_domain *, struct iommu_dm_region *)
4.10 and 4.13 ✅
4.13 and 4.15 ⚠️void (*flush_iotlb_all)(struct iommu_domain *)
void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t)
void (*iotlb_sync)(struct iommu_domain *)
bool (*is_attach_deferred)(struct iommu_domain *, struct device *)
4.15 and 4.18 ✅
4.18 and 5.0 ⚠️size_t (*map_sg)(struct iommu_domain *, long unsigned int, struct scatterlist *, unsigned int, int)
int (*domain_set_windows)(struct iommu_domain *, u32)
u32 (*domain_get_windows)(struct iommu_domain *)
5.0 and 5.3 ⚠️void (*iotlb_sync_map)(struct iommu_domain *)
bool (*dev_has_feat)(struct device *, enum iommu_dev_features)
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features)
int (*dev_enable_feat)(struct device *, enum iommu_dev_features)
int (*dev_disable_feat)(struct device *, enum iommu_dev_features)
int (*aux_attach_dev)(struct iommu_domain *, struct device *)
void (*aux_detach_dev)(struct iommu_domain *, struct device *)
int (*aux_get_pasid)(struct iommu_domain *, struct device *)
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *)
void (*sva_unbind)(struct iommu_sva *)
int (*sva_get_pasid)(struct iommu_sva *)
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *)
5.3 and 5.4 ⚠️void (*iotlb_range_add)(struct iommu_domain *, long unsigned int, size_t)
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t) ➡️ size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *)
void (*iotlb_sync)(struct iommu_domain *) ➡️ void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *)
5.4 and 5.8 ⚠️struct iommu_device * (*probe_device)(struct device *)
void (*release_device)(struct device *)
void (*probe_finalize)(struct device *)
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *)
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *)
int (*sva_unbind_gpasid)(struct device *, int)
int (*def_domain_type)(struct device *)
struct module *owner
int (*add_device)(struct device *)
void (*remove_device)(struct device *)
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int) ➡️ int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t)
5.8 and 5.11 ⚠️int (*sva_get_pasid)(struct iommu_sva *) ➡️ u32 (*sva_get_pasid)(struct iommu_sva *)
int (*sva_unbind_gpasid)(struct device *, int) ➡️ int (*sva_unbind_gpasid)(struct device *, u32)
5.11 and 5.13 ⚠️int (*enable_nesting)(struct iommu_domain *)
int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int)
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *)
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *)
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int)
void (*domain_window_disable)(struct iommu_domain *, u32)
void (*iotlb_sync_map)(struct iommu_domain *) ➡️ void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t)
5.13 and 5.15 ⚠️int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *)
size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *)
5.15 and 5.19 ⚠️const struct iommu_domain_ops *default_domain_ops
void (*domain_free)(struct iommu_domain *)
int (*attach_dev)(struct iommu_domain *, struct device *)
void (*detach_dev)(struct iommu_domain *, struct device *)
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int, gfp_t)
int (*map_pages)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, size_t, int, gfp_t, size_t *)
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *)
size_t (*unmap_pages)(struct iommu_domain *, long unsigned int, size_t, size_t, struct iommu_iotlb_gather *)
void (*flush_iotlb_all)(struct iommu_domain *)
void (*iotlb_sync_map)(struct iommu_domain *, long unsigned int, size_t)
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *)
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t)
int (*enable_nesting)(struct iommu_domain *)
int (*set_pgtable_quirks)(struct iommu_domain *, long unsigned int)
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *)
int (*aux_attach_dev)(struct iommu_domain *, struct device *)
void (*aux_detach_dev)(struct iommu_domain *, struct device *)
int (*aux_get_pasid)(struct iommu_domain *, struct device *)
int (*cache_invalidate)(struct iommu_domain *, struct device *, struct iommu_cache_invalidate_info *)
int (*sva_bind_gpasid)(struct iommu_domain *, struct device *, struct iommu_gpasid_bind_data *)
int (*sva_unbind_gpasid)(struct device *, u32)
bool (*is_attach_deferred)(struct iommu_domain *, struct device *) ➡️ bool (*is_attach_deferred)(struct device *)
5.19 and 6.2 ⚠️void (*remove_dev_pasid)(struct device *, ioasid_t)
void (*put_resv_regions)(struct device *, struct list_head *)
bool (*dev_has_feat)(struct device *, enum iommu_dev_features)
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features)
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *)
void (*sva_unbind)(struct iommu_sva *)
u32 (*sva_get_pasid)(struct iommu_sva *)
bool (*capable)(enum iommu_cap) ➡️ bool (*capable)(struct device *, enum iommu_cap)
6.2 and 6.5 ⚠️void (*set_platform_dma_ops)(struct device *)
6.5 and 6.8 ⚠️void * (*hw_info)(struct device *, u32 *, u32 *)
struct iommu_domain * (*domain_alloc_user)(struct device *, u32, struct iommu_domain *, const struct iommu_user_data *)
struct iommu_domain * (*domain_alloc_paging)(struct device *)
struct iommu_domain *identity_domain
struct iommu_domain *blocked_domain
struct iommu_domain *default_domain
void (*set_platform_dma_ops)(struct device *)
amd64 and arm64 ✅
amd64 and armhf ✅
amd64 and ppc64el ✅
amd64 and riscv64 ⚠️bool (*capable)(enum iommu_cap)
struct iommu_domain * (*domain_alloc)(unsigned int)
void (*domain_free)(struct iommu_domain *)
int (*attach_dev)(struct iommu_domain *, struct device *)
void (*detach_dev)(struct iommu_domain *, struct device *)
int (*map)(struct iommu_domain *, long unsigned int, phys_addr_t, size_t, int)
size_t (*unmap)(struct iommu_domain *, long unsigned int, size_t, struct iommu_iotlb_gather *)
void (*flush_iotlb_all)(struct iommu_domain *)
void (*iotlb_sync_map)(struct iommu_domain *)
void (*iotlb_sync)(struct iommu_domain *, struct iommu_iotlb_gather *)
phys_addr_t (*iova_to_phys)(struct iommu_domain *, dma_addr_t)
int (*add_device)(struct device *)
void (*remove_device)(struct device *)
struct iommu_group * (*device_group)(struct device *)
int (*domain_get_attr)(struct iommu_domain *, enum iommu_attr, void *)
int (*domain_set_attr)(struct iommu_domain *, enum iommu_attr, void *)
void (*get_resv_regions)(struct device *, struct list_head *)
void (*put_resv_regions)(struct device *, struct list_head *)
void (*apply_resv_region)(struct device *, struct iommu_domain *, struct iommu_resv_region *)
int (*domain_window_enable)(struct iommu_domain *, u32, phys_addr_t, u64, int)
void (*domain_window_disable)(struct iommu_domain *, u32)
int (*of_xlate)(struct device *, struct of_phandle_args *)
bool (*is_attach_deferred)(struct iommu_domain *, struct device *)
bool (*dev_has_feat)(struct device *, enum iommu_dev_features)
bool (*dev_feat_enabled)(struct device *, enum iommu_dev_features)
int (*dev_enable_feat)(struct device *, enum iommu_dev_features)
int (*dev_disable_feat)(struct device *, enum iommu_dev_features)
int (*aux_attach_dev)(struct iommu_domain *, struct device *)
void (*aux_detach_dev)(struct iommu_domain *, struct device *)
int (*aux_get_pasid)(struct iommu_domain *, struct device *)
struct iommu_sva * (*sva_bind)(struct device *, struct mm_struct *, void *)
void (*sva_unbind)(struct iommu_sva *)
int (*sva_get_pasid)(struct iommu_sva *)
int (*page_response)(struct device *, struct iommu_fault_event *, struct iommu_page_response *)
long unsigned int pgsize_bitmap
generic and aws ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅