2020-11-06 18:50:48 +03:00
/* 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 ) ;
2021-04-01 18:47:15 +03:00
/* 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 */
2020-11-06 18:50:48 +03:00
# endif /* _IOMMU_SVA_LIB_H */