1
2
3
4
5
6
7
8
9
10#include <fsl-mc/fsl_mc_sys.h>
11#include <fsl-mc/fsl_mc_cmd.h>
12#include <fsl-mc/fsl_dprc.h>
13
14int dprc_get_container_id(struct fsl_mc_io *mc_io,
15 uint32_t cmd_flags,
16 int *container_id)
17{
18 struct mc_command cmd = { 0 };
19 int err;
20
21
22 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
23 cmd_flags,
24 0);
25
26
27 err = mc_send_command(mc_io, &cmd);
28 if (err)
29 return err;
30
31
32 DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
33
34 return 0;
35}
36
37int dprc_open(struct fsl_mc_io *mc_io,
38 uint32_t cmd_flags,
39 int container_id,
40 uint16_t *token)
41{
42 struct mc_command cmd = { 0 };
43 int err;
44
45
46 cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
47 0);
48 DPRC_CMD_OPEN(cmd, container_id);
49
50
51 err = mc_send_command(mc_io, &cmd);
52 if (err)
53 return err;
54
55
56 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
57
58 return 0;
59}
60
61int dprc_close(struct fsl_mc_io *mc_io,
62 uint32_t cmd_flags,
63 uint16_t token)
64{
65 struct mc_command cmd = { 0 };
66
67
68 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
69 token);
70
71
72 return mc_send_command(mc_io, &cmd);
73}
74
75int dprc_create_container(struct fsl_mc_io *mc_io,
76 uint32_t cmd_flags,
77 uint16_t token,
78 struct dprc_cfg *cfg,
79 int *child_container_id,
80 uint64_t *child_portal_paddr)
81{
82 struct mc_command cmd = { 0 };
83 int err;
84
85
86 DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
87
88 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
89 cmd_flags,
90 token);
91
92
93 err = mc_send_command(mc_io, &cmd);
94 if (err)
95 return err;
96
97
98 DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
99 *child_portal_paddr);
100
101 return 0;
102}
103
104int dprc_destroy_container(struct fsl_mc_io *mc_io,
105 uint32_t cmd_flags,
106 uint16_t token,
107 int child_container_id)
108{
109 struct mc_command cmd = { 0 };
110
111
112 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
113 cmd_flags,
114 token);
115 DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
116
117
118 return mc_send_command(mc_io, &cmd);
119}
120
121int dprc_reset_container(struct fsl_mc_io *mc_io,
122 uint32_t cmd_flags,
123 uint16_t token,
124 int child_container_id)
125{
126 struct mc_command cmd = { 0 };
127
128
129 cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
130 cmd_flags,
131 token);
132 DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
133
134
135 return mc_send_command(mc_io, &cmd);
136}
137
138int dprc_get_attributes(struct fsl_mc_io *mc_io,
139 uint32_t cmd_flags,
140 uint16_t token,
141 struct dprc_attributes *attr)
142{
143 struct mc_command cmd = { 0 };
144 int err;
145
146
147 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
148 cmd_flags,
149 token);
150
151
152 err = mc_send_command(mc_io, &cmd);
153 if (err)
154 return err;
155
156
157 DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
158
159 return 0;
160}
161
162int dprc_get_obj_count(struct fsl_mc_io *mc_io,
163 uint32_t cmd_flags,
164 uint16_t token,
165 int *obj_count)
166{
167 struct mc_command cmd = { 0 };
168 int err;
169
170
171 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
172 cmd_flags,
173 token);
174
175
176 err = mc_send_command(mc_io, &cmd);
177 if (err)
178 return err;
179
180
181 DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
182
183 return 0;
184}
185
186int dprc_get_obj(struct fsl_mc_io *mc_io,
187 uint32_t cmd_flags,
188 uint16_t token,
189 int obj_index,
190 struct dprc_obj_desc *obj_desc)
191{
192 struct mc_command cmd = { 0 };
193 int err;
194
195
196 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
197 cmd_flags,
198 token);
199 DPRC_CMD_GET_OBJ(cmd, obj_index);
200
201
202 err = mc_send_command(mc_io, &cmd);
203 if (err)
204 return err;
205
206
207 DPRC_RSP_GET_OBJ(cmd, obj_desc);
208
209 return 0;
210}
211
212int dprc_get_res_count(struct fsl_mc_io *mc_io,
213 uint32_t cmd_flags,
214 uint16_t token,
215 char *type,
216 int *res_count)
217{
218 struct mc_command cmd = { 0 };
219 int err;
220
221 *res_count = 0;
222
223
224 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
225 cmd_flags,
226 token);
227 DPRC_CMD_GET_RES_COUNT(cmd, type);
228
229
230 err = mc_send_command(mc_io, &cmd);
231 if (err)
232 return err;
233
234
235 DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
236
237 return 0;
238}
239
240int dprc_get_res_ids(struct fsl_mc_io *mc_io,
241 uint32_t cmd_flags,
242 uint16_t token,
243 char *type,
244 struct dprc_res_ids_range_desc *range_desc)
245{
246 struct mc_command cmd = { 0 };
247 int err;
248
249
250 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
251 cmd_flags,
252 token);
253 DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
254
255
256 err = mc_send_command(mc_io, &cmd);
257 if (err)
258 return err;
259
260
261 DPRC_RSP_GET_RES_IDS(cmd, range_desc);
262
263 return 0;
264}
265
266int dprc_get_obj_region(struct fsl_mc_io *mc_io,
267 uint32_t cmd_flags,
268 uint16_t token,
269 char *obj_type,
270 int obj_id,
271 uint8_t region_index,
272 struct dprc_region_desc *region_desc)
273{
274 struct mc_command cmd = { 0 };
275 int err;
276
277
278 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
279 cmd_flags,
280 token);
281 DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
282
283
284 err = mc_send_command(mc_io, &cmd);
285 if (err)
286 return err;
287
288
289 DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
290
291 return 0;
292}
293
294int dprc_connect(struct fsl_mc_io *mc_io,
295 uint32_t cmd_flags,
296 uint16_t token,
297 const struct dprc_endpoint *endpoint1,
298 const struct dprc_endpoint *endpoint2,
299 const struct dprc_connection_cfg *cfg)
300{
301 struct mc_command cmd = { 0 };
302
303
304 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
305 cmd_flags,
306 token);
307 DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
308
309
310 return mc_send_command(mc_io, &cmd);
311}
312
313int dprc_disconnect(struct fsl_mc_io *mc_io,
314 uint32_t cmd_flags,
315 uint16_t token,
316 const struct dprc_endpoint *endpoint)
317{
318 struct mc_command cmd = { 0 };
319
320
321 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
322 cmd_flags,
323 token);
324 DPRC_CMD_DISCONNECT(cmd, endpoint);
325
326
327 return mc_send_command(mc_io, &cmd);
328}
329
330int dprc_get_connection(struct fsl_mc_io *mc_io,
331 uint32_t cmd_flags,
332 uint16_t token,
333 const struct dprc_endpoint *endpoint1,
334 struct dprc_endpoint *endpoint2,
335 int *state)
336{
337 struct mc_command cmd = { 0 };
338 int err;
339
340
341 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
342 cmd_flags,
343 token);
344 DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
345
346
347 err = mc_send_command(mc_io, &cmd);
348 if (err)
349 return err;
350
351
352 DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
353
354 return 0;
355}
356
357int dprc_get_api_version(struct fsl_mc_io *mc_io,
358 u32 cmd_flags,
359 u16 *major_ver,
360 u16 *minor_ver)
361{
362 struct mc_command cmd = { 0 };
363 int err;
364
365
366 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_API_VERSION,
367 cmd_flags, 0);
368
369
370 err = mc_send_command(mc_io, &cmd);
371 if (err)
372 return err;
373
374
375 mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
376
377 return 0;
378}
379