forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/* |
|
* 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 { |
|
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 user space shared memory objects allocated or |
|
* registered 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*/
|
|
|