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