iommu: rockchip-iovmm: fix compilation warning
[firefly-linux-kernel-4.4.55.git] / drivers / iommu / rockchip-iommu.h
1 /*
2  * Data structure definition for Rockchip IOMMU driver
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  */
8 #ifndef __ASM_PLAT_IOMMU_H
9 #define __ASM_PLAT_IOMMU_H
10
11 #include <linux/kernel.h>
12 #include <linux/spinlock.h>
13 #include <linux/list.h>
14 #include <linux/device.h>
15 #include <linux/platform_device.h>
16 #include <linux/genalloc.h>
17 #include <linux/iommu.h>
18
19 #include <linux/rockchip-iovmm.h>
20
21
22 struct rk_iovmm {
23         struct iommu_domain *domain; /* iommu domain for this iovmm */
24         struct gen_pool *vmm_pool;
25         struct list_head regions_list;  /* list of rk_vm_region */
26         spinlock_t lock; /* lock for updating regions_list */
27 };
28
29 struct iommu_drvdata {
30         struct list_head node; /* entry of rk_iommu_domain.clients */
31         struct device *iommu;   /*  IOMMU's device descriptor */
32         int num_res_mem;
33         int num_res_irq;
34         const char *dbgname;
35         void __iomem **res_bases;
36         int activations;
37         spinlock_t data_lock;
38         struct iommu_domain *domain; /* domain given to iommu_attach_device() */
39         unsigned int pgtable;
40         struct rk_iovmm vmm;
41 };
42
43 #ifdef CONFIG_ROCKCHIP_IOVMM
44
45 #define IOVA_START 0x10000000
46 #define IOVM_SIZE (SZ_1G - SZ_4K) /* last 4K is for error values */
47
48 struct rk_vm_region {
49         struct list_head node;
50         unsigned int start;
51         unsigned int size;
52 };
53
54 static inline struct rk_iovmm *rockchip_get_iovmm(struct device *dev)
55 {
56         struct iommu_drvdata *data = dev_get_drvdata(dev->archdata.iommu);
57
58         BUG_ON(!dev->archdata.iommu || !data);
59
60         return &data->vmm;
61 }
62
63 int rockchip_init_iovmm(struct device *iommu, struct rk_iovmm *vmm);
64 #else
65 static inline int rockchip_init_iovmm(struct device *iommu,
66                                 struct rk_iovmm *vmm)
67 {
68         return -ENOSYS;
69 }
70 #endif
71
72
73 #ifdef CONFIG_ROCKCHIP_IOMMU
74
75 /**
76  * rockchip_iommu_tlb_invalidate() - flush all TLB entry in iommu
77  * @owner: The device whose IOMMU.
78  *
79  * This function flush all TLB entry in iommu
80  */
81 int rockchip_iommu_tlb_invalidate(struct device *owner);
82 int rockchip_iommu_tlb_invalidate_global(struct device *owner);
83
84 #else /* CONFIG_ROCKCHIP_IOMMU */
85 static inline int rockchip_iommu_tlb_invalidate(struct device *owner)
86 {
87         return -1;
88 }
89 static int rockchip_iommu_tlb_invalidate_global(struct device *owner)
90 {
91         return -1;
92 }
93
94 #endif
95
96 #endif  /*__ASM_PLAT_IOMMU_H*/