linux/drivers/tee/tee_private.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (c) 2015-2016, Linaro Limited
   4 */
   5#ifndef TEE_PRIVATE_H
   6#define TEE_PRIVATE_H
   7
   8#include <linux/cdev.h>
   9#include <linux/completion.h>
  10#include <linux/device.h>
  11#include <linux/kref.h>
  12#include <linux/mutex.h>
  13#include <linux/types.h>
  14
  15/**
  16 * struct tee_shm_pool - shared memory pool
  17 * @private_mgr:        pool manager for shared memory only between kernel
  18 *                      and secure world
  19 * @dma_buf_mgr:        pool manager for shared memory exported to user space
  20 */
  21struct tee_shm_pool {
  22        struct tee_shm_pool_mgr *private_mgr;
  23        struct tee_shm_pool_mgr *dma_buf_mgr;
  24};
  25
  26#define TEE_DEVICE_FLAG_REGISTERED      0x1
  27#define TEE_MAX_DEV_NAME_LEN            32
  28
  29/**
  30 * struct tee_device - TEE Device representation
  31 * @name:       name of device
  32 * @desc:       description of device
  33 * @id:         unique id of device
  34 * @flags:      represented by TEE_DEVICE_FLAG_REGISTERED above
  35 * @dev:        embedded basic device structure
  36 * @cdev:       embedded cdev
  37 * @num_users:  number of active users of this device
  38 * @c_no_user:  completion used when unregistering the device
  39 * @mutex:      mutex protecting @num_users and @idr
  40 * @idr:        register of user space shared memory objects allocated or
  41 *              registered on this device
  42 * @pool:       shared memory pool
  43 */
  44struct tee_device {
  45        char name[TEE_MAX_DEV_NAME_LEN];
  46        const struct tee_desc *desc;
  47        int id;
  48        unsigned int flags;
  49
  50        struct device dev;
  51        struct cdev cdev;
  52
  53        size_t num_users;
  54        struct completion c_no_users;
  55        struct mutex mutex;     /* protects num_users and idr */
  56
  57        struct idr idr;
  58        struct tee_shm_pool *pool;
  59};
  60
  61int tee_shm_init(void);
  62
  63int tee_shm_get_fd(struct tee_shm *shm);
  64
  65bool tee_device_get(struct tee_device *teedev);
  66void tee_device_put(struct tee_device *teedev);
  67
  68void teedev_ctx_get(struct tee_context *ctx);
  69void teedev_ctx_put(struct tee_context *ctx);
  70
  71#endif /*TEE_PRIVATE_H*/
  72