|  | /* SPDX-License-Identifier: GPL-2.0 */ | 
|  | /* | 
|  | * SVA library for IOMMU drivers | 
|  | */ | 
|  | #ifndef _IOMMU_SVA_LIB_H | 
|  | #define _IOMMU_SVA_LIB_H | 
|  |  | 
|  | #include <linux/ioasid.h> | 
|  | #include <linux/mm_types.h> | 
|  |  | 
|  | int iommu_sva_alloc_pasid(struct mm_struct *mm, ioasid_t min, ioasid_t max); | 
|  | void iommu_sva_free_pasid(struct mm_struct *mm); | 
|  | struct mm_struct *iommu_sva_find(ioasid_t pasid); | 
|  |  | 
|  | /* I/O Page fault */ | 
|  | struct device; | 
|  | struct iommu_fault; | 
|  | struct iopf_queue; | 
|  |  | 
|  | #ifdef CONFIG_IOMMU_SVA_LIB | 
|  | int iommu_queue_iopf(struct iommu_fault *fault, void *cookie); | 
|  |  | 
|  | int iopf_queue_add_device(struct iopf_queue *queue, struct device *dev); | 
|  | int iopf_queue_remove_device(struct iopf_queue *queue, | 
|  | struct device *dev); | 
|  | int iopf_queue_flush_dev(struct device *dev); | 
|  | struct iopf_queue *iopf_queue_alloc(const char *name); | 
|  | void iopf_queue_free(struct iopf_queue *queue); | 
|  | int iopf_queue_discard_partial(struct iopf_queue *queue); | 
|  |  | 
|  | #else /* CONFIG_IOMMU_SVA_LIB */ | 
|  | static inline int iommu_queue_iopf(struct iommu_fault *fault, void *cookie) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline int iopf_queue_add_device(struct iopf_queue *queue, | 
|  | struct device *dev) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline int iopf_queue_remove_device(struct iopf_queue *queue, | 
|  | struct device *dev) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline int iopf_queue_flush_dev(struct device *dev) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  |  | 
|  | static inline struct iopf_queue *iopf_queue_alloc(const char *name) | 
|  | { | 
|  | return NULL; | 
|  | } | 
|  |  | 
|  | static inline void iopf_queue_free(struct iopf_queue *queue) | 
|  | { | 
|  | } | 
|  |  | 
|  | static inline int iopf_queue_discard_partial(struct iopf_queue *queue) | 
|  | { | 
|  | return -ENODEV; | 
|  | } | 
|  | #endif /* CONFIG_IOMMU_SVA_LIB */ | 
|  | #endif /* _IOMMU_SVA_LIB_H */ |