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, int *container_id)
16 struct mc_command cmd = { 0 };
20 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
23 /* send command to mc*/
24 err = mc_send_command(mc_io, &cmd);
28 /* retrieve response parameters */
29 DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
34 int dprc_open(struct fsl_mc_io *mc_io, int container_id, uint16_t *token)
36 struct mc_command cmd = { 0 };
40 cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, MC_CMD_PRI_LOW,
42 DPRC_CMD_OPEN(cmd, container_id);
44 /* send command to mc*/
45 err = mc_send_command(mc_io, &cmd);
49 /* retrieve response parameters */
50 *token = MC_CMD_HDR_READ_TOKEN(cmd.header);
55 int dprc_close(struct fsl_mc_io *mc_io, uint16_t token)
57 struct mc_command cmd = { 0 };
60 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, MC_CMD_PRI_HIGH,
63 /* send command to mc*/
64 return mc_send_command(mc_io, &cmd);
67 int dprc_reset_container(struct fsl_mc_io *mc_io,
69 int child_container_id)
71 struct mc_command cmd = { 0 };
74 cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
75 MC_CMD_PRI_LOW, token);
76 DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
78 /* send command to mc*/
79 return mc_send_command(mc_io, &cmd);
82 int dprc_get_attributes(struct fsl_mc_io *mc_io,
84 struct dprc_attributes *attr)
86 struct mc_command cmd = { 0 };
90 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
94 /* send command to mc*/
95 err = mc_send_command(mc_io, &cmd);
99 /* retrieve response parameters */
100 DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
105 int dprc_get_obj_count(struct fsl_mc_io *mc_io, uint16_t token, int *obj_count)
107 struct mc_command cmd = { 0 };
110 /* prepare command */
111 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
112 MC_CMD_PRI_LOW, token);
114 /* send command to mc*/
115 err = mc_send_command(mc_io, &cmd);
119 /* retrieve response parameters */
120 DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
125 int dprc_get_obj(struct fsl_mc_io *mc_io,
128 struct dprc_obj_desc *obj_desc)
130 struct mc_command cmd = { 0 };
133 /* prepare command */
134 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
137 DPRC_CMD_GET_OBJ(cmd, obj_index);
139 /* send command to mc*/
140 err = mc_send_command(mc_io, &cmd);
144 /* retrieve response parameters */
145 DPRC_RSP_GET_OBJ(cmd, obj_desc);
150 int dprc_get_res_count(struct fsl_mc_io *mc_io,
155 struct mc_command cmd = { 0 };
160 /* prepare command */
161 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
162 MC_CMD_PRI_LOW, token);
163 DPRC_CMD_GET_RES_COUNT(cmd, type);
165 /* send command to mc*/
166 err = mc_send_command(mc_io, &cmd);
170 /* retrieve response parameters */
171 DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
176 int dprc_get_res_ids(struct fsl_mc_io *mc_io,
179 struct dprc_res_ids_range_desc *range_desc)
181 struct mc_command cmd = { 0 };
184 /* prepare command */
185 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
186 MC_CMD_PRI_LOW, token);
187 DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
189 /* send command to mc*/
190 err = mc_send_command(mc_io, &cmd);
194 /* retrieve response parameters */
195 DPRC_RSP_GET_RES_IDS(cmd, range_desc);
200 int dprc_get_obj_region(struct fsl_mc_io *mc_io,
204 uint8_t region_index,
205 struct dprc_region_desc *region_desc)
207 struct mc_command cmd = { 0 };
210 /* prepare command */
211 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
212 MC_CMD_PRI_LOW, token);
213 DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
215 /* send command to mc*/
216 err = mc_send_command(mc_io, &cmd);
220 /* retrieve response parameters */
221 DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
226 int dprc_connect(struct fsl_mc_io *mc_io,
228 const struct dprc_endpoint *endpoint1,
229 const struct dprc_endpoint *endpoint2)
231 struct mc_command cmd = { 0 };
233 /* prepare command */
234 cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
237 DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2);
239 /* send command to mc*/
240 return mc_send_command(mc_io, &cmd);
243 int dprc_disconnect(struct fsl_mc_io *mc_io,
245 const struct dprc_endpoint *endpoint)
247 struct mc_command cmd = { 0 };
249 /* prepare command */
250 cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
253 DPRC_CMD_DISCONNECT(cmd, endpoint);
255 /* send command to mc*/
256 return mc_send_command(mc_io, &cmd);
259 int dprc_get_connection(struct fsl_mc_io *mc_io,
261 const struct dprc_endpoint *endpoint1,
262 struct dprc_endpoint *endpoint2,
265 struct mc_command cmd = { 0 };
268 /* prepare command */
269 cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
272 DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
274 /* send command to mc*/
275 err = mc_send_command(mc_io, &cmd);
279 /* retrieve response parameters */
280 DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);