| 
									
										
										
										
											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 { | 
					
						
							|  |  |  | 	int (*attach)(struct msm_mmu *mmu, const char **names, int cnt); | 
					
						
							| 
									
										
										
										
											2014-06-17 10:32:37 -04:00
										 |  |  | 	void (*detach)(struct msm_mmu *mmu, const char **names, int cnt); | 
					
						
							| 
									
										
										
										
											2013-11-16 12:56:06 -05:00
										 |  |  | 	int (*map)(struct msm_mmu *mmu, uint32_t iova, struct sg_table *sgt, | 
					
						
							|  |  |  | 			unsigned len, int prot); | 
					
						
							|  |  |  | 	int (*unmap)(struct msm_mmu *mmu, uint32_t iova, struct sg_table *sgt, | 
					
						
							|  |  |  | 			unsigned len); | 
					
						
							|  |  |  | 	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; | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							|  |  |  | #endif /* __MSM_MMU_H__ */
 |