1c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/* 2c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * drivers/staging/android/uapi/ion.h 3c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 4c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Copyright (C) 2011 Google, Inc. 5c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 6c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * This software is licensed under the terms of the GNU General Public 7c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * License version 2, as published by the Free Software Foundation, and 8c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * may be copied, distributed, and modified under those terms. 9c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 10c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * This program is distributed in the hope that it will be useful, 11c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * but WITHOUT ANY WARRANTY; without even the implied warranty of 12c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * GNU General Public License for more details. 14c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 15c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 16c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 17c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#ifndef _UAPI_LINUX_ION_H 18c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define _UAPI_LINUX_ION_H 19c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 20c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#include <linux/ioctl.h> 21c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#include <linux/types.h> 22c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 23c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crosstypedef int ion_user_handle_t; 24c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 25c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 26c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * enum ion_heap_types - list of all possible types of heaps 27c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc 28c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc 29c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @ION_HEAP_TYPE_CARVEOUT: memory allocated from a prereserved 3053d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee * carveout heap, allocations are physically 3153d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee * contiguous 32c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @ION_HEAP_TYPE_DMA: memory allocated via DMA API 33c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask 3453d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee * is used to identify the heaps, so only 32 3553d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee * total heap types are supported 36c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 37c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crossenum ion_heap_type { 38c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_SYSTEM, 39c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_SYSTEM_CONTIG, 40c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_CARVEOUT, 41c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_CHUNK, 42c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_DMA, 43c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_HEAP_TYPE_CUSTOM, /* must be last so device specific heaps always 44c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross are at the end of this enum */ 45c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ION_NUM_HEAPS = 16, 46c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross}; 47c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 48c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_HEAP_SYSTEM_MASK (1 << ION_HEAP_TYPE_SYSTEM) 49c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_HEAP_SYSTEM_CONTIG_MASK (1 << ION_HEAP_TYPE_SYSTEM_CONTIG) 50c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_HEAP_CARVEOUT_MASK (1 << ION_HEAP_TYPE_CARVEOUT) 51c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA) 52c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 5353d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) 54c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 55c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 56c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * allocation flags - the lower 16 bits are used by core ion, the upper 16 57c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * bits are reserved for use by the heaps themselves. 58c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 59c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_FLAG_CACHED 1 /* mappings of this buffer should be 60c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross cached, ion will do cache 61c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross maintenance when the buffer is 62c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross mapped for dma */ 63c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_FLAG_CACHED_NEEDS_SYNC 2 /* mappings of this buffer will created 64c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross at mmap time, if this is set 65c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross caches must be managed manually */ 66c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 67c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 68c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: Ion Userspace API 69c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 70c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * create a client by opening /dev/ion 71c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * most operations handled via following ioctls 72c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 73c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 74c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 75c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 76c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * struct ion_allocation_data - metadata passed from userspace for allocations 77c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @len: size of the allocation 78c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @align: required alignment of the allocation 79c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @heap_id_mask: mask of heap ids to allocate from 80c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @flags: flags passed to heap 8153d719f6a907ad7e2ca449fdaf9c9e175a623350Seunghun Lee * @handle: pointer that will be populated with a cookie to use to 82c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * refer to this allocation 83c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 84c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Provided by userspace as an argument to the ioctl 85c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 86c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crossstruct ion_allocation_data { 87c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross size_t len; 88c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross size_t align; 89c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross unsigned int heap_id_mask; 90c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross unsigned int flags; 91c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ion_user_handle_t handle; 92c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross}; 93c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 94c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 95c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * struct ion_fd_data - metadata passed to/from userspace for a handle/fd pair 96c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @handle: a handle 97c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @fd: a file descriptor representing that handle 98c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 99c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * For ION_IOC_SHARE or ION_IOC_MAP userspace populates the handle field with 100c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * the handle returned from ion alloc, and the kernel returns the file 101c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * descriptor to share or map in the fd field. For ION_IOC_IMPORT, userspace 102c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * provides the file descriptor and the kernel returns the handle. 103c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 104c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crossstruct ion_fd_data { 105c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ion_user_handle_t handle; 106c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross int fd; 107c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross}; 108c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 109c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 110c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * struct ion_handle_data - a handle passed to/from the kernel 111c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @handle: a handle 112c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 113c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crossstruct ion_handle_data { 114c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross ion_user_handle_t handle; 115c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross}; 116c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 117c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 118c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * struct ion_custom_data - metadata passed to/from userspace for a custom ioctl 119c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @cmd: the custom ioctl function to call 120c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * @arg: additional data to pass to the custom ioctl, typically a user 121c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * pointer to a predefined structure 122c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 123c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * This works just like the regular cmd and arg fields of an ioctl. 124c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 125c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Crossstruct ion_custom_data { 126c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross unsigned int cmd; 127c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross unsigned long arg; 128c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross}; 129c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 130c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_MAGIC 'I' 131c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 132c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 133c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_ALLOC - allocate memory 134c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 135c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes an ion_allocation_data struct and returns it with the handle field 136c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * populated with the opaque handle for the allocation. 137c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 138c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_ALLOC _IOWR(ION_IOC_MAGIC, 0, \ 139c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross struct ion_allocation_data) 140c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 141c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 142c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_FREE - free memory 143c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 144c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes an ion_handle_data struct and frees the handle. 145c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 146c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_FREE _IOWR(ION_IOC_MAGIC, 1, struct ion_handle_data) 147c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 148c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 149c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_MAP - get a file descriptor to mmap 150c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 151c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes an ion_fd_data struct with the handle field populated with a valid 152c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * opaque handle. Returns the struct with the fd field set to a file 153c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * descriptor open in the current address space. This file descriptor 154c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * can then be used as an argument to mmap. 155c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 156c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_MAP _IOWR(ION_IOC_MAGIC, 2, struct ion_fd_data) 157c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 158c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 159c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_SHARE - creates a file descriptor to use to share an allocation 160c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 161c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes an ion_fd_data struct with the handle field populated with a valid 162c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * opaque handle. Returns the struct with the fd field set to a file 163c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * descriptor open in the current address space. This file descriptor 164c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * can then be passed to another process. The corresponding opaque handle can 165c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * be retrieved via ION_IOC_IMPORT. 166c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 167c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_SHARE _IOWR(ION_IOC_MAGIC, 4, struct ion_fd_data) 168c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 169c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 170c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_IMPORT - imports a shared file descriptor 171c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 172c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes an ion_fd_data struct with the fd field populated with a valid file 173c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * descriptor obtained from ION_IOC_SHARE and returns the struct with the handle 174c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * filed set to the corresponding opaque handle. 175c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 176c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_IMPORT _IOWR(ION_IOC_MAGIC, 5, struct ion_fd_data) 177c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 178c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 179c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_SYNC - syncs a shared file descriptors to memory 180c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 181c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Deprecated in favor of using the dma_buf api's correctly (syncing 182c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * will happend automatically when the buffer is mapped to a device). 183c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * If necessary should be used after touching a cached buffer from the cpu, 184c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * this will make the buffer in memory coherent. 185c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 186c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_SYNC _IOWR(ION_IOC_MAGIC, 7, struct ion_fd_data) 187c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 188c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross/** 189c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * DOC: ION_IOC_CUSTOM - call architecture specific ion ioctl 190c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * 191c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * Takes the argument of the architecture specific ioctl to call and 192c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross * passes appropriate userdata for that ioctl 193c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross */ 194c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#define ION_IOC_CUSTOM _IOWR(ION_IOC_MAGIC, 6, struct ion_custom_data) 195c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross 196c3a2fe03148f13b119c7bf0427a0526bdb288a92Colin Cross#endif /* _UAPI_LINUX_ION_H */ 197