| /* | 
 |  * Copyright (c) 2015-2016, Linaro Limited | 
 |  * | 
 |  * This software is licensed under the terms of the GNU General Public | 
 |  * License version 2, as published by the Free Software Foundation, and | 
 |  * may be copied, distributed, and modified under those terms. | 
 |  * | 
 |  * This program is distributed in the hope that it will be useful, | 
 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
 |  * GNU General Public License for more details. | 
 |  * | 
 |  */ | 
 | #ifndef TEE_PRIVATE_H | 
 | #define TEE_PRIVATE_H | 
 |  | 
 | #include <linux/cdev.h> | 
 | #include <linux/completion.h> | 
 | #include <linux/device.h> | 
 | #include <linux/kref.h> | 
 | #include <linux/mutex.h> | 
 | #include <linux/types.h> | 
 |  | 
 | /** | 
 |  * struct tee_shm_pool - shared memory pool | 
 |  * @private_mgr:	pool manager for shared memory only between kernel | 
 |  *			and secure world | 
 |  * @dma_buf_mgr:	pool manager for shared memory exported to user space | 
 |  */ | 
 | struct tee_shm_pool { | 
 | 	struct tee_shm_pool_mgr *private_mgr; | 
 | 	struct tee_shm_pool_mgr *dma_buf_mgr; | 
 | }; | 
 |  | 
 | #define TEE_DEVICE_FLAG_REGISTERED	0x1 | 
 | #define TEE_MAX_DEV_NAME_LEN		32 | 
 |  | 
 | /** | 
 |  * struct tee_device - TEE Device representation | 
 |  * @name:	name of device | 
 |  * @desc:	description of device | 
 |  * @id:		unique id of device | 
 |  * @flags:	represented by TEE_DEVICE_FLAG_REGISTERED above | 
 |  * @dev:	embedded basic device structure | 
 |  * @cdev:	embedded cdev | 
 |  * @num_users:	number of active users of this device | 
 |  * @c_no_user:	completion used when unregistering the device | 
 |  * @mutex:	mutex protecting @num_users and @idr | 
 |  * @idr:	register of shared memory object allocated on this device | 
 |  * @pool:	shared memory pool | 
 |  */ | 
 | struct tee_device { | 
 | 	char name[TEE_MAX_DEV_NAME_LEN]; | 
 | 	const struct tee_desc *desc; | 
 | 	int id; | 
 | 	unsigned int flags; | 
 |  | 
 | 	struct device dev; | 
 | 	struct cdev cdev; | 
 |  | 
 | 	size_t num_users; | 
 | 	struct completion c_no_users; | 
 | 	struct mutex mutex;	/* protects num_users and idr */ | 
 |  | 
 | 	struct idr idr; | 
 | 	struct tee_shm_pool *pool; | 
 | }; | 
 |  | 
 | int tee_shm_init(void); | 
 |  | 
 | int tee_shm_get_fd(struct tee_shm *shm); | 
 |  | 
 | bool tee_device_get(struct tee_device *teedev); | 
 | void tee_device_put(struct tee_device *teedev); | 
 |  | 
 | void teedev_ctx_get(struct tee_context *ctx); | 
 | void teedev_ctx_put(struct tee_context *ctx); | 
 |  | 
 | #endif /*TEE_PRIVATE_H*/ |