16e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#ifndef _UAPI_MSM_ION_H 26e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define _UAPI_MSM_ION_H 36e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 46e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#include "ion.h" 56e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 66e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavaenum msm_ion_heap_types { 76e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_HEAP_TYPE_MSM_START = ION_HEAP_TYPE_CUSTOM + 1, 86e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_HEAP_TYPE_DMA = ION_HEAP_TYPE_MSM_START, 96e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_HEAP_TYPE_SECURE_DMA, 106e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_HEAP_TYPE_REMOVED, 116e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava /* 126e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * if you add a heap type here you should also add it to 136e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * heap_types_info[] in msm_ion.c 146e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 156e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 166e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 176e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 186e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * These are the only ids that should be used for Ion heap ids. 196e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * The ids listed are the order in which allocation will be attempted 206e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * if specified. Don't swap the order of heap ids unless you know what 216e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * you are doing! 226e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Id's are spaced by purpose to allow new Id's to be inserted in-between (for 236e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * possible fallbacks) 246e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 256e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 266e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavaenum ion_heap_ids { 276e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava INVALID_HEAP_ID = -1, 286e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_CP_MM_HEAP_ID = 8, 296e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_CP_MFC_HEAP_ID = 12, 306e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_CP_WB_HEAP_ID = 16, /* 8660 only */ 316e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_CAMERA_HEAP_ID = 20, /* 8660 only */ 326e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_SYSTEM_CONTIG_HEAP_ID = 21, 336e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_ADSP_HEAP_ID = 22, 346e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_PIL1_HEAP_ID = 23, /* Currently used for other PIL images */ 356e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_SF_HEAP_ID = 24, 366e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_SYSTEM_HEAP_ID = 25, 376e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_PIL2_HEAP_ID = 26, /* Currently used for modem firmware images */ 386e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_QSECOM_HEAP_ID = 27, 396e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_AUDIO_HEAP_ID = 28, 406e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 416e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_MM_FIRMWARE_HEAP_ID = 29, 426e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 436e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ION_HEAP_ID_RESERVED = 31 /** Bit reserved for ION_FLAG_SECURE flag */ 446e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 456e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 466e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/* 476e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * The IOMMU heap is deprecated! Here are some aliases for backwards 486e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * compatibility: 496e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 506e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOMMU_HEAP_ID ION_SYSTEM_HEAP_ID 516e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_HEAP_TYPE_IOMMU ION_HEAP_TYPE_SYSTEM 526e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 536e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavaenum ion_fixed_position { 546e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava NOT_FIXED, 556e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava FIXED_LOW, 566e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava FIXED_MIDDLE, 576e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava FIXED_HIGH, 586e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 596e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 606e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavaenum cp_mem_usage { 616e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava VIDEO_BITSTREAM = 0x1, 626e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava VIDEO_PIXEL = 0x2, 636e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava VIDEO_NONPIXEL = 0x3, 643c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang DISPLAY_SECURE_CP_USAGE = 0x4, 653c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang CAMERA_SECURE_CP_USAGE = 0x5, 663c85dc9b54252007411d433390ad438d8c0cf36eShuzhen Wang MAX_USAGE = 0x6, 676e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava UNKNOWN = 0x7FFFFFFF, 686e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 696e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 706e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA) 716e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 726e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 736e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Flag to use when allocating to indicate that a heap is secure. 746e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 756e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_FLAG_SECURE (1 << ION_HEAP_ID_RESERVED) 766e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 776e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 786e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Flag for clients to force contiguous memort allocation 796e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 806e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Use of this flag is carefully monitored! 816e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 826e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_FLAG_FORCE_CONTIGUOUS (1 << 30) 836e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 846e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/* 856e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Used in conjunction with heap which pool memory to force an allocation 866e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * to come from the page allocator directly instead of from the pool allocation 876e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 886e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_FLAG_POOL_FORCE_ALLOC (1 << 16) 896e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 906e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 916e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava* Deprecated! Please use the corresponding ION_FLAG_* 926e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava*/ 936e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_SECURE ION_FLAG_SECURE 946e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_FORCE_CONTIGUOUS ION_FLAG_FORCE_CONTIGUOUS 956e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 966e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 976e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Macro should be used with ion_heap_ids defined above. 986e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 996e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_HEAP(bit) (1 << (bit)) 1006e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1016e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_ADSP_HEAP_NAME "adsp" 1026e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_SYSTEM_HEAP_NAME "system" 1036e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_VMALLOC_HEAP_NAME ION_SYSTEM_HEAP_NAME 1046e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_KMALLOC_HEAP_NAME "kmalloc" 1056e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_AUDIO_HEAP_NAME "audio" 1066e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_SF_HEAP_NAME "sf" 1076e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_MM_HEAP_NAME "mm" 1086e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_CAMERA_HEAP_NAME "camera_preview" 1096e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOMMU_HEAP_NAME "iommu" 1106e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_MFC_HEAP_NAME "mfc" 1116e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_WB_HEAP_NAME "wb" 1126e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_MM_FIRMWARE_HEAP_NAME "mm_fw" 1136e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_PIL1_HEAP_NAME "pil_1" 1146e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_PIL2_HEAP_NAME "pil_2" 1156e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_QSECOM_HEAP_NAME "qsecom" 1166e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1176e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_SET_CACHED(__cache) (__cache | ION_FLAG_CACHED) 1186e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_SET_UNCACHED(__cache) (__cache & ~ION_FLAG_CACHED) 1196e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1206e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IS_CACHED(__flags) ((__flags) & ION_FLAG_CACHED) 1216e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1226e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/* struct ion_flush_data - data passed to ion for flushing caches 1236e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 1246e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * @handle: handle with data to flush 1256e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * @fd: fd to flush 1266e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * @vaddr: userspace virtual address mapped with mmap 1276e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * @offset: offset into the handle to flush 1286e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * @length: length of handle to flush 1296e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 1306e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Performs cache operations on the handle. If p is the start address 1316e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * of the handle, p + offset through p + offset + length will have 1326e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * the cache operations performed 1336e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 1346e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavastruct ion_flush_data { 1356e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava ion_user_handle_t handle; 1366e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava int fd; 1376e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava void *vaddr; 1386e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava unsigned int offset; 1396e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava unsigned int length; 1406e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 1416e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1426e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1436e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastavastruct ion_prefetch_data { 1446e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava int heap_id; 1456e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava unsigned long len; 1466e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava}; 1476e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1486e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_MSM_MAGIC 'M' 1496e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1506e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 1516e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * DOC: ION_IOC_CLEAN_CACHES - clean the caches 1526e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 1536e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Clean the caches of the handle specified. 1546e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 1556e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_CLEAN_CACHES _IOWR(ION_IOC_MSM_MAGIC, 0, \ 1566e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava struct ion_flush_data) 1576e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 1586e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * DOC: ION_IOC_INV_CACHES - invalidate the caches 1596e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 1606e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Invalidate the caches of the handle specified. 1616e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 1626e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 1, \ 1636e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava struct ion_flush_data) 1646e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava/** 1656e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * DOC: ION_IOC_CLEAN_INV_CACHES - clean and invalidate the caches 1666e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * 1676e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava * Clean and invalidate the caches of the handle specified. 1686e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava */ 1696e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_CLEAN_INV_CACHES _IOWR(ION_IOC_MSM_MAGIC, 2, \ 1706e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava struct ion_flush_data) 1716e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1726e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_PREFETCH _IOWR(ION_IOC_MSM_MAGIC, 3, \ 1736e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava struct ion_prefetch_data) 1746e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1756e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#define ION_IOC_DRAIN _IOWR(ION_IOC_MSM_MAGIC, 4, \ 1766e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava struct ion_prefetch_data) 1776e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava 1786e82f0ddd360a959d3b36e35ff14c1fe8228e9adVineeta Srivastava#endif 179