Commit | Line | Data |
---|---|---|
caab277b | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
871d812a RC |
2 | /* |
3 | * Copyright (C) 2013 Red Hat | |
4 | * Author: Rob Clark <robdclark@gmail.com> | |
871d812a RC |
5 | */ |
6 | ||
7 | #ifndef __MSM_MMU_H__ | |
8 | #define __MSM_MMU_H__ | |
9 | ||
10 | #include <linux/iommu.h> | |
11 | ||
12 | struct msm_mmu_funcs { | |
d72ab599 RC |
13 | int (*attach)(struct msm_mmu *mmu, const char * const *names, int cnt); |
14 | void (*detach)(struct msm_mmu *mmu, const char * const *names, int cnt); | |
78babc16 | 15 | int (*map)(struct msm_mmu *mmu, uint64_t iova, struct sg_table *sgt, |
871d812a | 16 | unsigned len, int prot); |
70dc51b4 | 17 | int (*unmap)(struct msm_mmu *mmu, uint64_t iova, unsigned len); |
871d812a RC |
18 | void (*destroy)(struct msm_mmu *mmu); |
19 | }; | |
20 | ||
21 | struct msm_mmu { | |
22 | const struct msm_mmu_funcs *funcs; | |
944fc36c | 23 | struct device *dev; |
7f8036b7 RC |
24 | int (*handler)(void *arg, unsigned long iova, int flags); |
25 | void *arg; | |
871d812a RC |
26 | }; |
27 | ||
944fc36c | 28 | static inline void msm_mmu_init(struct msm_mmu *mmu, struct device *dev, |
871d812a RC |
29 | const struct msm_mmu_funcs *funcs) |
30 | { | |
31 | mmu->dev = dev; | |
32 | mmu->funcs = funcs; | |
33 | } | |
34 | ||
944fc36c RC |
35 | struct msm_mmu *msm_iommu_new(struct device *dev, struct iommu_domain *domain); |
36 | struct msm_mmu *msm_gpummu_new(struct device *dev, struct msm_gpu *gpu); | |
871d812a | 37 | |
7f8036b7 RC |
38 | static inline void msm_mmu_set_fault_handler(struct msm_mmu *mmu, void *arg, |
39 | int (*handler)(void *arg, unsigned long iova, int flags)) | |
40 | { | |
41 | mmu->arg = arg; | |
42 | mmu->handler = handler; | |
43 | } | |
44 | ||
c2052a4e JM |
45 | void msm_gpummu_params(struct msm_mmu *mmu, dma_addr_t *pt_base, |
46 | dma_addr_t *tran_error); | |
47 | ||
871d812a | 48 | #endif /* __MSM_MMU_H__ */ |