Merge tag 'lsk-android-14.05' into develop-3.10
[firefly-linux-kernel-4.4.55.git] / include / linux / rockchip_ion.h
1 /*
2  *
3  * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
4  *
5  * This software is licensed under the terms of the GNU General Public
6  * License version 2, as published by the Free Software Foundation, and
7  * may be copied, distributed, and modified under those terms.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  */
15
16 #ifndef _LINUX_ROCKCHIP_ION_H
17 #define _LINUX_ROCKCHIP_ION_H
18
19 #ifdef __KERNEL__
20 #include "../../drivers/staging/android/ion/ion.h"
21 #else
22 #include <linux/ion.h>
23 #endif
24
25 #define ROCKCHIP_ION_VERSION    "v1.0"
26
27 enum ion_heap_ids {
28         INVALID_HEAP_ID = -1,
29         ION_CMA_HEAP_ID = 1,
30         ION_IOMMU_HEAP_ID,
31         ION_VMALLOC_HEAP_ID,
32         ION_DRM_HEAP_ID,
33         ION_CARVEOUT_HEAP_ID,
34
35         ION_HEAP_ID_RESERVED = 31
36 };
37
38 #define ION_HEAP(bit) (1 << (bit))
39
40 #define ION_CMA_HEAP_NAME               "cma"
41 #define ION_IOMMU_HEAP_NAME             "iommu"
42 #define ION_VMALLOC_HEAP_NAME   "vmalloc"
43 #define ION_DRM_HEAP_NAME               "drm"
44 #define ION_CARVEOUT_HEAP_NAME  "carveout"
45
46 #define ION_SET_CACHED(__cache)         (__cache | ION_FLAG_CACHED)
47 #define ION_SET_UNCACHED(__cache)       (__cache & ~ION_FLAG_CACHED)
48
49 #define ION_IS_CACHED(__flags)  ((__flags) & ION_FLAG_CACHED)
50
51 /* struct ion_flush_data - data passed to ion for flushing caches
52  *
53  * @handle:     handle with data to flush
54  * @fd:         fd to flush
55  * @vaddr:      userspace virtual address mapped with mmap
56  * @offset:     offset into the handle to flush
57  * @length:     length of handle to flush
58  *
59  * Performs cache operations on the handle. If p is the start address
60  * of the handle, p + offset through p + offset + length will have
61  * the cache operations performed
62  */
63 struct ion_flush_data {
64         ion_user_handle_t handle;
65         int fd;
66         void *vaddr;
67         unsigned int offset;
68         unsigned int length;
69 };
70
71 struct ion_phys_data {
72         ion_user_handle_t handle;
73         unsigned long phys;
74         unsigned long size;
75 };
76
77 struct ion_share_id_data {
78         int fd;
79         unsigned int id;
80 };
81
82 #define ION_IOC_ROCKCHIP_MAGIC 'R'
83
84 /**
85  * Clean the caches of the handle specified.
86  */
87 #define ION_IOC_CLEAN_CACHES    _IOWR(ION_IOC_ROCKCHIP_MAGIC, 0, \
88                                                 struct ion_flush_data)
89 /**
90  * Invalidate the caches of the handle specified.
91  */
92 #define ION_IOC_INV_CACHES      _IOWR(ION_IOC_ROCKCHIP_MAGIC, 1, \
93                                                 struct ion_flush_data)
94 /**
95  * Clean and invalidate the caches of the handle specified.
96  */
97 #define ION_IOC_CLEAN_INV_CACHES        _IOWR(ION_IOC_ROCKCHIP_MAGIC, 2, \
98                                                 struct ion_flush_data)
99
100 /**
101  * Get phys addr of the handle specified.
102  */
103 #define ION_IOC_GET_PHYS        _IOWR(ION_IOC_ROCKCHIP_MAGIC, 3, \
104                                                 struct ion_phys_data)
105
106 /**
107  * Get share object of the fd specified.
108  */
109 #define ION_IOC_GET_SHARE_ID    _IOWR(ION_IOC_ROCKCHIP_MAGIC, 4, \
110                                                 struct ion_share_id_data)
111
112 /**
113  * Set share object and associate new fd.
114  */
115 #define ION_IOC_SHARE_BY_ID     _IOWR(ION_IOC_ROCKCHIP_MAGIC, 5, \
116                                                 struct ion_share_id_data)
117
118 #endif