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