blob: db4fc636052328f4c63ec91b19fc43573ade5362 [file] [log] [blame]
Patrick Dalyeeeb9402016-11-01 20:54:41 -07001#ifndef _UAPI_MSM_ION_H
2#define _UAPI_MSM_ION_H
3
4#include "ion.h"
5
Liam Markd9a50852016-09-22 11:30:51 -07006#define ION_BIT(nr) (1UL << (nr))
7
Patrick Dalyeeeb9402016-11-01 20:54:41 -07008enum msm_ion_heap_types {
9 ION_HEAP_TYPE_MSM_START = ION_HEAP_TYPE_CUSTOM + 1,
10 ION_HEAP_TYPE_SECURE_DMA = ION_HEAP_TYPE_MSM_START,
Patrick Dalyc1005d82016-09-22 17:43:26 -070011 ION_HEAP_TYPE_SYSTEM_SECURE,
Laura Abbott29defcc2014-08-01 16:13:40 -070012 ION_HEAP_TYPE_HYP_CMA,
Patrick Dalyeeeb9402016-11-01 20:54:41 -070013 /*
14 * if you add a heap type here you should also add it to
15 * heap_types_info[] in msm_ion.c
16 */
17};
18
19/**
20 * These are the only ids that should be used for Ion heap ids.
21 * The ids listed are the order in which allocation will be attempted
22 * if specified. Don't swap the order of heap ids unless you know what
23 * you are doing!
24 * Id's are spaced by purpose to allow new Id's to be inserted in-between (for
25 * possible fallbacks)
26 */
27
28enum ion_heap_ids {
29 INVALID_HEAP_ID = -1,
30 ION_CP_MM_HEAP_ID = 8,
Patrick Dalyc1005d82016-09-22 17:43:26 -070031 ION_SECURE_HEAP_ID = 9,
Laura Abbott29defcc2014-08-01 16:13:40 -070032 ION_SECURE_DISPLAY_HEAP_ID = 10,
Patrick Dalyeeeb9402016-11-01 20:54:41 -070033 ION_CP_MFC_HEAP_ID = 12,
Laura Abbott29defcc2014-08-01 16:13:40 -070034 ION_SPSS_HEAP_ID = 13, /* Secure Processor ION heap */
Patrick Dalyeeeb9402016-11-01 20:54:41 -070035 ION_CP_WB_HEAP_ID = 16, /* 8660 only */
36 ION_CAMERA_HEAP_ID = 20, /* 8660 only */
37 ION_SYSTEM_CONTIG_HEAP_ID = 21,
38 ION_ADSP_HEAP_ID = 22,
39 ION_PIL1_HEAP_ID = 23, /* Currently used for other PIL images */
40 ION_SF_HEAP_ID = 24,
41 ION_SYSTEM_HEAP_ID = 25,
42 ION_PIL2_HEAP_ID = 26, /* Currently used for modem firmware images */
43 ION_QSECOM_HEAP_ID = 27,
44 ION_AUDIO_HEAP_ID = 28,
45
46 ION_MM_FIRMWARE_HEAP_ID = 29,
47
48 ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_FLAG_SECURE flag */
49};
50
51/*
52 * The IOMMU heap is deprecated! Here are some aliases for backwards
53 * compatibility:
54 */
55#define ION_IOMMU_HEAP_ID ION_SYSTEM_HEAP_ID
56#define ION_HEAP_TYPE_IOMMU ION_HEAP_TYPE_SYSTEM
57
Laura Abbott29defcc2014-08-01 16:13:40 -070058#define ION_SPSS_HEAP_ID ION_SPSS_HEAP_ID
59
Patrick Dalyeeeb9402016-11-01 20:54:41 -070060enum ion_fixed_position {
61 NOT_FIXED,
62 FIXED_LOW,
63 FIXED_MIDDLE,
64 FIXED_HIGH,
65};
66
67enum cp_mem_usage {
68 VIDEO_BITSTREAM = 0x1,
69 VIDEO_PIXEL = 0x2,
70 VIDEO_NONPIXEL = 0x3,
71 DISPLAY_SECURE_CP_USAGE = 0x4,
72 CAMERA_SECURE_CP_USAGE = 0x5,
73 MAX_USAGE = 0x6,
74 UNKNOWN = 0x7FFFFFFF,
75};
76
77/**
Patrick Dalyc1005d82016-09-22 17:43:26 -070078 * Flags to be used when allocating from the secure heap for
79 * content protection
80 */
Liam Markd9a50852016-09-22 11:30:51 -070081#define ION_FLAG_CP_TOUCH ION_BIT(17)
82#define ION_FLAG_CP_BITSTREAM ION_BIT(18)
83#define ION_FLAG_CP_PIXEL ION_BIT(19)
84#define ION_FLAG_CP_NON_PIXEL ION_BIT(20)
85#define ION_FLAG_CP_CAMERA ION_BIT(21)
86#define ION_FLAG_CP_HLOS ION_BIT(22)
87#define ION_FLAG_CP_HLOS_FREE ION_BIT(23)
88#define ION_FLAG_CP_SEC_DISPLAY ION_BIT(25)
89#define ION_FLAG_CP_APP ION_BIT(26)
90#define ION_FLAG_CP_CAMERA_PREVIEW ION_BIT(27)
91
Patrick Dalyc1005d82016-09-22 17:43:26 -070092
93/**
Patrick Dalyeeeb9402016-11-01 20:54:41 -070094 * Flag to use when allocating to indicate that a heap is secure.
95 * Do NOT use BIT macro since it is defined in #ifdef __KERNEL__
96 */
Liam Markd9a50852016-09-22 11:30:51 -070097#define ION_FLAG_SECURE ION_BIT(ION_HEAP_ID_RESERVED)
Patrick Dalyeeeb9402016-11-01 20:54:41 -070098
99/**
100 * Flag for clients to force contiguous memort allocation
101 *
102 * Use of this flag is carefully monitored!
103 */
Liam Markd9a50852016-09-22 11:30:51 -0700104#define ION_FLAG_FORCE_CONTIGUOUS ION_BIT(30)
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700105
106/*
107 * Used in conjunction with heap which pool memory to force an allocation
108 * to come from the page allocator directly instead of from the pool allocation
109 */
Liam Markd9a50852016-09-22 11:30:51 -0700110#define ION_FLAG_POOL_FORCE_ALLOC ION_BIT(16)
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700111
112/**
113 * Deprecated! Please use the corresponding ION_FLAG_*
114 */
115#define ION_SECURE ION_FLAG_SECURE
116#define ION_FORCE_CONTIGUOUS ION_FLAG_FORCE_CONTIGUOUS
117
118/**
119 * Macro should be used with ion_heap_ids defined above.
120 */
Liam Markd9a50852016-09-22 11:30:51 -0700121#define ION_HEAP(bit) ION_BIT(bit)
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700122
123#define ION_ADSP_HEAP_NAME "adsp"
124#define ION_SYSTEM_HEAP_NAME "system"
125#define ION_VMALLOC_HEAP_NAME ION_SYSTEM_HEAP_NAME
126#define ION_KMALLOC_HEAP_NAME "kmalloc"
127#define ION_AUDIO_HEAP_NAME "audio"
128#define ION_SF_HEAP_NAME "sf"
129#define ION_MM_HEAP_NAME "mm"
130#define ION_CAMERA_HEAP_NAME "camera_preview"
131#define ION_IOMMU_HEAP_NAME "iommu"
132#define ION_MFC_HEAP_NAME "mfc"
Laura Abbott29defcc2014-08-01 16:13:40 -0700133#define ION_SPSS_HEAP_NAME "spss"
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700134#define ION_WB_HEAP_NAME "wb"
135#define ION_MM_FIRMWARE_HEAP_NAME "mm_fw"
136#define ION_PIL1_HEAP_NAME "pil_1"
137#define ION_PIL2_HEAP_NAME "pil_2"
138#define ION_QSECOM_HEAP_NAME "qsecom"
Patrick Dalyc1005d82016-09-22 17:43:26 -0700139#define ION_SECURE_HEAP_NAME "secure_heap"
Laura Abbott29defcc2014-08-01 16:13:40 -0700140#define ION_SECURE_DISPLAY_HEAP_NAME "secure_display"
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700141
142#define ION_SET_CACHED(__cache) ((__cache) | ION_FLAG_CACHED)
143#define ION_SET_UNCACHED(__cache) ((__cache) & ~ION_FLAG_CACHED)
144
145#define ION_IS_CACHED(__flags) ((__flags) & ION_FLAG_CACHED)
146
147/* struct ion_flush_data - data passed to ion for flushing caches
148 *
149 * @handle: handle with data to flush
150 * @fd: fd to flush
151 * @vaddr: userspace virtual address mapped with mmap
152 * @offset: offset into the handle to flush
153 * @length: length of handle to flush
154 *
155 * Performs cache operations on the handle. If p is the start address
156 * of the handle, p + offset through p + offset + length will have
157 * the cache operations performed
158 */
159struct ion_flush_data {
160 ion_user_handle_t handle;
161 int fd;
162 void *vaddr;
163 unsigned int offset;
164 unsigned int length;
165};
166
Laura Abbott29defcc2014-08-01 16:13:40 -0700167struct ion_prefetch_regions {
168 unsigned int vmid;
169 size_t __user *sizes;
170 unsigned int nr_sizes;
171};
172
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700173struct ion_prefetch_data {
174 int heap_id;
175 unsigned long len;
Laura Abbott29defcc2014-08-01 16:13:40 -0700176 struct ion_prefetch_regions __user *regions;
177 unsigned int nr_regions;
Patrick Dalyeeeb9402016-11-01 20:54:41 -0700178};
179
180#define ION_IOC_MSM_MAGIC 'M'
181
182/**
183 * DOC: ION_IOC_CLEAN_CACHES - clean the caches
184 *
185 * Clean the caches of the handle specified.
186 */
187#define ION_IOC_CLEAN_CACHES _IOWR(ION_IOC_MSM_MAGIC, 0, \
188 struct ion_flush_data)
189/**
190 * DOC: ION_IOC_INV_CACHES - invalidate the caches
191 *
192 * Invalidate the caches of the handle specified.
193 */
194#define ION_IOC_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 1, \
195 struct ion_flush_data)
196/**
197 * DOC: ION_IOC_CLEAN_INV_CACHES - clean and invalidate the caches
198 *
199 * Clean and invalidate the caches of the handle specified.
200 */
201#define ION_IOC_CLEAN_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 2, \
202 struct ion_flush_data)
203
204#define ION_IOC_PREFETCH _IOWR(ION_IOC_MSM_MAGIC, 3, \
205 struct ion_prefetch_data)
206
207#define ION_IOC_DRAIN _IOWR(ION_IOC_MSM_MAGIC, 4, \
208 struct ion_prefetch_data)
209
210#endif