xref: /openbmc/u-boot/drivers/net/fsl-mc/dprc.c (revision 9a66328a)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2a2a55e51SPrabhakar Kushwaha /*
3a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
4a2a55e51SPrabhakar Kushwaha  *
5*a6f2a6eaSYogesh Gaur  * Copyright 2013-2016 Freescale Semiconductor, Inc.
62557c5a9SYogesh Gaur  * Copyright 2017 NXP
7a2a55e51SPrabhakar Kushwaha  */
8a2a55e51SPrabhakar Kushwaha 
9a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
10a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
11a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dprc.h>
12a2a55e51SPrabhakar Kushwaha 
dprc_get_container_id(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int * container_id)1387457d11SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io,
1487457d11SPrabhakar Kushwaha 			  uint32_t cmd_flags,
1587457d11SPrabhakar Kushwaha 			  int *container_id)
16a2a55e51SPrabhakar Kushwaha {
17a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
18a2a55e51SPrabhakar Kushwaha 	int err;
19a2a55e51SPrabhakar Kushwaha 
20a2a55e51SPrabhakar Kushwaha 	/* prepare command */
21a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
2287457d11SPrabhakar Kushwaha 					  cmd_flags,
2387457d11SPrabhakar Kushwaha 					  0);
24a2a55e51SPrabhakar Kushwaha 
25a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
26a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
27a2a55e51SPrabhakar Kushwaha 	if (err)
28a2a55e51SPrabhakar Kushwaha 		return err;
29a2a55e51SPrabhakar Kushwaha 
30a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
31a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
32a2a55e51SPrabhakar Kushwaha 
33a2a55e51SPrabhakar Kushwaha 	return 0;
34a2a55e51SPrabhakar Kushwaha }
35a2a55e51SPrabhakar Kushwaha 
dprc_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int container_id,uint16_t * token)3687457d11SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io,
3787457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
3887457d11SPrabhakar Kushwaha 	      int container_id,
3987457d11SPrabhakar Kushwaha 	      uint16_t *token)
40a2a55e51SPrabhakar Kushwaha {
41a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
42a2a55e51SPrabhakar Kushwaha 	int err;
43a2a55e51SPrabhakar Kushwaha 
44a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4587457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
46a2a55e51SPrabhakar Kushwaha 					  0);
47a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_OPEN(cmd, container_id);
48a2a55e51SPrabhakar Kushwaha 
49a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
50a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
51a2a55e51SPrabhakar Kushwaha 	if (err)
52a2a55e51SPrabhakar Kushwaha 		return err;
53a2a55e51SPrabhakar Kushwaha 
54a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
55a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
56a2a55e51SPrabhakar Kushwaha 
57a2a55e51SPrabhakar Kushwaha 	return 0;
58a2a55e51SPrabhakar Kushwaha }
59a2a55e51SPrabhakar Kushwaha 
dprc_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)6087457d11SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io,
6187457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
6287457d11SPrabhakar Kushwaha 	       uint16_t token)
63a2a55e51SPrabhakar Kushwaha {
64a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
65a2a55e51SPrabhakar Kushwaha 
66a2a55e51SPrabhakar Kushwaha 	/* prepare command */
6787457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
68a2a55e51SPrabhakar Kushwaha 					  token);
69a2a55e51SPrabhakar Kushwaha 
70a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
71a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
72a2a55e51SPrabhakar Kushwaha }
73a2a55e51SPrabhakar Kushwaha 
dprc_create_container(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dprc_cfg * cfg,int * child_container_id,uint64_t * child_portal_paddr)741ebbe4fcSPrabhakar Kushwaha int dprc_create_container(struct fsl_mc_io *mc_io,
751ebbe4fcSPrabhakar Kushwaha 			  uint32_t cmd_flags,
761ebbe4fcSPrabhakar Kushwaha 			  uint16_t token,
771ebbe4fcSPrabhakar Kushwaha 			  struct dprc_cfg *cfg,
781ebbe4fcSPrabhakar Kushwaha 			  int *child_container_id,
791ebbe4fcSPrabhakar Kushwaha 			  uint64_t *child_portal_paddr)
801ebbe4fcSPrabhakar Kushwaha {
811ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
821ebbe4fcSPrabhakar Kushwaha 	int err;
831ebbe4fcSPrabhakar Kushwaha 
841ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
851ebbe4fcSPrabhakar Kushwaha 	DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
861ebbe4fcSPrabhakar Kushwaha 
871ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
881ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
891ebbe4fcSPrabhakar Kushwaha 					  token);
901ebbe4fcSPrabhakar Kushwaha 
911ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
921ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
931ebbe4fcSPrabhakar Kushwaha 	if (err)
941ebbe4fcSPrabhakar Kushwaha 		return err;
951ebbe4fcSPrabhakar Kushwaha 
961ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
971ebbe4fcSPrabhakar Kushwaha 	DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
981ebbe4fcSPrabhakar Kushwaha 				  *child_portal_paddr);
991ebbe4fcSPrabhakar Kushwaha 
1001ebbe4fcSPrabhakar Kushwaha 	return 0;
1011ebbe4fcSPrabhakar Kushwaha }
1021ebbe4fcSPrabhakar Kushwaha 
dprc_destroy_container(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int child_container_id)1031ebbe4fcSPrabhakar Kushwaha int dprc_destroy_container(struct fsl_mc_io *mc_io,
1041ebbe4fcSPrabhakar Kushwaha 			   uint32_t cmd_flags,
1051ebbe4fcSPrabhakar Kushwaha 			   uint16_t token,
1061ebbe4fcSPrabhakar Kushwaha 			   int child_container_id)
1071ebbe4fcSPrabhakar Kushwaha {
1081ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
1091ebbe4fcSPrabhakar Kushwaha 
1101ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
1111ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
1121ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
1131ebbe4fcSPrabhakar Kushwaha 					  token);
1141ebbe4fcSPrabhakar Kushwaha 	DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
1151ebbe4fcSPrabhakar Kushwaha 
1161ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
1171ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
1181ebbe4fcSPrabhakar Kushwaha }
1191ebbe4fcSPrabhakar Kushwaha 
dprc_reset_container(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int child_container_id)120a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io,
12187457d11SPrabhakar Kushwaha 			 uint32_t cmd_flags,
122a2a55e51SPrabhakar Kushwaha 			 uint16_t token,
123a2a55e51SPrabhakar Kushwaha 			 int child_container_id)
124a2a55e51SPrabhakar Kushwaha {
125a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
126a2a55e51SPrabhakar Kushwaha 
127a2a55e51SPrabhakar Kushwaha 	/* prepare command */
128a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
12987457d11SPrabhakar Kushwaha 					  cmd_flags,
13087457d11SPrabhakar Kushwaha 					  token);
131a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
132a2a55e51SPrabhakar Kushwaha 
133a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
134a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
135a2a55e51SPrabhakar Kushwaha }
136a2a55e51SPrabhakar Kushwaha 
dprc_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dprc_attributes * attr)137a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io,
13887457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
139a2a55e51SPrabhakar Kushwaha 			uint16_t token,
140a2a55e51SPrabhakar Kushwaha 			struct dprc_attributes *attr)
141a2a55e51SPrabhakar Kushwaha {
142a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
143a2a55e51SPrabhakar Kushwaha 	int err;
144a2a55e51SPrabhakar Kushwaha 
145a2a55e51SPrabhakar Kushwaha 	/* prepare command */
146a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
14787457d11SPrabhakar Kushwaha 					  cmd_flags,
148a2a55e51SPrabhakar Kushwaha 					  token);
149a2a55e51SPrabhakar Kushwaha 
150a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
151a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
152a2a55e51SPrabhakar Kushwaha 	if (err)
153a2a55e51SPrabhakar Kushwaha 		return err;
154a2a55e51SPrabhakar Kushwaha 
155a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
156a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
157a2a55e51SPrabhakar Kushwaha 
158a2a55e51SPrabhakar Kushwaha 	return 0;
159a2a55e51SPrabhakar Kushwaha }
160a2a55e51SPrabhakar Kushwaha 
dprc_get_obj_count(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int * obj_count)16187457d11SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io,
16287457d11SPrabhakar Kushwaha 		       uint32_t cmd_flags,
16387457d11SPrabhakar Kushwaha 		       uint16_t token,
16487457d11SPrabhakar Kushwaha 		       int *obj_count)
165a2a55e51SPrabhakar Kushwaha {
166a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
167a2a55e51SPrabhakar Kushwaha 	int err;
168a2a55e51SPrabhakar Kushwaha 
169a2a55e51SPrabhakar Kushwaha 	/* prepare command */
170a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
17187457d11SPrabhakar Kushwaha 					  cmd_flags,
17287457d11SPrabhakar Kushwaha 					  token);
173a2a55e51SPrabhakar Kushwaha 
174a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
175a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
176a2a55e51SPrabhakar Kushwaha 	if (err)
177a2a55e51SPrabhakar Kushwaha 		return err;
178a2a55e51SPrabhakar Kushwaha 
179a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
180a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
181a2a55e51SPrabhakar Kushwaha 
182a2a55e51SPrabhakar Kushwaha 	return 0;
183a2a55e51SPrabhakar Kushwaha }
184a2a55e51SPrabhakar Kushwaha 
dprc_get_obj(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int obj_index,struct dprc_obj_desc * obj_desc)185a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io,
18687457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
187a2a55e51SPrabhakar Kushwaha 		 uint16_t token,
188a2a55e51SPrabhakar Kushwaha 		 int obj_index,
189a2a55e51SPrabhakar Kushwaha 		 struct dprc_obj_desc *obj_desc)
190a2a55e51SPrabhakar Kushwaha {
191a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
192a2a55e51SPrabhakar Kushwaha 	int err;
193a2a55e51SPrabhakar Kushwaha 
194a2a55e51SPrabhakar Kushwaha 	/* prepare command */
195a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
19687457d11SPrabhakar Kushwaha 					  cmd_flags,
197a2a55e51SPrabhakar Kushwaha 					  token);
198a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_OBJ(cmd, obj_index);
199a2a55e51SPrabhakar Kushwaha 
200a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
201a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
202a2a55e51SPrabhakar Kushwaha 	if (err)
203a2a55e51SPrabhakar Kushwaha 		return err;
204a2a55e51SPrabhakar Kushwaha 
205a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
206a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ(cmd, obj_desc);
207a2a55e51SPrabhakar Kushwaha 
208a2a55e51SPrabhakar Kushwaha 	return 0;
209a2a55e51SPrabhakar Kushwaha }
210a2a55e51SPrabhakar Kushwaha 
dprc_get_res_count(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,char * type,int * res_count)211a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io,
21287457d11SPrabhakar Kushwaha 		       uint32_t cmd_flags,
213a2a55e51SPrabhakar Kushwaha 		       uint16_t token,
214a2a55e51SPrabhakar Kushwaha 		       char *type,
215a2a55e51SPrabhakar Kushwaha 		       int *res_count)
216a2a55e51SPrabhakar Kushwaha {
217a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
218a2a55e51SPrabhakar Kushwaha 	int err;
219a2a55e51SPrabhakar Kushwaha 
220a2a55e51SPrabhakar Kushwaha 	*res_count = 0;
221a2a55e51SPrabhakar Kushwaha 
222a2a55e51SPrabhakar Kushwaha 	/* prepare command */
223a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
22487457d11SPrabhakar Kushwaha 					  cmd_flags,
22587457d11SPrabhakar Kushwaha 					  token);
226a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_RES_COUNT(cmd, type);
227a2a55e51SPrabhakar Kushwaha 
228a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
229a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
230a2a55e51SPrabhakar Kushwaha 	if (err)
231a2a55e51SPrabhakar Kushwaha 		return err;
232a2a55e51SPrabhakar Kushwaha 
233a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
234a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
235a2a55e51SPrabhakar Kushwaha 
236a2a55e51SPrabhakar Kushwaha 	return 0;
237a2a55e51SPrabhakar Kushwaha }
238a2a55e51SPrabhakar Kushwaha 
dprc_get_res_ids(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,char * type,struct dprc_res_ids_range_desc * range_desc)239a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io,
24087457d11SPrabhakar Kushwaha 		     uint32_t cmd_flags,
241a2a55e51SPrabhakar Kushwaha 		     uint16_t token,
242a2a55e51SPrabhakar Kushwaha 		     char *type,
243a2a55e51SPrabhakar Kushwaha 		     struct dprc_res_ids_range_desc *range_desc)
244a2a55e51SPrabhakar Kushwaha {
245a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
246a2a55e51SPrabhakar Kushwaha 	int err;
247a2a55e51SPrabhakar Kushwaha 
248a2a55e51SPrabhakar Kushwaha 	/* prepare command */
249a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
25087457d11SPrabhakar Kushwaha 					  cmd_flags,
25187457d11SPrabhakar Kushwaha 					  token);
252a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
253a2a55e51SPrabhakar Kushwaha 
254a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
255a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
256a2a55e51SPrabhakar Kushwaha 	if (err)
257a2a55e51SPrabhakar Kushwaha 		return err;
258a2a55e51SPrabhakar Kushwaha 
259a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
260a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_RES_IDS(cmd, range_desc);
261a2a55e51SPrabhakar Kushwaha 
262a2a55e51SPrabhakar Kushwaha 	return 0;
263a2a55e51SPrabhakar Kushwaha }
264a2a55e51SPrabhakar Kushwaha 
dprc_get_obj_region(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,char * obj_type,int obj_id,uint8_t region_index,struct dprc_region_desc * region_desc)265a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io,
26687457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
267a2a55e51SPrabhakar Kushwaha 			uint16_t token,
268a2a55e51SPrabhakar Kushwaha 			char *obj_type,
269a2a55e51SPrabhakar Kushwaha 			int obj_id,
270a2a55e51SPrabhakar Kushwaha 			uint8_t region_index,
271a2a55e51SPrabhakar Kushwaha 			struct dprc_region_desc *region_desc)
272a2a55e51SPrabhakar Kushwaha {
273a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
274a2a55e51SPrabhakar Kushwaha 	int err;
275a2a55e51SPrabhakar Kushwaha 
276a2a55e51SPrabhakar Kushwaha 	/* prepare command */
277a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
27887457d11SPrabhakar Kushwaha 					  cmd_flags,
27987457d11SPrabhakar Kushwaha 					  token);
280a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
281a2a55e51SPrabhakar Kushwaha 
282a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
283a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
284a2a55e51SPrabhakar Kushwaha 	if (err)
285a2a55e51SPrabhakar Kushwaha 		return err;
286a2a55e51SPrabhakar Kushwaha 
287a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
288a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
289a2a55e51SPrabhakar Kushwaha 
290a2a55e51SPrabhakar Kushwaha 	return 0;
291a2a55e51SPrabhakar Kushwaha }
292a2a55e51SPrabhakar Kushwaha 
dprc_connect(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dprc_endpoint * endpoint1,const struct dprc_endpoint * endpoint2,const struct dprc_connection_cfg * cfg)293a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io,
29487457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
295a2a55e51SPrabhakar Kushwaha 		 uint16_t token,
296a2a55e51SPrabhakar Kushwaha 		 const struct dprc_endpoint *endpoint1,
29787457d11SPrabhakar Kushwaha 		 const struct dprc_endpoint *endpoint2,
29887457d11SPrabhakar Kushwaha 		 const struct dprc_connection_cfg *cfg)
299a2a55e51SPrabhakar Kushwaha {
300a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
301a2a55e51SPrabhakar Kushwaha 
302a2a55e51SPrabhakar Kushwaha 	/* prepare command */
303a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
30487457d11SPrabhakar Kushwaha 					  cmd_flags,
305a2a55e51SPrabhakar Kushwaha 					  token);
30687457d11SPrabhakar Kushwaha 	DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
307a2a55e51SPrabhakar Kushwaha 
308a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
309a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
310a2a55e51SPrabhakar Kushwaha }
311a2a55e51SPrabhakar Kushwaha 
dprc_disconnect(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dprc_endpoint * endpoint)312a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io,
31387457d11SPrabhakar Kushwaha 		    uint32_t cmd_flags,
314a2a55e51SPrabhakar Kushwaha 		    uint16_t token,
315a2a55e51SPrabhakar Kushwaha 		    const struct dprc_endpoint *endpoint)
316a2a55e51SPrabhakar Kushwaha {
317a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
318a2a55e51SPrabhakar Kushwaha 
319a2a55e51SPrabhakar Kushwaha 	/* prepare command */
320a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
32187457d11SPrabhakar Kushwaha 					  cmd_flags,
322a2a55e51SPrabhakar Kushwaha 					  token);
323a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_DISCONNECT(cmd, endpoint);
324a2a55e51SPrabhakar Kushwaha 
325a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
326a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
327a2a55e51SPrabhakar Kushwaha }
328a2a55e51SPrabhakar Kushwaha 
dprc_get_connection(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dprc_endpoint * endpoint1,struct dprc_endpoint * endpoint2,int * state)329a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io,
33087457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
331a2a55e51SPrabhakar Kushwaha 			uint16_t token,
332a2a55e51SPrabhakar Kushwaha 			const struct dprc_endpoint *endpoint1,
333a2a55e51SPrabhakar Kushwaha 			struct dprc_endpoint *endpoint2,
334a2a55e51SPrabhakar Kushwaha 			int *state)
335a2a55e51SPrabhakar Kushwaha {
336a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
337a2a55e51SPrabhakar Kushwaha 	int err;
338a2a55e51SPrabhakar Kushwaha 
339a2a55e51SPrabhakar Kushwaha 	/* prepare command */
340a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
34187457d11SPrabhakar Kushwaha 					  cmd_flags,
342a2a55e51SPrabhakar Kushwaha 					  token);
343a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
344a2a55e51SPrabhakar Kushwaha 
345a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
346a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
347a2a55e51SPrabhakar Kushwaha 	if (err)
348a2a55e51SPrabhakar Kushwaha 		return err;
349a2a55e51SPrabhakar Kushwaha 
350a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
351a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
352a2a55e51SPrabhakar Kushwaha 
353a2a55e51SPrabhakar Kushwaha 	return 0;
354a2a55e51SPrabhakar Kushwaha }
3552557c5a9SYogesh Gaur 
dprc_get_api_version(struct fsl_mc_io * mc_io,u32 cmd_flags,u16 * major_ver,u16 * minor_ver)3562557c5a9SYogesh Gaur int dprc_get_api_version(struct fsl_mc_io *mc_io,
3572557c5a9SYogesh Gaur 			 u32 cmd_flags,
3582557c5a9SYogesh Gaur 			 u16 *major_ver,
3592557c5a9SYogesh Gaur 			 u16 *minor_ver)
3602557c5a9SYogesh Gaur {
3612557c5a9SYogesh Gaur 	struct mc_command cmd = { 0 };
3622557c5a9SYogesh Gaur 	int err;
3632557c5a9SYogesh Gaur 
3642557c5a9SYogesh Gaur 	/* prepare command */
3652557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_API_VERSION,
3662557c5a9SYogesh Gaur 					  cmd_flags, 0);
3672557c5a9SYogesh Gaur 
3682557c5a9SYogesh Gaur 	/* send command to mc */
3692557c5a9SYogesh Gaur 	err = mc_send_command(mc_io, &cmd);
3702557c5a9SYogesh Gaur 	if (err)
3712557c5a9SYogesh Gaur 		return err;
3722557c5a9SYogesh Gaur 
3732557c5a9SYogesh Gaur 	/* retrieve response parameters */
3742557c5a9SYogesh Gaur 	mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
3752557c5a9SYogesh Gaur 
3762557c5a9SYogesh Gaur 	return 0;
3772557c5a9SYogesh Gaur }
378