1f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/*
2f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
3f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
4f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
5f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * This software is licensed under the terms of the GNU General Public
6f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * License version 2, as published by the Free Software Foundation, and
7f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * may be copied, distributed, and modified under those terms.
8f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
9f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * This program is distributed in the hope that it will be useful,
10f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * but WITHOUT ANY WARRANTY; without even the implied warranty of
11f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * GNU General Public License for more details.
13f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
14f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
15f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
16f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#ifndef _LINUX_MSM_ION_H
17f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define _LINUX_MSM_ION_H
18f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
19f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#include <linux/ion.h>
20f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
21f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_HEAP_TYPE_MSM_START (ION_HEAP_TYPE_CUSTOM + 1)
22f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_HEAP_TYPE_IOMMU	(ION_HEAP_TYPE_MSM_START)
23f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_HEAP_TYPE_CP	(ION_HEAP_TYPE_IOMMU + 1)
24f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
25f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
26f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * These are the only ids that should be used for Ion heap ids.
27f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * The ids listed are the order in which allocation will be attempted
28f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * if specified. Don't swap the order of heap ids unless you know what
29f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * you are doing!
30f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Id's are spaced by purpose to allow new Id's to be inserted in-between (for
31f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * possible fallbacks)
32f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
33f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
34f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevenum ion_heap_ids {
35f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	INVALID_HEAP_ID = -1,
36f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_CP_MM_HEAP_ID = 8,
37f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_CP_MFC_HEAP_ID = 12,
38f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_CP_WB_HEAP_ID = 16, /* 8660 only */
39f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_CAMERA_HEAP_ID = 20, /* 8660 only */
40f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_ADSP_HEAP_ID = 22,
41f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_SF_HEAP_ID = 24,
42f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_IOMMU_HEAP_ID = 25,
43f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_QSECOM_HEAP_ID = 27,
44f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_AUDIO_HEAP_ID = 28,
45f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
46f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_MM_FIRMWARE_HEAP_ID = 29,
47f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_SYSTEM_HEAP_ID = 30,
48f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
49f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_SECURE flag */
50f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
51f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
52f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevenum ion_fixed_position {
53f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	NOT_FIXED,
54f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	FIXED_LOW,
55f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	FIXED_MIDDLE,
56f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	FIXED_HIGH,
57f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
58f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
59f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevenum cp_mem_usage {
60f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	VIDEO_BITSTREAM = 0x1,
61f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	VIDEO_PIXEL = 0x2,
62f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	VIDEO_NONPIXEL = 0x3,
63f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	MAX_USAGE = 0x4,
64f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	UNKNOWN = 0x7FFFFFFF,
65f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
66f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
67f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_HEAP_CP_MASK		(1 << ION_HEAP_TYPE_CP)
68f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
69f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
70f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Flag to use when allocating to indicate that a heap is secure.
71f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
72f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_SECURE (1 << ION_HEAP_ID_RESERVED)
73f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
74f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
75f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Flag for clients to force contiguous memort allocation
76f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
77f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Use of this flag is carefully monitored!
78f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
79f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_FORCE_CONTIGUOUS (1 << 30)
80f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
81f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
82f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Macro should be used with ion_heap_ids defined above.
83f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
84f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_HEAP(bit) (1 << (bit))
85f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
86f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_ADSP_HEAP_NAME	"adsp"
87f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_VMALLOC_HEAP_NAME	"vmalloc"
88f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_AUDIO_HEAP_NAME	"audio"
89f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_SF_HEAP_NAME	"sf"
90f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_MM_HEAP_NAME	"mm"
91f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_CAMERA_HEAP_NAME	"camera_preview"
92f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOMMU_HEAP_NAME	"iommu"
93f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_MFC_HEAP_NAME	"mfc"
94f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_WB_HEAP_NAME	"wb"
95f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_MM_FIRMWARE_HEAP_NAME	"mm_fw"
96f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_QSECOM_HEAP_NAME	"qsecom"
97f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_FMEM_HEAP_NAME	"fmem"
98f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
99f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_SET_CACHED(__cache)		(__cache | ION_FLAG_CACHED)
100f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_SET_UNCACHED(__cache)	(__cache & ~ION_FLAG_CACHED)
101f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
102f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IS_CACHED(__flags)	((__flags) & ION_FLAG_CACHED)
103f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
104f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#ifdef __KERNEL__
105f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
106f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/*
107f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * This flag allows clients when mapping into the IOMMU to specify to
108f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * defer un-mapping from the IOMMU until the buffer memory is freed.
109f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
110f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOMMU_UNMAP_DELAYED 1
111f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
112f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
113f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * struct ion_cp_heap_pdata - defines a content protection heap in the given
114f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * platform
115f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @permission_type:	Memory ID used to identify the memory to TZ
116f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @align:		Alignment requirement for the memory
117f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @secure_base:	Base address for securing the heap.
118f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			Note: This might be different from actual base address
119f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			of this heap in the case of a shared heap.
120f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @secure_size:	Memory size for securing the heap.
121f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			Note: This might be different from actual size
122f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			of this heap in the case of a shared heap.
123f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @reusable		Flag indicating whether this heap is reusable of not.
124f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			(see FMEM)
125f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @mem_is_fmem		Flag indicating whether this memory is coming from fmem
126f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			or not.
127f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @fixed_position	If nonzero, position in the fixed area.
128f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @virt_addr:		Virtual address used when using fmem.
129f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @iommu_map_all:	Indicates whether we should map whole heap into IOMMU.
130f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @iommu_2x_map_domain: Indicates the domain to use for overmapping.
131f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @request_region:	function to be called when the number of allocations
132f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			goes from 0 -> 1
133f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @release_region:	function to be called when the number of allocations
134f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			goes from 1 -> 0
135f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @setup_region:	function to be called upon ion registration
136f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @memory_type:Memory type used for the heap
137f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @no_nonsecure_alloc: don't allow non-secure allocations from this heap
138f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
139f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
140f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstruct ion_cp_heap_pdata {
141f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	enum ion_permission_type permission_type;
142f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	unsigned int align;
143f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ion_phys_addr_t secure_base; /* Base addr used when heap is shared */
144f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	size_t secure_size; /* Size used for securing heap when heap is shared*/
145f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int reusable;
146f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int mem_is_fmem;
147f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int is_cma;
148f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	enum ion_fixed_position fixed_position;
149f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int iommu_map_all;
150f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int iommu_2x_map_domain;
151f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	ion_virt_addr_t *virt_addr;
152f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int (*request_region)(void *);
153f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int (*release_region)(void *);
154f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	void *(*setup_region)(void);
155f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	enum ion_memory_types memory_type;
156f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int no_nonsecure_alloc;
157f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
158f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
159f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
160f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * struct ion_co_heap_pdata - defines a carveout heap in the given platform
161f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @adjacent_mem_id:	Id of heap that this heap must be adjacent to.
162f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @align:		Alignment requirement for the memory
163f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @mem_is_fmem		Flag indicating whether this memory is coming from fmem
164f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			or not.
165f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @fixed_position	If nonzero, position in the fixed area.
166f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @request_region:	function to be called when the number of allocations
167f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			goes from 0 -> 1
168f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @release_region:	function to be called when the number of allocations
169f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *			goes from 1 -> 0
170f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @setup_region:	function to be called upon ion registration
171f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @memory_type:Memory type used for the heap
172f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
173f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
174f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstruct ion_co_heap_pdata {
175f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int adjacent_mem_id;
176f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	unsigned int align;
177f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int mem_is_fmem;
178f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	enum ion_fixed_position fixed_position;
179f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int (*request_region)(void *);
180f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int (*release_region)(void *);
181f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	void *(*setup_region)(void);
182f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	enum ion_memory_types memory_type;
183f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
184f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
185f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#ifdef CONFIG_ION
186f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
187f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * msm_ion_secure_heap - secure a heap. Wrapper around ion_secure_heap.
188f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
189f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev  * @heap_id - heap id to secure.
190f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
191f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Secure a heap
192f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Returns 0 on success
193f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
194f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevint msm_ion_secure_heap(int heap_id);
195f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
196f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
197f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * msm_ion_unsecure_heap - unsecure a heap. Wrapper around ion_unsecure_heap.
198f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
199f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev  * @heap_id - heap id to secure.
200f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
201f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Un-secure a heap
202f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Returns 0 on success
203f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
204f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevint msm_ion_unsecure_heap(int heap_id);
205f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
206f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
207f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * msm_ion_secure_heap_2_0 - secure a heap using 2.0 APIs
208f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *  Wrapper around ion_secure_heap.
209f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
210f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @heap_id - heap id to secure.
211f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @usage - usage hint to TZ
212f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
213f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Secure a heap
214f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Returns 0 on success
215f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
216f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevint msm_ion_secure_heap_2_0(int heap_id, enum cp_mem_usage usage);
217f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
218f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
219f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * msm_ion_unsecure_heap - unsecure a heap secured with 3.0 APIs.
220f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Wrapper around ion_unsecure_heap.
221f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
222f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @heap_id - heap id to secure.
223f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @usage - usage hint to TZ
224f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
225f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Un-secure a heap
226f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Returns 0 on success
227f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
228f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevint msm_ion_unsecure_heap_2_0(int heap_id, enum cp_mem_usage usage);
229f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#else
230f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstatic inline int msm_ion_secure_heap(int heap_id)
231f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev{
232f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	return -ENODEV;
233f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
234f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev}
235f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
236f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstatic inline int msm_ion_unsecure_heap(int heap_id)
237f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev{
238f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	return -ENODEV;
239f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev}
240f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
241f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstatic inline int msm_ion_secure_heap_2_0(int heap_id, enum cp_mem_usage usage)
242f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev{
243f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	return -ENODEV;
244f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev}
245f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
246f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstatic inline int msm_ion_unsecure_heap_2_0(int heap_id,
247f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev					enum cp_mem_usage usage)
248f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev{
249f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	return -ENODEV;
250f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev}
251f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#endif /* CONFIG_ION */
252f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
253f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#endif /* __KERNEL */
254f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
255f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/* struct ion_flush_data - data passed to ion for flushing caches
256f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
257f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @handle:	handle with data to flush
258f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @fd:		fd to flush
259f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @vaddr:	userspace virtual address mapped with mmap
260f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @offset:	offset into the handle to flush
261f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @length:	length of handle to flush
262f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
263f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Performs cache operations on the handle. If p is the start address
264f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * of the handle, p + offset through p + offset + length will have
265f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * the cache operations performed
266f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
267f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstruct ion_flush_data {
268f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	struct ion_handle *handle;
269f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	int fd;
270f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	void *vaddr;
271f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	unsigned int offset;
272f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	unsigned int length;
273f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
274f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
275f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/* struct ion_flag_data - information about flags for this buffer
276f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
277f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @handle:	handle to get flags from
278f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * @flags:	flags of this handle
279f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
280f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Takes handle as an input and outputs the flags from the handle
281f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * in the flag field.
282f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
283f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchevstruct ion_flag_data {
284f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	struct ion_handle *handle;
285f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev	unsigned long flags;
286f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev};
287f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
288f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOC_MSM_MAGIC 'M'
289f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
290f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
291f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * DOC: ION_IOC_CLEAN_CACHES - clean the caches
292f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
293f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Clean the caches of the handle specified.
294f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
295f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOC_CLEAN_CACHES	_IOWR(ION_IOC_MSM_MAGIC, 0, \
296f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev						struct ion_flush_data)
297f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
298f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * DOC: ION_IOC_INV_CACHES - invalidate the caches
299f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
300f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Invalidate the caches of the handle specified.
301f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
302f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOC_INV_CACHES	_IOWR(ION_IOC_MSM_MAGIC, 1, \
303f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev						struct ion_flush_data)
304f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
305f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * DOC: ION_IOC_CLEAN_INV_CACHES - clean and invalidate the caches
306f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
307f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Clean and invalidate the caches of the handle specified.
308f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
309f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOC_CLEAN_INV_CACHES	_IOWR(ION_IOC_MSM_MAGIC, 2, \
310f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev						struct ion_flush_data)
311f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
312f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev/**
313f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * DOC: ION_IOC_GET_FLAGS - get the flags of the handle
314f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev *
315f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * Gets the flags of the current handle which indicate cachability,
316f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev * secure state etc.
317f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev */
318f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#define ION_IOC_GET_FLAGS		_IOWR(ION_IOC_MSM_MAGIC, 3, \
319f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev						struct ion_flag_data)
320f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev
321f0edc3f155a136d87beccd5ecef75c2d4b6f6b64Iliyan Malchev#endif
322