2 * Freescale Layerscape MC I/O wrapper
4 * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
5 * Author: German Rivera <German.Rivera@freescale.com>
7 * SPDX-License-Identifier: GPL-2.0+
10 #include <fsl-mc/fsl_mc_sys.h>
11 #include <fsl-mc/fsl_mc_cmd.h>
12 #include <fsl-mc/fsl_dprc.h>
14 int dprc_get_container_id(struct fsl_mc_io *mc_io,
18 struct mc_command cmd = { 0 };
22 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
26 /* send command to mc*/
27 err = mc_send_command(mc_io, &cmd);
31 /* retrieve response parameters */
32 DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
37 int dprc_open(struct fsl_mc_io *mc_io,
42 struct mc_command cmd = { 0 };
46 cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
48 DPRC_CMD_OPEN(cmd, container_id);
50 /* send command to mc*/
51 err = mc_send_command(mc_io, &cmd);
55 /* retrieve response parameters */
56 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
61 int dprc_close(struct fsl_mc_io *mc_io,
65 struct mc_command cmd = { 0 };
68 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
71 /* send command to mc*/
72 return mc_send_command(mc_io, &cmd);
75 int dprc_reset_container(struct fsl_mc_io *mc_io,
78 int child_container_id)
80 struct mc_command cmd = { 0 };
83 cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
86 DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
88 /* send command to mc*/
89 return mc_send_command(mc_io, &cmd);
92 int dprc_get_attributes(struct fsl_mc_io *mc_io,
95 struct dprc_attributes *attr)
97 struct mc_command cmd = { 0 };
100 /* prepare command */
101 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
105 /* send command to mc*/
106 err = mc_send_command(mc_io, &cmd);
110 /* retrieve response parameters */
111 DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
116 int dprc_get_obj_count(struct fsl_mc_io *mc_io,
121 struct mc_command cmd = { 0 };
124 /* prepare command */
125 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
129 /* send command to mc*/
130 err = mc_send_command(mc_io, &cmd);
134 /* retrieve response parameters */
135 DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
140 int dprc_get_obj(struct fsl_mc_io *mc_io,
144 struct dprc_obj_desc *obj_desc)
146 struct mc_command cmd = { 0 };
149 /* prepare command */
150 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
153 DPRC_CMD_GET_OBJ(cmd, obj_index);
155 /* send command to mc*/
156 err = mc_send_command(mc_io, &cmd);
160 /* retrieve response parameters */
161 DPRC_RSP_GET_OBJ(cmd, obj_desc);
166 int dprc_get_res_count(struct fsl_mc_io *mc_io,
172 struct mc_command cmd = { 0 };
177 /* prepare command */
178 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
181 DPRC_CMD_GET_RES_COUNT(cmd, type);
183 /* send command to mc*/
184 err = mc_send_command(mc_io, &cmd);
188 /* retrieve response parameters */
189 DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
194 int dprc_get_res_ids(struct fsl_mc_io *mc_io,
198 struct dprc_res_ids_range_desc *range_desc)
200 struct mc_command cmd = { 0 };
203 /* prepare command */
204 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
207 DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
209 /* send command to mc*/
210 err = mc_send_command(mc_io, &cmd);
214 /* retrieve response parameters */
215 DPRC_RSP_GET_RES_IDS(cmd, range_desc);
220 int dprc_get_obj_region(struct fsl_mc_io *mc_io,
225 uint8_t region_index,
226 struct dprc_region_desc *region_desc)
228 struct mc_command cmd = { 0 };
231 /* prepare command */
232 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
235 DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
237 /* send command to mc*/
238 err = mc_send_command(mc_io, &cmd);
242 /* retrieve response parameters */
243 DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
248 int dprc_connect(struct fsl_mc_io *mc_io,
251 const struct dprc_endpoint *endpoint1,
252 const struct dprc_endpoint *endpoint2,
253 const struct dprc_connection_cfg *cfg)
255 struct mc_command cmd = { 0 };
257 /* prepare command */
258 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
261 DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
263 /* send command to mc*/
264 return mc_send_command(mc_io, &cmd);
267 int dprc_disconnect(struct fsl_mc_io *mc_io,
270 const struct dprc_endpoint *endpoint)
272 struct mc_command cmd = { 0 };
274 /* prepare command */
275 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
278 DPRC_CMD_DISCONNECT(cmd, endpoint);
280 /* send command to mc*/
281 return mc_send_command(mc_io, &cmd);
284 int dprc_get_connection(struct fsl_mc_io *mc_io,
287 const struct dprc_endpoint *endpoint1,
288 struct dprc_endpoint *endpoint2,
291 struct mc_command cmd = { 0 };
294 /* prepare command */
295 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
298 DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
300 /* send command to mc*/
301 err = mc_send_command(mc_io, &cmd);
305 /* retrieve response parameters */
306 DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);