linux/drivers/tee/optee/optee_rpc_cmd.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-2-Clause */
   2/*
   3 * Copyright (c) 2016-2021, Linaro Limited
   4 */
   5
   6#ifndef __OPTEE_RPC_CMD_H
   7#define __OPTEE_RPC_CMD_H
   8
   9/*
  10 * All RPC is done with a struct optee_msg_arg as bearer of information,
  11 * struct optee_msg_arg::arg holds values defined by OPTEE_RPC_CMD_* below.
  12 * Only the commands handled by the kernel driver are defined here.
  13 *
  14 * RPC communication with tee-supplicant is reversed compared to normal
  15 * client communication described above. The supplicant receives requests
  16 * and sends responses.
  17 */
  18
  19/*
  20 * Get time
  21 *
  22 * Returns number of seconds and nano seconds since the Epoch,
  23 * 1970-01-01 00:00:00 +0000 (UTC).
  24 *
  25 * [out]    value[0].a      Number of seconds
  26 * [out]    value[0].b      Number of nano seconds.
  27 */
  28#define OPTEE_RPC_CMD_GET_TIME          3
  29
  30/*
  31 * Wait queue primitive, helper for secure world to implement a wait queue.
  32 *
  33 * If secure world needs to wait for a secure world mutex it issues a sleep
  34 * request instead of spinning in secure world. Conversely is a wakeup
  35 * request issued when a secure world mutex with a thread waiting thread is
  36 * unlocked.
  37 *
  38 * Waiting on a key
  39 * [in]    value[0].a       OPTEE_RPC_WAIT_QUEUE_SLEEP
  40 * [in]    value[0].b       Wait key
  41 *
  42 * Waking up a key
  43 * [in]    value[0].a       OPTEE_RPC_WAIT_QUEUE_WAKEUP
  44 * [in]    value[0].b       Wakeup key
  45 */
  46#define OPTEE_RPC_CMD_WAIT_QUEUE        4
  47#define OPTEE_RPC_WAIT_QUEUE_SLEEP      0
  48#define OPTEE_RPC_WAIT_QUEUE_WAKEUP     1
  49
  50/*
  51 * Suspend execution
  52 *
  53 * [in]    value[0].a   Number of milliseconds to suspend
  54 */
  55#define OPTEE_RPC_CMD_SUSPEND           5
  56
  57/*
  58 * Allocate a piece of shared memory
  59 *
  60 * [in]    value[0].a       Type of memory one of
  61 *                          OPTEE_RPC_SHM_TYPE_* below
  62 * [in]    value[0].b       Requested size
  63 * [in]    value[0].c       Required alignment
  64 * [out]   memref[0]        Buffer
  65 */
  66#define OPTEE_RPC_CMD_SHM_ALLOC         6
  67/* Memory that can be shared with a non-secure user space application */
  68#define OPTEE_RPC_SHM_TYPE_APPL         0
  69/* Memory only shared with non-secure kernel */
  70#define OPTEE_RPC_SHM_TYPE_KERNEL       1
  71
  72/*
  73 * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC
  74 *
  75 * [in]     value[0].a      Type of memory one of
  76 *                          OPTEE_RPC_SHM_TYPE_* above
  77 * [in]     value[0].b      Value of shared memory reference or cookie
  78 */
  79#define OPTEE_RPC_CMD_SHM_FREE          7
  80
  81/*
  82 * Issue master requests (read and write operations) to an I2C chip.
  83 *
  84 * [in]     value[0].a      Transfer mode (OPTEE_RPC_I2C_TRANSFER_*)
  85 * [in]     value[0].b      The I2C bus (a.k.a adapter).
  86 *                              16 bit field.
  87 * [in]     value[0].c      The I2C chip (a.k.a address).
  88 *                              16 bit field (either 7 or 10 bit effective).
  89 * [in]     value[1].a      The I2C master control flags (ie, 10 bit address).
  90 *                              16 bit field.
  91 * [in/out] memref[2]       Buffer used for data transfers.
  92 * [out]    value[3].a      Number of bytes transferred by the REE.
  93 */
  94#define OPTEE_RPC_CMD_I2C_TRANSFER      21
  95
  96/* I2C master transfer modes */
  97#define OPTEE_RPC_I2C_TRANSFER_RD       0
  98#define OPTEE_RPC_I2C_TRANSFER_WR       1
  99
 100/* I2C master control flags */
 101#define OPTEE_RPC_I2C_FLAGS_TEN_BIT     BIT(0)
 102
 103#endif /*__OPTEE_RPC_CMD_H*/
 104