1 /* SPDX-License-Identifier: BSD-2-Clause */
3 * Copyright (c) 2016-2021, Linaro Limited
6 #ifndef __OPTEE_RPC_CMD_H
7 #define __OPTEE_RPC_CMD_H
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.
14 * RPC communication with tee-supplicant is reversed compared to normal
15 * client communication described above. The supplicant receives requests
16 * and sends responses.
22 * Returns number of seconds and nano seconds since the Epoch,
23 * 1970-01-01 00:00:00 +0000 (UTC).
25 * [out] value[0].a Number of seconds
26 * [out] value[0].b Number of nano seconds.
28 #define OPTEE_RPC_CMD_GET_TIME 3
31 * Notification from/to secure world.
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.
38 * This interface can also be used to wait for a asynchronous notification
39 * which instead is sent via a non-secure interrupt.
41 * Waiting on notification
42 * [in] value[0].a OPTEE_RPC_NOTIFICATION_WAIT
43 * [in] value[0].b notification value
45 * Sending a synchronous notification
46 * [in] value[0].a OPTEE_RPC_NOTIFICATION_SEND
47 * [in] value[0].b notification value
49 #define OPTEE_RPC_CMD_NOTIFICATION 4
50 #define OPTEE_RPC_NOTIFICATION_WAIT 0
51 #define OPTEE_RPC_NOTIFICATION_SEND 1
56 * [in] value[0].a Number of milliseconds to suspend
58 #define OPTEE_RPC_CMD_SUSPEND 5
61 * Allocate a piece of shared memory
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
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
76 * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC
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
82 #define OPTEE_RPC_CMD_SHM_FREE 7
85 * Issue master requests (read and write operations) to an I2C chip.
87 * [in] value[0].a Transfer mode (OPTEE_RPC_I2C_TRANSFER_*)
88 * [in] value[0].b The I2C bus (a.k.a adapter).
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).
94 * [in/out] memref[2] Buffer used for data transfers.
95 * [out] value[3].a Number of bytes transferred by the REE.
97 #define OPTEE_RPC_CMD_I2C_TRANSFER 21
99 /* I2C master transfer modes */
100 #define OPTEE_RPC_I2C_TRANSFER_RD 0
101 #define OPTEE_RPC_I2C_TRANSFER_WR 1
103 /* I2C master control flags */
104 #define OPTEE_RPC_I2C_FLAGS_TEN_BIT BIT(0)
106 #endif /*__OPTEE_RPC_CMD_H*/