iommu_ops
Regular
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
✅