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 * Notification from/to secure world.
32 *
33 * If secure world needs to wait for something, for instance a mutex, it
34 * does a notification wait request instead of spinning in secure world.
35 * Conversely can a synchronous notification can be sent when a secure
36 * world mutex with a thread waiting thread is unlocked.
37 *
38 * This interface can also be used to wait for a asynchronous notification
39 * which instead is sent via a non-secure interrupt.
40 *
41 * Waiting on notification
42 * [in] value[0].a OPTEE_RPC_NOTIFICATION_WAIT
43 * [in] value[0].b notification value
44 *
45 * Sending a synchronous notification
46 * [in] value[0].a OPTEE_RPC_NOTIFICATION_SEND
47 * [in] value[0].b notification value
48 */
49#define OPTEE_RPC_CMD_NOTIFICATION 4
50#define OPTEE_RPC_NOTIFICATION_WAIT 0
51#define OPTEE_RPC_NOTIFICATION_SEND 1
52
53/*
54 * Suspend execution
55 *
56 * [in] value[0].a Number of milliseconds to suspend
57 */
58#define OPTEE_RPC_CMD_SUSPEND 5
59
60/*
61 * Allocate a piece of shared memory
62 *
63 * [in] value[0].a Type of memory one of
64 * OPTEE_RPC_SHM_TYPE_* below
65 * [in] value[0].b Requested size
66 * [in] value[0].c Required alignment
67 * [out] memref[0] Buffer
68 */
69#define OPTEE_RPC_CMD_SHM_ALLOC 6
70/* Memory that can be shared with a non-secure user space application */
71#define OPTEE_RPC_SHM_TYPE_APPL 0
72/* Memory only shared with non-secure kernel */
73#define OPTEE_RPC_SHM_TYPE_KERNEL 1
74
75/*
76 * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC
77 *
78 * [in] value[0].a Type of memory one of
79 * OPTEE_RPC_SHM_TYPE_* above
80 * [in] value[0].b Value of shared memory reference or cookie
81 */
82#define OPTEE_RPC_CMD_SHM_FREE 7
83
84/*
85 * Issue master requests (read and write operations) to an I2C chip.
86 *
87 * [in] value[0].a Transfer mode (OPTEE_RPC_I2C_TRANSFER_*)
88 * [in] value[0].b The I2C bus (a.k.a adapter).
89 * 16 bit field.
90 * [in] value[0].c The I2C chip (a.k.a address).
91 * 16 bit field (either 7 or 10 bit effective).
92 * [in] value[1].a The I2C master control flags (ie, 10 bit address).
93 * 16 bit field.
94 * [in/out] memref[2] Buffer used for data transfers.
95 * [out] value[3].a Number of bytes transferred by the REE.
96 */
97#define OPTEE_RPC_CMD_I2C_TRANSFER 21
98
99/* I2C master transfer modes */
100#define OPTEE_RPC_I2C_TRANSFER_RD 0
101#define OPTEE_RPC_I2C_TRANSFER_WR 1
102
103/* I2C master control flags */
104#define OPTEE_RPC_I2C_FLAGS_TEN_BIT BIT(0)
105
106#endif /*__OPTEE_RPC_CMD_H*/
107

source code of linux/drivers/tee/optee/optee_rpc_cmd.h