1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18#ifndef __MSM_MMU_H__
19#define __MSM_MMU_H__
20
21#include <linux/iommu.h>
22
23struct msm_mmu_funcs {
24 int (*attach)(struct msm_mmu *mmu, const char **names, int cnt);
25 void (*detach)(struct msm_mmu *mmu, const char **names, int cnt);
26 int (*map)(struct msm_mmu *mmu, uint32_t iova, struct sg_table *sgt,
27 unsigned len, int prot);
28 int (*unmap)(struct msm_mmu *mmu, uint32_t iova, struct sg_table *sgt,
29 unsigned len);
30 void (*destroy)(struct msm_mmu *mmu);
31};
32
33struct msm_mmu {
34 const struct msm_mmu_funcs *funcs;
35 struct device *dev;
36};
37
38static inline void msm_mmu_init(struct msm_mmu *mmu, struct device *dev,
39 const struct msm_mmu_funcs *funcs)
40{
41 mmu->dev = dev;
42 mmu->funcs = funcs;
43}
44
45struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain);
46struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu);
47
48#endif
49