2013-11-16 12:56:06 -05:00
/*
* Copyright ( C ) 2013 Red Hat
* Author : Rob Clark < robdclark @ gmail . com >
*
* This program is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 as published by
* the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License for
* more details .
*
* You should have received a copy of the GNU General Public License along with
* this program . If not , see < http : //www.gnu.org/licenses/>.
*/
# ifndef __MSM_MMU_H__
# define __MSM_MMU_H__
# include <linux/iommu.h>
struct msm_mmu_funcs {
2016-02-25 11:19:43 +05:30
int ( * attach ) ( struct msm_mmu * mmu , const char * const * names , int cnt ) ;
void ( * detach ) ( struct msm_mmu * mmu , const char * const * names , int cnt ) ;
2016-11-11 12:06:46 -05:00
int ( * map ) ( struct msm_mmu * mmu , uint64_t iova , struct sg_table * sgt ,
2013-11-16 12:56:06 -05:00
unsigned len , int prot ) ;
2018-11-07 15:35:47 -07:00
int ( * unmap ) ( struct msm_mmu * mmu , uint64_t iova , unsigned len ) ;
2013-11-16 12:56:06 -05:00
void ( * destroy ) ( struct msm_mmu * mmu ) ;
} ;
struct msm_mmu {
const struct msm_mmu_funcs * funcs ;
2014-07-09 22:08:15 -04:00
struct device * dev ;
2016-12-07 11:13:53 -05:00
int ( * handler ) ( void * arg , unsigned long iova , int flags ) ;
void * arg ;
2013-11-16 12:56:06 -05:00
} ;
2014-07-09 22:08:15 -04:00
static inline void msm_mmu_init ( struct msm_mmu * mmu , struct device * dev ,
2013-11-16 12:56:06 -05:00
const struct msm_mmu_funcs * funcs )
{
mmu - > dev = dev ;
mmu - > funcs = funcs ;
}
2014-07-09 22:08:15 -04:00
struct msm_mmu * msm_iommu_new ( struct device * dev , struct iommu_domain * domain ) ;
struct msm_mmu * msm_gpummu_new ( struct device * dev , struct msm_gpu * gpu ) ;
2013-11-16 12:56:06 -05:00
2016-12-07 11:13:53 -05:00
static inline void msm_mmu_set_fault_handler ( struct msm_mmu * mmu , void * arg ,
int ( * handler ) ( void * arg , unsigned long iova , int flags ) )
{
mmu - > arg = arg ;
mmu - > handler = handler ;
}
2018-11-14 17:08:04 -05:00
void msm_gpummu_params ( struct msm_mmu * mmu , dma_addr_t * pt_base ,
dma_addr_t * tran_error ) ;
2013-11-16 12:56:06 -05:00
# endif /* __MSM_MMU_H__ */