1 /* 2 * ion_uapi.h 3 * 4 * Copyright 2018 Samsung Electronics Co., Ltd. 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 #ifndef __EXYNOS_ION_H__ 20 #define __EXYNOS_ION_H__ 21 22 #include <linux/ioctl.h> 23 #include <linux/types.h> 24 25 enum ion_heap_type { 26 ION_HEAP_TYPE_SYSTEM, 27 ION_HEAP_TYPE_SYSTEM_CONTIG, 28 ION_HEAP_TYPE_CARVEOUT, 29 ION_HEAP_TYPE_CHUNK, 30 ION_HEAP_TYPE_DMA, 31 ION_HEAP_TYPE_HPA 32 }; 33 34 #define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) 35 36 /* 37 * ION LEGACY UAPI 38 */ 39 struct ion_allocation_data_legacy { 40 size_t len; 41 size_t align; 42 unsigned int heap_id_mask; 43 unsigned int flags; 44 int handle; 45 }; 46 47 struct ion_fd_data { 48 int handle; 49 int fd; 50 }; 51 52 struct ion_fd_partial_data { 53 int handle; 54 int fd; 55 off_t offset; 56 size_t len; 57 }; 58 59 struct ion_handle_data { 60 int handle; 61 }; 62 63 struct ion_custom_data { 64 unsigned int cmd; 65 unsigned long arg; 66 }; 67 68 /* 69 * ION MODERN UAPI 70 */ 71 72 struct ion_allocation_data_modern { 73 __u64 len; 74 __u32 heap_id_mask; 75 __u32 flags; 76 __u32 fd; 77 __u32 unused; 78 }; 79 80 #define MAX_HEAP_NAME 32 81 82 #define ION_HEAPDATA_FLAGS_DEFER_FREE 1 83 #define ION_HEAPDATA_FLAGS_ALLOW_PROTECTION 2 84 #define ION_HEAPDATA_FLAGS_UNTOUCHABLE 4 85 86 struct ion_heap_data { 87 char name[MAX_HEAP_NAME]; 88 __u32 type; 89 __u32 heap_id; 90 __u32 size; /* reserved 0 */ 91 __u32 heap_flags; /* reserved 1 */ 92 __u32 reserved2; 93 }; 94 95 struct ion_heap_query { 96 __u32 cnt; 97 __u32 reserved0; 98 __u64 heaps; 99 __u32 reserved1; 100 __u32 reserved2; 101 }; 102 103 #define ION_IOC_MAGIC 'I' 104 105 #define ION_IOC_ALLOC_LEGACY _IOWR(ION_IOC_MAGIC, 0, struct ion_allocation_data_legacy) 106 #define ION_IOC_ALLOC_MODERN _IOWR(ION_IOC_MAGIC, 0, struct ion_allocation_data_modern) 107 #define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) 108 #define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data) 109 #define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) 110 #define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data) 111 #define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data) 112 #define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data) 113 #define ION_IOC_HEAP_QUERY _IOWR(ION_IOC_MAGIC, 8, struct ion_heap_query) 114 #define ION_IOC_SYNC_PARTIAL _IOWR(ION_IOC_MAGIC, 9, struct ion_fd_partial_data) 115 116 117 #endif /* __EXYNOS_ION_H__ */ 118