2019-05-29 17:17:56 +03:00
/* SPDX-License-Identifier: GPL-2.0-only */
2015-03-11 16:39:39 +03:00
/*
* Copyright ( c ) 2015 - 2016 , Linaro Limited
*/
# 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 {
2017-11-29 15:48:25 +03:00
struct tee_shm_pool_mgr * private_mgr ;
struct tee_shm_pool_mgr * dma_buf_mgr ;
2015-03-11 16:39:39 +03:00
} ;
# 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 ) ;
2017-11-29 15:48:37 +03:00
void teedev_ctx_get ( struct tee_context * ctx ) ;
void teedev_ctx_put ( struct tee_context * ctx ) ;
2015-03-11 16:39:39 +03:00
# endif /*TEE_PRIVATE_H*/