1 /* SPDX-License-Identifier: BSD-2-Clause */
2 /*
3  * Copyright (c) 2016-2018, Linaro Limited
4  */
5 
6 #ifndef __OPTEE_MSG_SUPPLICANT_H
7 #define __OPTEE_MSG_SUPPLICANT_H
8 
9 /*
10  * This file is based on
11  * https://github.com/OP-TEE/optee_os/blob/master/core/include/optee_msg_supplicant.h
12  * and may need to be updated when introducing new features.
13  */
14 
15 /*
16  * Load a TA into memory
17  */
18 #define OPTEE_MSG_RPC_CMD_LOAD_TA	0
19 
20 /*
21  * Replay Protected Memory Block access
22  */
23 #define OPTEE_MSG_RPC_CMD_RPMB		1
24 
25 /*
26  * File system access
27  */
28 #define OPTEE_MSG_RPC_CMD_FS		2
29 
30 /*
31  * Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_FS and first
32  * parameter has the attribute OPTEE_MSG_ATTR_TYPE_VALUE_INPUT.
33  */
34 
35 /*
36  * Open a file
37  *
38  * [in]     param[0].u.value.a	OPTEE_MRF_OPEN
39  * [in]     param[1].u.tmem	a string holding the file name
40  * [out]    param[2].u.value.a	file descriptor of open file
41  */
42 #define OPTEE_MRF_OPEN			0
43 
44 /*
45  * Create a file
46  *
47  * [in]     param[0].u.value.a	OPTEE_MRF_CREATE
48  * [in]     param[1].u.tmem	a string holding the file name
49  * [out]    param[2].u.value.a	file descriptor of open file
50  */
51 #define OPTEE_MRF_CREATE		1
52 
53 /*
54  * Close a file
55  *
56  * [in]     param[0].u.value.a	OPTEE_MRF_CLOSE
57  * [in]     param[0].u.value.b	file descriptor of open file.
58  */
59 #define OPTEE_MRF_CLOSE			2
60 
61 /*
62  * Read from a file
63  *
64  * [in]     param[0].u.value.a	OPTEE_MRF_READ
65  * [in]     param[0].u.value.b	file descriptor of open file
66  * [in]     param[0].u.value.c	offset into file
67  * [out]    param[1].u.tmem	buffer to hold returned data
68  */
69 #define OPTEE_MRF_READ			3
70 
71 /*
72  * Write to a file
73  *
74  * [in]     param[0].u.value.a	OPTEE_MRF_WRITE
75  * [in]     param[0].u.value.b	file descriptor of open file
76  * [in]     param[0].u.value.c	offset into file
77  * [in]     param[1].u.tmem	buffer holding data to be written
78  */
79 #define OPTEE_MRF_WRITE			4
80 
81 /*
82  * Truncate a file
83  *
84  * [in]     param[0].u.value.a	OPTEE_MRF_TRUNCATE
85  * [in]     param[0].u.value.b	file descriptor of open file
86  * [in]     param[0].u.value.c	length of file.
87  */
88 #define OPTEE_MRF_TRUNCATE		5
89 
90 /*
91  * Remove a file
92  *
93  * [in]  param[0].u.value.a	OPTEE_MRF_REMOVE
94  * [in]  param[1].u.tmem	a string holding the file name
95  */
96 #define OPTEE_MRF_REMOVE		6
97 
98 /*
99  * Rename a file
100  *
101  * [in]  param[0].u.value.a	OPTEE_MRF_RENAME
102  * [in]  param[0].u.value.b	true if existing target should be removed
103  * [in]  param[1].u.tmem	a string holding the old file name
104  * [in]  param[2].u.tmem	a string holding the new file name
105  */
106 #define OPTEE_MRF_RENAME		7
107 
108 /*
109  * Opens a directory for file listing
110  *
111  * [in]  param[0].u.value.a	OPTEE_MRF_OPENDIR
112  * [in]  param[1].u.tmem	a string holding the name of the directory
113  * [out] param[2].u.value.a	handle to open directory
114  */
115 #define OPTEE_MRF_OPENDIR		8
116 
117 /*
118  * Closes a directory handle
119  *
120  * [in]  param[0].u.value.a	OPTEE_MRF_CLOSEDIR
121  * [in]  param[0].u.value.b	handle to open directory
122  */
123 #define OPTEE_MRF_CLOSEDIR		9
124 
125 /*
126  * Read next file name of directory
127  *
128  *
129  * [in]  param[0].u.value.a	OPTEE_MRF_READDIR
130  * [in]  param[0].u.value.b	handle to open directory
131  * [out] param[1].u.tmem	a string holding the file name
132  */
133 #define OPTEE_MRF_READDIR		10
134 
135 /*
136  * End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_FS
137  */
138 
139 /*
140  * Command Ids 3, 4 and 5 of OPTEE_MSG_RPC_CMD_xxx macros are reserved for use
141  * by the kernel driver.
142  */
143 
144 /*
145  * Shared memory allocation
146  */
147 #define OPTEE_MSG_RPC_CMD_SHM_ALLOC	6
148 #define OPTEE_MSG_RPC_CMD_SHM_FREE	7
149 
150 /*
151  * I2C bus access
152  */
153 #define OPTEE_MSG_RPC_CMD_I2C_TRANSFER 21
154 
155 /*
156  * Was OPTEE_MSG_RPC_CMD_SQL_FS, which isn't supported any longer
157  */
158 #define OPTEE_MSG_RPC_CMD_SQL_FS_RESERVED	8
159 
160 /*
161  * GPROF support management commands
162  */
163 #define OPTEE_MSG_RPC_CMD_GPROF		9
164 
165 /*
166  * Socket commands
167  */
168 #define OPTEE_MSG_RPC_CMD_SOCKET	10
169 
170 /*
171  * Define protocol for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
172  */
173 
174 #define OPTEE_MRC_SOCKET_TIMEOUT_NONBLOCKING	0
175 #define OPTEE_MRC_SOCKET_TIMEOUT_BLOCKING	0xffffffff
176 
177 /*
178  * Open socket
179  *
180  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_OPEN
181  * [in]     param[0].u.value.b	TA instance id
182  * [in]     param[1].u.value.a	server port number
183  * [in]     param[1].u.value.b	protocol, TEE_ISOCKET_PROTOCOLID_*
184  * [in]     param[1].u.value.c	ip version TEE_IP_VERSION_* from tee_ipsocket.h
185  * [in]     param[2].u.tmem	server address
186  * [out]    param[3].u.value.a	socket handle (32-bit)
187  */
188 #define OPTEE_MRC_SOCKET_OPEN	0
189 
190 /*
191  * Close socket
192  *
193  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_CLOSE
194  * [in]     param[0].u.value.b	TA instance id
195  * [in]     param[0].u.value.c	socket handle
196  */
197 #define OPTEE_MRC_SOCKET_CLOSE	1
198 
199 /*
200  * Close all sockets
201  *
202  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_CLOSE_ALL
203  * [in]     param[0].u.value.b	TA instance id
204  */
205 #define OPTEE_MRC_SOCKET_CLOSE_ALL 2
206 
207 /*
208  * Send data on socket
209  *
210  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_SEND
211  * [in]     param[0].u.value.b	TA instance id
212  * [in]     param[0].u.value.c	socket handle
213  * [in]     param[1].u.tmem	buffer to transmit
214  * [in]     param[2].u.value.a	timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
215  * [out]    param[2].u.value.b	number of transmitted bytes
216  */
217 #define OPTEE_MRC_SOCKET_SEND	3
218 
219 /*
220  * Receive data on socket
221  *
222  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_RECV
223  * [in]     param[0].u.value.b	TA instance id
224  * [in]     param[0].u.value.c	socket handle
225  * [out]    param[1].u.tmem	buffer to receive
226  * [in]     param[2].u.value.a	timeout ms or OPTEE_MRC_SOCKET_TIMEOUT_*
227  */
228 #define OPTEE_MRC_SOCKET_RECV	4
229 
230 /*
231  * Perform IOCTL on socket
232  *
233  * [in]     param[0].u.value.a	OPTEE_MRC_SOCKET_IOCTL
234  * [in]     param[0].u.value.b	TA instance id
235  * [in]     param[0].u.value.c	socket handle
236  * [in/out] param[1].u.tmem	buffer
237  * [in]     param[2].u.value.a	ioctl command
238  */
239 #define OPTEE_MRC_SOCKET_IOCTL	5
240 
241 /*
242  * End of definitions for messages with .cmd == OPTEE_MSG_RPC_CMD_SOCKET
243  */
244 
245 #endif /* __OPTEE_MSG_SUPPLICANT_H */
246