xref: /optee_os/core/include/optee_rpc_cmd.h (revision 8dfdf3927214073d034281d479ce65ace7f3a08b)
16009538cSJens Wiklander /* SPDX-License-Identifier: BSD-2-Clause */
26009538cSJens Wiklander /*
3bc5df82aSJens Wiklander  * Copyright (c) 2016-2021, Linaro Limited
46009538cSJens Wiklander  */
56009538cSJens Wiklander 
66009538cSJens Wiklander #ifndef __OPTEE_RPC_CMD_H
76009538cSJens Wiklander #define __OPTEE_RPC_CMD_H
86009538cSJens Wiklander 
96009538cSJens Wiklander /*
106009538cSJens Wiklander  * All RPC is done with a struct optee_msg_arg as bearer of information,
116009538cSJens Wiklander  * struct optee_msg_arg::arg holds values defined by OPTEE_RPC_CMD_* below.
126009538cSJens Wiklander  * Only the commands handled by the kernel driver are defined here.
136009538cSJens Wiklander  *
146009538cSJens Wiklander  * RPC communication with tee-supplicant is reversed compared to normal
156009538cSJens Wiklander  * client communication described above. The supplicant receives requests
166009538cSJens Wiklander  * and sends responses.
176009538cSJens Wiklander  */
186009538cSJens Wiklander 
196009538cSJens Wiklander /*
206009538cSJens Wiklander  * Load a TA into memory
216009538cSJens Wiklander  *
226009538cSJens Wiklander  * Since the size of the TA isn't known in advance the size of the TA is
236009538cSJens Wiklander  * can be queried with a NULL buffer.
246009538cSJens Wiklander  *
256009538cSJens Wiklander  * [in]     value[0].a-b    UUID
266009538cSJens Wiklander  * [out]    memref[1]	    Buffer with TA
276009538cSJens Wiklander  */
2857f197ecSJens Wiklander #define OPTEE_RPC_CMD_LOAD_TA		U(0)
296009538cSJens Wiklander 
306009538cSJens Wiklander /*
316009538cSJens Wiklander  * Replay Protected Memory Block access
326009538cSJens Wiklander  *
336009538cSJens Wiklander  * [in]     memref[0]	    Frames to device
346009538cSJens Wiklander  * [out]    memref[1]	    Frames from device
356009538cSJens Wiklander  */
3657f197ecSJens Wiklander #define OPTEE_RPC_CMD_RPMB		U(1)
376009538cSJens Wiklander 
386009538cSJens Wiklander /*
396009538cSJens Wiklander  * File system access, see definition of protocol below
406009538cSJens Wiklander  */
4157f197ecSJens Wiklander #define OPTEE_RPC_CMD_FS		U(2)
426009538cSJens Wiklander 
436009538cSJens Wiklander /*
446009538cSJens Wiklander  * Get time
456009538cSJens Wiklander  *
466009538cSJens Wiklander  * Returns number of seconds and nano seconds since the Epoch,
476009538cSJens Wiklander  * 1970-01-01 00:00:00 +0000 (UTC).
486009538cSJens Wiklander  *
496009538cSJens Wiklander  * [out]    value[0].a	    Number of seconds
506009538cSJens Wiklander  * [out]    value[0].b	    Number of nano seconds.
516009538cSJens Wiklander  */
5257f197ecSJens Wiklander #define OPTEE_RPC_CMD_GET_TIME		U(3)
536009538cSJens Wiklander 
546009538cSJens Wiklander /*
552828809eSJens Wiklander  * Notification from/to secure world.
566009538cSJens Wiklander  *
572828809eSJens Wiklander  * If secure world needs to wait for something, for instance a mutex, it
582828809eSJens Wiklander  * does a notification wait request instead of spinning in secure world.
592828809eSJens Wiklander  * Conversely a synchronous notification can be sent when a secure
602828809eSJens Wiklander  * world mutex with a thread waiting thread is unlocked.
616009538cSJens Wiklander  *
62c2d44948SJens Wiklander  * This interface can also be used to wait for a asynchronous notification
63c2d44948SJens Wiklander  * which instead is sent via a non-secure interrupt.
64c2d44948SJens Wiklander  *
652828809eSJens Wiklander  * Waiting on notification
662828809eSJens Wiklander  * [in]    value[0].a	    OPTEE_RPC_NOTIFICATION_WAIT
672828809eSJens Wiklander  * [in]    value[0].b	    notification value
68450f8adaSGavin Liu  * [in]    value[0].c	    timeout in millisecond or 0 if no timeout
696009538cSJens Wiklander  *
702828809eSJens Wiklander  * Sending a synchronous notification
712828809eSJens Wiklander  * [in]    value[0].a	    OPTEE_RPC_NOTIFICATION_SEND
722828809eSJens Wiklander  * [in]    value[0].b	    notification value
73450f8adaSGavin Liu  * [in]    value[0].c	    shall be 0, reserved for future evolution
746009538cSJens Wiklander  */
752828809eSJens Wiklander #define OPTEE_RPC_CMD_NOTIFICATION	U(4)
762828809eSJens Wiklander #define OPTEE_RPC_NOTIFICATION_WAIT	U(0)
772828809eSJens Wiklander #define OPTEE_RPC_NOTIFICATION_SEND	U(1)
786009538cSJens Wiklander 
796009538cSJens Wiklander /*
806009538cSJens Wiklander  * Suspend execution
816009538cSJens Wiklander  *
826009538cSJens Wiklander  * [in]    value[0].a	Number of milliseconds to suspend
836009538cSJens Wiklander  */
8457f197ecSJens Wiklander #define OPTEE_RPC_CMD_SUSPEND		U(5)
856009538cSJens Wiklander 
866009538cSJens Wiklander /*
876009538cSJens Wiklander  * Allocate a piece of shared memory
886009538cSJens Wiklander  *
896009538cSJens Wiklander  * [in]    value[0].a	    Type of memory one of
906009538cSJens Wiklander  *			    OPTEE_RPC_SHM_TYPE_* below
916009538cSJens Wiklander  * [in]    value[0].b	    Requested size
926009538cSJens Wiklander  * [in]    value[0].c	    Required alignment
936009538cSJens Wiklander  * [out]   memref[0]	    Buffer
946009538cSJens Wiklander  */
9557f197ecSJens Wiklander #define OPTEE_RPC_CMD_SHM_ALLOC		U(6)
966009538cSJens Wiklander /* Memory that can be shared with a non-secure user space application */
9757f197ecSJens Wiklander #define OPTEE_RPC_SHM_TYPE_APPL		U(0)
986009538cSJens Wiklander /* Memory only shared with non-secure kernel */
9957f197ecSJens Wiklander #define OPTEE_RPC_SHM_TYPE_KERNEL	U(1)
1006009538cSJens Wiklander /*
1016009538cSJens Wiklander  * Memory shared with non-secure kernel and exported to a non-secure user
1026009538cSJens Wiklander  * space application
1036009538cSJens Wiklander  */
10457f197ecSJens Wiklander #define OPTEE_RPC_SHM_TYPE_GLOBAL	U(2)
1056009538cSJens Wiklander 
1066009538cSJens Wiklander /*
1076009538cSJens Wiklander  * Free shared memory previously allocated with OPTEE_RPC_CMD_SHM_ALLOC
1086009538cSJens Wiklander  *
1096009538cSJens Wiklander  * [in]     value[0].a	    Type of memory one of
1106009538cSJens Wiklander  *			    OPTEE_RPC_SHM_TYPE_* above
1116009538cSJens Wiklander  * [in]     value[0].b	    Value of shared memory reference or cookie
1126009538cSJens Wiklander  */
11357f197ecSJens Wiklander #define OPTEE_RPC_CMD_SHM_FREE		U(7)
1146009538cSJens Wiklander 
1156009538cSJens Wiklander /* Was OPTEE_RPC_CMD_SQL_FS, which isn't supported any longer */
11657f197ecSJens Wiklander #define OPTEE_RPC_CMD_SQL_FS_RESERVED	U(8)
1176009538cSJens Wiklander 
1186009538cSJens Wiklander /*
1196009538cSJens Wiklander  * Send TA profiling information to normal world
1206009538cSJens Wiklander  *
1216009538cSJens Wiklander  * [in/out] value[0].a	    File identifier. Must be set to 0 on
1226009538cSJens Wiklander  *			    first call. A value >= 1 will be
1236009538cSJens Wiklander  *			    returned on success. Re-use this value
1246009538cSJens Wiklander  *			    to append data to the same file.
1256009538cSJens Wiklander  * [in]     memref[1]	    TA UUID
1266009538cSJens Wiklander  * [in]     memref[2]	    Profile data
1276009538cSJens Wiklander  */
12857f197ecSJens Wiklander #define OPTEE_RPC_CMD_GPROF		U(9)
1296009538cSJens Wiklander 
1306009538cSJens Wiklander /*
1316009538cSJens Wiklander  * Socket command, see definition of protocol below
1326009538cSJens Wiklander  */
13357f197ecSJens Wiklander #define OPTEE_RPC_CMD_SOCKET		U(10)
1346009538cSJens Wiklander 
1356009538cSJens Wiklander /*
136d35a00c7SSumit Garg  * Send TA function graph data to normal world
137d35a00c7SSumit Garg  *
138d35a00c7SSumit Garg  * [in/out] value[0].a	    File identifier. Must be set to 0 on
139d35a00c7SSumit Garg  *			    first call. A value >= 1 will be
140d35a00c7SSumit Garg  *			    returned on success. Re-use this value
141d35a00c7SSumit Garg  *			    to append data to the same file.
142d35a00c7SSumit Garg  * [in]     memref[1]	    TA UUID
143d35a00c7SSumit Garg  * [in]     memref[2]	    function graph data
144d35a00c7SSumit Garg  */
14557f197ecSJens Wiklander #define OPTEE_RPC_CMD_FTRACE		U(11)
146d35a00c7SSumit Garg 
147d35a00c7SSumit Garg /*
148f97ae380SAleksandr Anisimov  * tee-supplicant plugin command, see definition of protocol below
149f97ae380SAleksandr Anisimov  */
15057f197ecSJens Wiklander #define OPTEE_RPC_CMD_SUPP_PLUGIN	U(12)
151f97ae380SAleksandr Anisimov 
152f97ae380SAleksandr Anisimov /*
1536009538cSJens Wiklander  * Register timestamp buffer in the linux kernel optee driver
1546009538cSJens Wiklander  *
1556009538cSJens Wiklander  * [in]     value[0].a	    Subcommand (register buffer, unregister buffer)
1566009538cSJens Wiklander  * [in]     value[0].b	    Physical address of timestamp buffer
1576009538cSJens Wiklander  * [in]     value[0].c	    Size of buffer
1586009538cSJens Wiklander  */
15957f197ecSJens Wiklander #define OPTEE_RPC_CMD_BENCH_REG		U(20)
1606009538cSJens Wiklander 
1616009538cSJens Wiklander /*
16230c53a72SJorge Ramirez-Ortiz  * Issue master requests (read and write operations) to an I2C chip.
16330c53a72SJorge Ramirez-Ortiz  *
164bc5df82aSJens Wiklander  * [in]     value[0].a	    Transfer mode (OPTEE_RPC_I2C_TRANSFER_*)
16530c53a72SJorge Ramirez-Ortiz  * [in]     value[0].b	    The I2C bus (a.k.a adapter).
16630c53a72SJorge Ramirez-Ortiz  *				16 bit field.
16730c53a72SJorge Ramirez-Ortiz  * [in]     value[0].c	    The I2C chip (a.k.a address).
16830c53a72SJorge Ramirez-Ortiz  *				16 bit field (either 7 or 10 bit effective).
16930c53a72SJorge Ramirez-Ortiz  * [in]     value[1].a	    The I2C master control flags (ie, 10 bit address).
17030c53a72SJorge Ramirez-Ortiz  *				16 bit field.
17130c53a72SJorge Ramirez-Ortiz  * [in/out] memref[2]	    Buffer used for data transfers.
17230c53a72SJorge Ramirez-Ortiz  * [out]    value[3].a	    Number of bytes transferred by the REE.
17330c53a72SJorge Ramirez-Ortiz  */
17457f197ecSJens Wiklander #define OPTEE_RPC_CMD_I2C_TRANSFER	U(21)
17530c53a72SJorge Ramirez-Ortiz 
17630c53a72SJorge Ramirez-Ortiz /* I2C master transfer modes */
17757f197ecSJens Wiklander #define OPTEE_RPC_I2C_TRANSFER_RD	U(0)
17857f197ecSJens Wiklander #define OPTEE_RPC_I2C_TRANSFER_WR	U(1)
17930c53a72SJorge Ramirez-Ortiz 
18030c53a72SJorge Ramirez-Ortiz /* I2C master control flags */
181bc5df82aSJens Wiklander #define OPTEE_RPC_I2C_FLAGS_TEN_BIT	BIT(0)
18230c53a72SJorge Ramirez-Ortiz 
18330c53a72SJorge Ramirez-Ortiz /*
184*8dfdf392SJens Wiklander  * Reset RPMB probing
185*8dfdf392SJens Wiklander  *
186*8dfdf392SJens Wiklander  * Releases a possibly already used RPMB device and starts over searching
187*8dfdf392SJens Wiklander  * for RPMB devices. Returns the kind of shared memory to use in subsequent
188*8dfdf392SJens Wiklander  * OPTEE_RPC_CMD_RPMB_PROBE_NEXT and OPTEE_RPC_CMD_RPMB_FRAMES calls.
189*8dfdf392SJens Wiklander  *
190*8dfdf392SJens Wiklander  * [out]    value[0].a	    OPTEE_RPC_SHM_TYPE_*, the parameter for
191*8dfdf392SJens Wiklander  *			    OPTEE_RPC_CMD_SHM_ALLOC
192*8dfdf392SJens Wiklander  */
193*8dfdf392SJens Wiklander #define OPTEE_RPC_CMD_RPMB_PROBE_RESET	U(22)
194*8dfdf392SJens Wiklander 
195*8dfdf392SJens Wiklander /*
196*8dfdf392SJens Wiklander  * Probe next RPMB device
197*8dfdf392SJens Wiklander  *
198*8dfdf392SJens Wiklander  * value[0].a indicates kind of RPMB device found, currently is only
199*8dfdf392SJens Wiklander  * OPTEE_RPC_RPMB_EMMC supported. If another kind of RPMB device is found
200*8dfdf392SJens Wiklander  * it will have a new unique value in value[0].a and the other
201*8dfdf392SJens Wiklander  * out-parameters will be defined specifically for that device.
202*8dfdf392SJens Wiklander  *
203*8dfdf392SJens Wiklander  * If an eMMC/RPMB partition is found:
204*8dfdf392SJens Wiklander  * [out]    value[0].a	    OPTEE_RPC_RPMB_EMMC
205*8dfdf392SJens Wiklander  * [out]    value[0].b	    EXT CSD-slice 168 "RPMB Size"
206*8dfdf392SJens Wiklander  * [out]    value[0].c	    EXT CSD-slice 222 "Reliable Write Sector Count"
207*8dfdf392SJens Wiklander  * [out]    memref[1]       Buffer with the raw CID
208*8dfdf392SJens Wiklander  */
209*8dfdf392SJens Wiklander #define OPTEE_RPC_CMD_RPMB_PROBE_NEXT	U(23)
210*8dfdf392SJens Wiklander 
211*8dfdf392SJens Wiklander #define OPTEE_RPC_RPMB_EMMC		U(0)
212*8dfdf392SJens Wiklander 
213*8dfdf392SJens Wiklander /*
214*8dfdf392SJens Wiklander  * Replay Protected Memory Block access
215*8dfdf392SJens Wiklander  *
216*8dfdf392SJens Wiklander  * [in]     memref[0]	    Frames to device
217*8dfdf392SJens Wiklander  * [out]    memref[1]	    Frames from device
218*8dfdf392SJens Wiklander  */
219*8dfdf392SJens Wiklander #define OPTEE_RPC_CMD_RPMB_FRAMES	U(24)
220*8dfdf392SJens Wiklander 
221*8dfdf392SJens Wiklander /*
2226009538cSJens Wiklander  * Definition of protocol for command OPTEE_RPC_CMD_FS
2236009538cSJens Wiklander  */
2246009538cSJens Wiklander 
2256009538cSJens Wiklander /*
2266009538cSJens Wiklander  * Open a file
2276009538cSJens Wiklander  *
2286009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_OPEN
2296009538cSJens Wiklander  * [in]     memref[1]	    A string holding the file name
2306009538cSJens Wiklander  * [out]    value[2].a	    File descriptor of open file
2316009538cSJens Wiklander  */
23257f197ecSJens Wiklander #define OPTEE_RPC_FS_OPEN		U(0)
2336009538cSJens Wiklander 
2346009538cSJens Wiklander /*
2356009538cSJens Wiklander  * Create a file
2366009538cSJens Wiklander  *
2376009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_CREATE
2386009538cSJens Wiklander  * [in]     memref[1]	    A string holding the file name
2396009538cSJens Wiklander  * [out]    value[2].a	    File descriptor of open file
2406009538cSJens Wiklander  */
24157f197ecSJens Wiklander #define OPTEE_RPC_FS_CREATE		U(1)
2426009538cSJens Wiklander 
2436009538cSJens Wiklander /*
2446009538cSJens Wiklander  * Close a file
2456009538cSJens Wiklander  *
2466009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_CLOSE
2476009538cSJens Wiklander  * [in]     value[0].b	    File descriptor of open file.
2486009538cSJens Wiklander  */
24957f197ecSJens Wiklander #define OPTEE_RPC_FS_CLOSE		U(2)
2506009538cSJens Wiklander 
2516009538cSJens Wiklander /*
2526009538cSJens Wiklander  * Read from a file
2536009538cSJens Wiklander  *
2546009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_READ
2556009538cSJens Wiklander  * [in]     value[0].b	    File descriptor of open file
2566009538cSJens Wiklander  * [in]     value[0].c	    Offset into file
2576009538cSJens Wiklander  * [out]    memref[1]	    Buffer to hold returned data
2586009538cSJens Wiklander  */
25957f197ecSJens Wiklander #define OPTEE_RPC_FS_READ		U(3)
2606009538cSJens Wiklander 
2616009538cSJens Wiklander /*
2626009538cSJens Wiklander  * Write to a file
2636009538cSJens Wiklander  *
2646009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_WRITE
2656009538cSJens Wiklander  * [in]     value[0].b	    File descriptor of open file
2666009538cSJens Wiklander  * [in]     value[0].c	    Offset into file
2676009538cSJens Wiklander  * [in]     memref[1]	    Buffer holding data to be written
2686009538cSJens Wiklander  */
26957f197ecSJens Wiklander #define OPTEE_RPC_FS_WRITE		U(4)
2706009538cSJens Wiklander 
2716009538cSJens Wiklander /*
2726009538cSJens Wiklander  * Truncate a file
2736009538cSJens Wiklander  *
2746009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_TRUNCATE
2756009538cSJens Wiklander  * [in]     value[0].b	    File descriptor of open file
2766009538cSJens Wiklander  * [in]     value[0].c	    Length of file.
2776009538cSJens Wiklander  */
27857f197ecSJens Wiklander #define OPTEE_RPC_FS_TRUNCATE		U(5)
2796009538cSJens Wiklander 
2806009538cSJens Wiklander /*
2816009538cSJens Wiklander  * Remove a file
2826009538cSJens Wiklander  *
2836009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_REMOVE
2846009538cSJens Wiklander  * [in]     memref[1]	    A string holding the file name
2856009538cSJens Wiklander  */
28657f197ecSJens Wiklander #define OPTEE_RPC_FS_REMOVE		U(6)
2876009538cSJens Wiklander 
2886009538cSJens Wiklander /*
2896009538cSJens Wiklander  * Rename a file
2906009538cSJens Wiklander  *
2916009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_RENAME
2926009538cSJens Wiklander  * [in]     value[0].b	    True if existing target should be removed
2936009538cSJens Wiklander  * [in]     memref[1]	    A string holding the old file name
2946009538cSJens Wiklander  * [in]     memref[2]	    A string holding the new file name
2956009538cSJens Wiklander  */
29657f197ecSJens Wiklander #define OPTEE_RPC_FS_RENAME		U(7)
2976009538cSJens Wiklander 
2986009538cSJens Wiklander /*
2996009538cSJens Wiklander  * Opens a directory for file listing
3006009538cSJens Wiklander  *
3016009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_OPENDIR
3026009538cSJens Wiklander  * [in]     memref[1]	    A string holding the name of the directory
3036009538cSJens Wiklander  * [out]    value[2].a	    Handle to open directory
3046009538cSJens Wiklander  */
30557f197ecSJens Wiklander #define OPTEE_RPC_FS_OPENDIR		U(8)
3066009538cSJens Wiklander 
3076009538cSJens Wiklander /*
3086009538cSJens Wiklander  * Closes a directory handle
3096009538cSJens Wiklander  *
3106009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_CLOSEDIR
3116009538cSJens Wiklander  * [in]     value[0].b	    Handle to open directory
3126009538cSJens Wiklander  */
31357f197ecSJens Wiklander #define OPTEE_RPC_FS_CLOSEDIR		U(9)
3146009538cSJens Wiklander 
3156009538cSJens Wiklander /*
3166009538cSJens Wiklander  * Read next file name of directory
3176009538cSJens Wiklander  *
3186009538cSJens Wiklander  *
3196009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_FS_READDIR
3206009538cSJens Wiklander  * [in]     value[0].b	    Handle to open directory
3216009538cSJens Wiklander  * [out]    memref[1]	    A string holding the file name
3226009538cSJens Wiklander  */
32357f197ecSJens Wiklander #define OPTEE_RPC_FS_READDIR		U(10)
3246009538cSJens Wiklander 
3256009538cSJens Wiklander /* End of definition of protocol for command OPTEE_RPC_CMD_FS */
3266009538cSJens Wiklander 
3276009538cSJens Wiklander /*
3286009538cSJens Wiklander  * Definition of protocol for command OPTEE_RPC_CMD_SOCKET
3296009538cSJens Wiklander  */
3306009538cSJens Wiklander 
33157f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_TIMEOUT_NONBLOCKING	U(0)
33257f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_TIMEOUT_BLOCKING	U(0xffffffff)
3336009538cSJens Wiklander 
3346009538cSJens Wiklander /*
3356009538cSJens Wiklander  * Open socket
3366009538cSJens Wiklander  *
3376009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_OPEN
3386009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3396009538cSJens Wiklander  * [in]     value[1].a	    Server port number
3406009538cSJens Wiklander  * [in]     value[1].b	    Protocol, TEE_ISOCKET_PROTOCOLID_*
3416009538cSJens Wiklander  * [in]     value[1].c	    Ip version TEE_IP_VERSION_* from tee_ipsocket.h
3426009538cSJens Wiklander  * [in]     memref[2]	    Server address
3436009538cSJens Wiklander  * [out]    value[3].a	    Socket handle (32-bit)
3446009538cSJens Wiklander  */
34557f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_OPEN	U(0)
3466009538cSJens Wiklander 
3476009538cSJens Wiklander /*
3486009538cSJens Wiklander  * Close socket
3496009538cSJens Wiklander  *
3506009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_CLOSE
3516009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3526009538cSJens Wiklander  * [in]     value[0].c	    Socket handle
3536009538cSJens Wiklander  */
35457f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_CLOSE	U(1)
3556009538cSJens Wiklander 
3566009538cSJens Wiklander /*
3576009538cSJens Wiklander  * Close all sockets
3586009538cSJens Wiklander  *
3596009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_CLOSE_ALL
3606009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3616009538cSJens Wiklander  */
36257f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_CLOSE_ALL U(2)
3636009538cSJens Wiklander 
3646009538cSJens Wiklander /*
3656009538cSJens Wiklander  * Send data on socket
3666009538cSJens Wiklander  *
3676009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_SEND
3686009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3696009538cSJens Wiklander  * [in]     value[0].c	    Socket handle
3706009538cSJens Wiklander  * [in]     memref[1]	    Buffer to transmit
3716009538cSJens Wiklander  * [in]     value[2].a	    Timeout ms or OPTEE_RPC_SOCKET_TIMEOUT_*
3726009538cSJens Wiklander  * [out]    value[2].b	    Number of transmitted bytes
3736009538cSJens Wiklander  */
37457f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_SEND	U(3)
3756009538cSJens Wiklander 
3766009538cSJens Wiklander /*
3776009538cSJens Wiklander  * Receive data on socket
3786009538cSJens Wiklander  *
3796009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_RECV
3806009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3816009538cSJens Wiklander  * [in]     value[0].c	    Socket handle
3826009538cSJens Wiklander  * [out]    memref[1]	    Buffer to receive
3836009538cSJens Wiklander  * [in]     value[2].a	    Timeout ms or OPTEE_RPC_SOCKET_TIMEOUT_*
3846009538cSJens Wiklander  */
38557f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_RECV	U(4)
3866009538cSJens Wiklander 
3876009538cSJens Wiklander /*
3886009538cSJens Wiklander  * Perform IOCTL on socket
3896009538cSJens Wiklander  *
3906009538cSJens Wiklander  * [in]     value[0].a	    OPTEE_RPC_SOCKET_IOCTL
3916009538cSJens Wiklander  * [in]     value[0].b	    TA instance id
3926009538cSJens Wiklander  * [in]     value[0].c	    Socket handle
3936009538cSJens Wiklander  * [in/out] memref[1]	    Buffer
3946009538cSJens Wiklander  * [in]     value[2].a	    Ioctl command
3956009538cSJens Wiklander  */
39657f197ecSJens Wiklander #define OPTEE_RPC_SOCKET_IOCTL	U(5)
3976009538cSJens Wiklander 
3986009538cSJens Wiklander /* End of definition of protocol for command OPTEE_RPC_CMD_SOCKET */
3996009538cSJens Wiklander 
400f97ae380SAleksandr Anisimov /*
401f97ae380SAleksandr Anisimov  * Definition of protocol for command OPTEE_RPC_CMD_SUPP_PLUGIN
402f97ae380SAleksandr Anisimov  */
403f97ae380SAleksandr Anisimov 
404f97ae380SAleksandr Anisimov /*
405f97ae380SAleksandr Anisimov  * Invoke tee-supplicant's plugin.
406f97ae380SAleksandr Anisimov  *
407f97ae380SAleksandr Anisimov  * [in]     value[0].a	OPTEE_RPC_SUPP_PLUGIN_INVOKE
408f97ae380SAleksandr Anisimov  * [in]     value[0].b	uuid.d1
409f97ae380SAleksandr Anisimov  * [in]     value[0].c	uuid.d2
410f97ae380SAleksandr Anisimov  * [in]     value[1].a	uuid.d3
411f97ae380SAleksandr Anisimov  * [in]     value[1].b	uuid.d4
412f97ae380SAleksandr Anisimov  * [in]     value[1].c	cmd for plugin
413f97ae380SAleksandr Anisimov  * [in]     value[2].a	sub_cmd for plugin
414f97ae380SAleksandr Anisimov  * [out]    value[2].b  length of the outbuf (memref[3]), if out is needed.
415f97ae380SAleksandr Anisimov  * [in/out] memref[3]	buffer holding data for plugin
416f97ae380SAleksandr Anisimov  *
417f97ae380SAleksandr Anisimov  * UUID serialized into octets:
418f97ae380SAleksandr Anisimov  * b0  b1  b2  b3   b4  b5  b6  b7   b8  b9  b10  b11   b12  b13  b14  b15
419f97ae380SAleksandr Anisimov  *       d1       |       d2       |        d3        |         d4
420f97ae380SAleksandr Anisimov  *
421f97ae380SAleksandr Anisimov  * The endianness of words d1, d2, d3 and d4 must be little-endian.
422f97ae380SAleksandr Anisimov  * d1 word contains [b3 b2 b1 b0]
423f97ae380SAleksandr Anisimov  * d2 word contains [b7 b6 b5 b4]
424f97ae380SAleksandr Anisimov  * d3 word contains [b11 b10 b9 b8]
425f97ae380SAleksandr Anisimov  * d4 word contains [b15 b14 b13 b12]
426f97ae380SAleksandr Anisimov  */
42757f197ecSJens Wiklander #define OPTEE_RPC_SUPP_PLUGIN_INVOKE	U(0)
428f97ae380SAleksandr Anisimov 
429f97ae380SAleksandr Anisimov /* End of definition of protocol for command OPTEE_RPC_CMD_SUPP_PLUGIN */
430f97ae380SAleksandr Anisimov 
4316009538cSJens Wiklander #endif /*__OPTEE_RPC_CMD_H*/
432