vfio_iommu_driver_opsRegular
4.4: Absent ⚠️
4.8: Absent ⚠️
4.10: Absent ⚠️
4.13: Absent ⚠️
4.15: Absent ⚠️
4.18: Absent ⚠️
5.0: Absent ⚠️
5.3: Absent ⚠️
5.4: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
};
5.8: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
};
5.11: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *);
};
5.13: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *);
void (*notify)(void *, enum vfio_iommu_notify_type);
};
5.15: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *);
void (*notify)(void *, enum vfio_iommu_notify_type);
};
5.19: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*attach_group)(void *, struct iommu_group *, enum vfio_group_type);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool);
struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *);
void (*notify)(void *, enum vfio_iommu_notify_type);
};
6.2: Absent ⚠️
6.5: Absent ⚠️
6.8: Absent ⚠️
arm64: Absent ⚠️
armhf: Absent ⚠️
ppc64el: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
};
riscv64: Absent ⚠️
aws: Absent ⚠️
azure: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
};
gcp: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
};
lowlatency: ✅struct vfio_iommu_driver_ops {
char *name;
struct module *owner;
void * (*open)(long unsigned int);
void (*release)(void *);
ssize_t (*read)(void *, char *, size_t, loff_t *);
ssize_t (*write)(void *, const char *, size_t, loff_t *);
long int (*ioctl)(void *, unsigned int, long unsigned int);
int (*mmap)(void *, struct vm_area_struct *);
int (*attach_group)(void *, struct iommu_group *);
void (*detach_group)(void *, struct iommu_group *);
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *);
int (*unpin_pages)(void *, long unsigned int *, int);
int (*register_notifier)(void *, long unsigned int *, struct notifier_block *);
int (*unregister_notifier)(void *, struct notifier_block *);
};
Regular
5.4 and 5.8 ⚠️int (*dma_rw)(void *, dma_addr_t, void *, size_t, bool)
int (*pin_pages)(void *, long unsigned int *, int, int, long unsigned int *) ➡️ int (*pin_pages)(void *, struct iommu_group *, long unsigned int *, int, int, long unsigned int *)
5.8 and 5.11 ⚠️struct iommu_domain * (*group_iommu_domain)(void *, struct iommu_group *)
5.11 and 5.13 ⚠️void (*notify)(void *, enum vfio_iommu_notify_type)
5.13 and 5.15 ✅
5.15 and 5.19 ⚠️ssize_t (*read)(void *, char *, size_t, loff_t *)
ssize_t (*write)(void *, const char *, size_t, loff_t *)
int (*mmap)(void *, struct vm_area_struct *)
int (*attach_group)(void *, struct iommu_group *) ➡️ int (*attach_group)(void *, struct iommu_group *, enum vfio_group_type)
amd64 and ppc64el ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅