diff options
Diffstat (limited to 'include/linux/ump-ioctl.h')
-rwxr-xr-x | include/linux/ump-ioctl.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/include/linux/ump-ioctl.h b/include/linux/ump-ioctl.h new file mode 100755 index 00000000000..8a13896dc4b --- /dev/null +++ b/include/linux/ump-ioctl.h @@ -0,0 +1,150 @@ +/* + * + * (C) COPYRIGHT 2008-2012 ARM Limited. All rights reserved. + * + * This program is free software and is provided to you under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation, and any use by you of this program is subject to the terms + * of such GNU licence. + * + * A copy of the licence is included with the program, and can also be obtained + * from Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + * + */ + + + +#ifndef _UMP_IOCTL_H_ +#define _UMP_IOCTL_H + +#include <linux/ump-common.h> + +/* + * The order and size of the members of these have been chosen so the structures look the same in 32-bit and 64-bit builds. + * If any changes are done build the ump_struct_size_checker test for 32-bit and 64-bit targets. Both must compile successfully to commit. + */ + +/** 32/64-bit neutral way to represent pointers */ +typedef union ump_pointer +{ + void * value; /**< client should store their pointers here */ + uint32_t compat_value; /**< 64-bit kernels should fetch value here when handling 32-bit clients */ + uint64_t sizer; /**< Force 64-bit storage for all clients regardless */ +} ump_pointer; + +/** + * UMP allocation request. + * Used when performing ump_allocate + */ +typedef struct ump_k_allocate +{ + uint64_t size; /**< [in] Size in bytes to allocate */ + ump_secure_id secure_id; /**< [out] Secure ID of allocation on success */ + ump_alloc_flags alloc_flags; /**< [in] Flags to use when allocating */ +} ump_k_allocate; + +/** + * UMP size query request. + * Used when performing ump_size_get + */ +typedef struct ump_k_sizequery +{ + uint64_t size; /**< [out] Size of allocation */ + ump_secure_id secure_id; /**< [in] ID of allocation to query the size of */ + uint32_t padding; /* don't remove */ +} ump_k_sizequery; + +/** + * UMP cache synchronization request. + * Used when performing ump_cpu_msync_now + */ +typedef struct ump_k_msync +{ + ump_pointer mapped_ptr; /**< [in] CPU VA to perform cache operation on */ + ump_secure_id secure_id; /**< [in] ID of allocation to perform cache operation on */ + ump_cpu_msync_op cache_operation; /**< [in] Cache operation to perform */ + uint64_t size; /**< [in] Size in bytes of the range to synchronize */ +} ump_k_msync; + +/** + * UMP memory retain request. + * Used when performing ump_retain + */ +typedef struct ump_k_retain +{ + ump_secure_id secure_id; /**< [in] ID of allocation to retain a reference to */ + uint32_t padding; /* don't remove */ +} ump_k_retain; + +/** + * UMP memory release request. + * Used when performing ump_release + */ +typedef struct ump_k_release +{ + ump_secure_id secure_id; /**< [in] ID of allocation to release a reference to */ + uint32_t padding; /* don't remove */ +} ump_k_release; + +typedef struct ump_k_import +{ + ump_pointer phandle; /**< [in] Pointer to handle to import */ + uint32_t type; /**< [in] Type of handle to import */ + ump_alloc_flags alloc_flags; /**< [in] Flags to assign to the imported memory */ + ump_secure_id secure_id; /**< [out] UMP ID representing the imported memory */ + uint32_t padding; /* don't remove */ +} ump_k_import; + +/** + * UMP allocation flags request. + * Used when performing umpp_get_allocation_flags + * + * used only by v1 API + */ +typedef struct ump_k_allocation_flags +{ + ump_secure_id secure_id; /**< [in] Secure ID of allocation on success */ + ump_alloc_flags alloc_flags; /**< [out] Flags to use when allocating */ +} ump_k_allocation_flags; + +#define UMP_CALL_MAX_SIZE 512 +/* + * Ioctl definitions + */ + +/* Use '~' as magic number */ + +#define UMP_IOC_MAGIC '~' + +#define UMP_FUNC_ALLOCATE _IOWR(UMP_IOC_MAGIC, 1, ump_k_allocate) +#define UMP_FUNC_SIZEQUERY _IOWR(UMP_IOC_MAGIC, 2, ump_k_sizequery) +#define UMP_FUNC_MSYNC _IOWR(UMP_IOC_MAGIC, 3, ump_k_msync) +#define UMP_FUNC_RETAIN _IOW(UMP_IOC_MAGIC, 4, ump_k_retain) +#define UMP_FUNC_RELEASE _IOW(UMP_IOC_MAGIC, 5, ump_k_release) +#define UMP_FUNC_ALLOCATION_FLAGS_GET _IOWR(UMP_IOC_MAGIC, 6, ump_k_allocation_flags) +#define UMP_FUNC_IMPORT _IOWR(UMP_IOC_MAGIC, 7, ump_k_import) + +/*max ioctl sequential number*/ +#define UMP_IOC_MAXNR 7 + +/* 15 bits for the UMP ID (allowing 32768 IDs) */ +#define UMP_LINUX_ID_BITS 15 +#define UMP_LINUX_ID_MASK ((1ULL << UMP_LINUX_ID_BITS) - 1ULL) + +/* 64-bit (really 52 bits) encoding: 15 bits for the ID, 37 bits for the offset */ +#define UMP_LINUX_OFFSET_BITS_64 37 +#define UMP_LINUX_OFFSET_MASK_64 ((1ULL << UMP_LINUX_OFFSET_BITS_64)-1) +/* 32-bit encoding: 15 bits for the ID, 17 bits for the offset */ +#define UMP_LINUX_OFFSET_BITS_32 17 +#define UMP_LINUX_OFFSET_MASK_32 ((1ULL << UMP_LINUX_OFFSET_BITS_32)-1) + +#if __SIZEOF_LONG__ == 8 +#define UMP_LINUX_OFFSET_BITS UMP_LINUX_OFFSET_BITS_64 +#define UMP_LINUX_OFFSET_MASK UMP_LINUX_OFFSET_MASK_64 +#else +#define UMP_LINUX_OFFSET_BITS UMP_LINUX_OFFSET_BITS_32 +#define UMP_LINUX_OFFSET_MASK UMP_LINUX_OFFSET_MASK_32 +#endif + +#endif /* _UMP_IOCTL_H_ */ |