xref: /rk3399_rockchip-uboot/drivers/net/fsl-mc/dprc.c (revision 1670c8c219f6e47de624b4ed557b5a995265cd40)
1a2a55e51SPrabhakar Kushwaha /*
2a2a55e51SPrabhakar Kushwaha  * Freescale Layerscape MC I/O wrapper
3a2a55e51SPrabhakar Kushwaha  *
4a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor, Inc.
5a2a55e51SPrabhakar Kushwaha  * Author: German Rivera <German.Rivera@freescale.com>
6a2a55e51SPrabhakar Kushwaha  *
7a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
8a2a55e51SPrabhakar Kushwaha  */
9a2a55e51SPrabhakar Kushwaha 
10a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
11a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
12a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dprc.h>
13a2a55e51SPrabhakar Kushwaha 
dprc_get_container_id(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int * container_id)1487457d11SPrabhakar Kushwaha int dprc_get_container_id(struct fsl_mc_io *mc_io,
1587457d11SPrabhakar Kushwaha 			  uint32_t cmd_flags,
1687457d11SPrabhakar Kushwaha 			  int *container_id)
17a2a55e51SPrabhakar Kushwaha {
18a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
19a2a55e51SPrabhakar Kushwaha 	int err;
20a2a55e51SPrabhakar Kushwaha 
21a2a55e51SPrabhakar Kushwaha 	/* prepare command */
22a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONT_ID,
2387457d11SPrabhakar Kushwaha 					  cmd_flags,
2487457d11SPrabhakar Kushwaha 					  0);
25a2a55e51SPrabhakar Kushwaha 
26a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
27a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
28a2a55e51SPrabhakar Kushwaha 	if (err)
29a2a55e51SPrabhakar Kushwaha 		return err;
30a2a55e51SPrabhakar Kushwaha 
31a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
32a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_CONTAINER_ID(cmd, *container_id);
33a2a55e51SPrabhakar Kushwaha 
34a2a55e51SPrabhakar Kushwaha 	return 0;
35a2a55e51SPrabhakar Kushwaha }
36a2a55e51SPrabhakar Kushwaha 
dprc_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int container_id,uint16_t * token)3787457d11SPrabhakar Kushwaha int dprc_open(struct fsl_mc_io *mc_io,
3887457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
3987457d11SPrabhakar Kushwaha 	      int container_id,
4087457d11SPrabhakar Kushwaha 	      uint16_t *token)
41a2a55e51SPrabhakar Kushwaha {
42a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
43a2a55e51SPrabhakar Kushwaha 	int err;
44a2a55e51SPrabhakar Kushwaha 
45a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4687457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_OPEN, cmd_flags,
47a2a55e51SPrabhakar Kushwaha 					  0);
48a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_OPEN(cmd, container_id);
49a2a55e51SPrabhakar Kushwaha 
50a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
51a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
52a2a55e51SPrabhakar Kushwaha 	if (err)
53a2a55e51SPrabhakar Kushwaha 		return err;
54a2a55e51SPrabhakar Kushwaha 
55a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
56a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
57a2a55e51SPrabhakar Kushwaha 
58a2a55e51SPrabhakar Kushwaha 	return 0;
59a2a55e51SPrabhakar Kushwaha }
60a2a55e51SPrabhakar Kushwaha 
dprc_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)6187457d11SPrabhakar Kushwaha int dprc_close(struct fsl_mc_io *mc_io,
6287457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
6387457d11SPrabhakar Kushwaha 	       uint16_t token)
64a2a55e51SPrabhakar Kushwaha {
65a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
66a2a55e51SPrabhakar Kushwaha 
67a2a55e51SPrabhakar Kushwaha 	/* prepare command */
6887457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CLOSE, cmd_flags,
69a2a55e51SPrabhakar Kushwaha 					  token);
70a2a55e51SPrabhakar Kushwaha 
71a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
72a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
73a2a55e51SPrabhakar Kushwaha }
74a2a55e51SPrabhakar 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)75*1ebbe4fcSPrabhakar Kushwaha int dprc_create_container(struct fsl_mc_io *mc_io,
76*1ebbe4fcSPrabhakar Kushwaha 			  uint32_t cmd_flags,
77*1ebbe4fcSPrabhakar Kushwaha 			  uint16_t token,
78*1ebbe4fcSPrabhakar Kushwaha 			  struct dprc_cfg *cfg,
79*1ebbe4fcSPrabhakar Kushwaha 			  int *child_container_id,
80*1ebbe4fcSPrabhakar Kushwaha 			  uint64_t *child_portal_paddr)
81*1ebbe4fcSPrabhakar Kushwaha {
82*1ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
83*1ebbe4fcSPrabhakar Kushwaha 	int err;
84*1ebbe4fcSPrabhakar Kushwaha 
85*1ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
86*1ebbe4fcSPrabhakar Kushwaha 	DPRC_CMD_CREATE_CONTAINER(cmd, cfg);
87*1ebbe4fcSPrabhakar Kushwaha 
88*1ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CREATE_CONT,
89*1ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
90*1ebbe4fcSPrabhakar Kushwaha 					  token);
91*1ebbe4fcSPrabhakar Kushwaha 
92*1ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
93*1ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
94*1ebbe4fcSPrabhakar Kushwaha 	if (err)
95*1ebbe4fcSPrabhakar Kushwaha 		return err;
96*1ebbe4fcSPrabhakar Kushwaha 
97*1ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
98*1ebbe4fcSPrabhakar Kushwaha 	DPRC_RSP_CREATE_CONTAINER(cmd, *child_container_id,
99*1ebbe4fcSPrabhakar Kushwaha 				  *child_portal_paddr);
100*1ebbe4fcSPrabhakar Kushwaha 
101*1ebbe4fcSPrabhakar Kushwaha 	return 0;
102*1ebbe4fcSPrabhakar Kushwaha }
103*1ebbe4fcSPrabhakar Kushwaha 
dprc_destroy_container(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int child_container_id)104*1ebbe4fcSPrabhakar Kushwaha int dprc_destroy_container(struct fsl_mc_io *mc_io,
105*1ebbe4fcSPrabhakar Kushwaha 			   uint32_t cmd_flags,
106*1ebbe4fcSPrabhakar Kushwaha 			   uint16_t token,
107*1ebbe4fcSPrabhakar Kushwaha 			   int child_container_id)
108*1ebbe4fcSPrabhakar Kushwaha {
109*1ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
110*1ebbe4fcSPrabhakar Kushwaha 
111*1ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
112*1ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_DESTROY_CONT,
113*1ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
114*1ebbe4fcSPrabhakar Kushwaha 					  token);
115*1ebbe4fcSPrabhakar Kushwaha 	DPRC_CMD_DESTROY_CONTAINER(cmd, child_container_id);
116*1ebbe4fcSPrabhakar Kushwaha 
117*1ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
118*1ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
119*1ebbe4fcSPrabhakar Kushwaha }
120*1ebbe4fcSPrabhakar Kushwaha 
dprc_reset_container(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int child_container_id)121a2a55e51SPrabhakar Kushwaha int dprc_reset_container(struct fsl_mc_io *mc_io,
12287457d11SPrabhakar Kushwaha 			 uint32_t cmd_flags,
123a2a55e51SPrabhakar Kushwaha 			 uint16_t token,
124a2a55e51SPrabhakar Kushwaha 			 int child_container_id)
125a2a55e51SPrabhakar Kushwaha {
126a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
127a2a55e51SPrabhakar Kushwaha 
128a2a55e51SPrabhakar Kushwaha 	/* prepare command */
129a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_RESET_CONT,
13087457d11SPrabhakar Kushwaha 					  cmd_flags,
13187457d11SPrabhakar Kushwaha 					  token);
132a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_RESET_CONTAINER(cmd, child_container_id);
133a2a55e51SPrabhakar Kushwaha 
134a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
135a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
136a2a55e51SPrabhakar Kushwaha }
137a2a55e51SPrabhakar Kushwaha 
dprc_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dprc_attributes * attr)138a2a55e51SPrabhakar Kushwaha int dprc_get_attributes(struct fsl_mc_io *mc_io,
13987457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
140a2a55e51SPrabhakar Kushwaha 			uint16_t token,
141a2a55e51SPrabhakar Kushwaha 			struct dprc_attributes *attr)
142a2a55e51SPrabhakar Kushwaha {
143a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
144a2a55e51SPrabhakar Kushwaha 	int err;
145a2a55e51SPrabhakar Kushwaha 
146a2a55e51SPrabhakar Kushwaha 	/* prepare command */
147a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_ATTR,
14887457d11SPrabhakar Kushwaha 					  cmd_flags,
149a2a55e51SPrabhakar Kushwaha 					  token);
150a2a55e51SPrabhakar Kushwaha 
151a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
152a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
153a2a55e51SPrabhakar Kushwaha 	if (err)
154a2a55e51SPrabhakar Kushwaha 		return err;
155a2a55e51SPrabhakar Kushwaha 
156a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
157a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_ATTRIBUTES(cmd, attr);
158a2a55e51SPrabhakar Kushwaha 
159a2a55e51SPrabhakar Kushwaha 	return 0;
160a2a55e51SPrabhakar Kushwaha }
161a2a55e51SPrabhakar Kushwaha 
dprc_get_obj_count(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,int * obj_count)16287457d11SPrabhakar Kushwaha int dprc_get_obj_count(struct fsl_mc_io *mc_io,
16387457d11SPrabhakar Kushwaha 		       uint32_t cmd_flags,
16487457d11SPrabhakar Kushwaha 		       uint16_t token,
16587457d11SPrabhakar Kushwaha 		       int *obj_count)
166a2a55e51SPrabhakar Kushwaha {
167a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
168a2a55e51SPrabhakar Kushwaha 	int err;
169a2a55e51SPrabhakar Kushwaha 
170a2a55e51SPrabhakar Kushwaha 	/* prepare command */
171a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_COUNT,
17287457d11SPrabhakar Kushwaha 					  cmd_flags,
17387457d11SPrabhakar Kushwaha 					  token);
174a2a55e51SPrabhakar Kushwaha 
175a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
176a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
177a2a55e51SPrabhakar Kushwaha 	if (err)
178a2a55e51SPrabhakar Kushwaha 		return err;
179a2a55e51SPrabhakar Kushwaha 
180a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
181a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ_COUNT(cmd, *obj_count);
182a2a55e51SPrabhakar Kushwaha 
183a2a55e51SPrabhakar Kushwaha 	return 0;
184a2a55e51SPrabhakar Kushwaha }
185a2a55e51SPrabhakar 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)186a2a55e51SPrabhakar Kushwaha int dprc_get_obj(struct fsl_mc_io *mc_io,
18787457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
188a2a55e51SPrabhakar Kushwaha 		 uint16_t token,
189a2a55e51SPrabhakar Kushwaha 		 int obj_index,
190a2a55e51SPrabhakar Kushwaha 		 struct dprc_obj_desc *obj_desc)
191a2a55e51SPrabhakar Kushwaha {
192a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
193a2a55e51SPrabhakar Kushwaha 	int err;
194a2a55e51SPrabhakar Kushwaha 
195a2a55e51SPrabhakar Kushwaha 	/* prepare command */
196a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ,
19787457d11SPrabhakar Kushwaha 					  cmd_flags,
198a2a55e51SPrabhakar Kushwaha 					  token);
199a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_OBJ(cmd, obj_index);
200a2a55e51SPrabhakar Kushwaha 
201a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
202a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
203a2a55e51SPrabhakar Kushwaha 	if (err)
204a2a55e51SPrabhakar Kushwaha 		return err;
205a2a55e51SPrabhakar Kushwaha 
206a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
207a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ(cmd, obj_desc);
208a2a55e51SPrabhakar Kushwaha 
209a2a55e51SPrabhakar Kushwaha 	return 0;
210a2a55e51SPrabhakar Kushwaha }
211a2a55e51SPrabhakar Kushwaha 
dprc_get_res_count(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,char * type,int * res_count)212a2a55e51SPrabhakar Kushwaha int dprc_get_res_count(struct fsl_mc_io *mc_io,
21387457d11SPrabhakar Kushwaha 		       uint32_t cmd_flags,
214a2a55e51SPrabhakar Kushwaha 		       uint16_t token,
215a2a55e51SPrabhakar Kushwaha 		       char *type,
216a2a55e51SPrabhakar Kushwaha 		       int *res_count)
217a2a55e51SPrabhakar Kushwaha {
218a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
219a2a55e51SPrabhakar Kushwaha 	int err;
220a2a55e51SPrabhakar Kushwaha 
221a2a55e51SPrabhakar Kushwaha 	*res_count = 0;
222a2a55e51SPrabhakar Kushwaha 
223a2a55e51SPrabhakar Kushwaha 	/* prepare command */
224a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_COUNT,
22587457d11SPrabhakar Kushwaha 					  cmd_flags,
22687457d11SPrabhakar Kushwaha 					  token);
227a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_RES_COUNT(cmd, type);
228a2a55e51SPrabhakar Kushwaha 
229a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
230a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
231a2a55e51SPrabhakar Kushwaha 	if (err)
232a2a55e51SPrabhakar Kushwaha 		return err;
233a2a55e51SPrabhakar Kushwaha 
234a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
235a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_RES_COUNT(cmd, *res_count);
236a2a55e51SPrabhakar Kushwaha 
237a2a55e51SPrabhakar Kushwaha 	return 0;
238a2a55e51SPrabhakar Kushwaha }
239a2a55e51SPrabhakar 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)240a2a55e51SPrabhakar Kushwaha int dprc_get_res_ids(struct fsl_mc_io *mc_io,
24187457d11SPrabhakar Kushwaha 		     uint32_t cmd_flags,
242a2a55e51SPrabhakar Kushwaha 		     uint16_t token,
243a2a55e51SPrabhakar Kushwaha 		     char *type,
244a2a55e51SPrabhakar Kushwaha 		     struct dprc_res_ids_range_desc *range_desc)
245a2a55e51SPrabhakar Kushwaha {
246a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
247a2a55e51SPrabhakar Kushwaha 	int err;
248a2a55e51SPrabhakar Kushwaha 
249a2a55e51SPrabhakar Kushwaha 	/* prepare command */
250a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_RES_IDS,
25187457d11SPrabhakar Kushwaha 					  cmd_flags,
25287457d11SPrabhakar Kushwaha 					  token);
253a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_RES_IDS(cmd, range_desc, type);
254a2a55e51SPrabhakar Kushwaha 
255a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
256a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
257a2a55e51SPrabhakar Kushwaha 	if (err)
258a2a55e51SPrabhakar Kushwaha 		return err;
259a2a55e51SPrabhakar Kushwaha 
260a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
261a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_RES_IDS(cmd, range_desc);
262a2a55e51SPrabhakar Kushwaha 
263a2a55e51SPrabhakar Kushwaha 	return 0;
264a2a55e51SPrabhakar Kushwaha }
265a2a55e51SPrabhakar 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)266a2a55e51SPrabhakar Kushwaha int dprc_get_obj_region(struct fsl_mc_io *mc_io,
26787457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
268a2a55e51SPrabhakar Kushwaha 			uint16_t token,
269a2a55e51SPrabhakar Kushwaha 			char *obj_type,
270a2a55e51SPrabhakar Kushwaha 			int obj_id,
271a2a55e51SPrabhakar Kushwaha 			uint8_t region_index,
272a2a55e51SPrabhakar Kushwaha 			struct dprc_region_desc *region_desc)
273a2a55e51SPrabhakar Kushwaha {
274a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
275a2a55e51SPrabhakar Kushwaha 	int err;
276a2a55e51SPrabhakar Kushwaha 
277a2a55e51SPrabhakar Kushwaha 	/* prepare command */
278a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_OBJ_REG,
27987457d11SPrabhakar Kushwaha 					  cmd_flags,
28087457d11SPrabhakar Kushwaha 					  token);
281a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_OBJ_REGION(cmd, obj_type, obj_id, region_index);
282a2a55e51SPrabhakar Kushwaha 
283a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
284a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
285a2a55e51SPrabhakar Kushwaha 	if (err)
286a2a55e51SPrabhakar Kushwaha 		return err;
287a2a55e51SPrabhakar Kushwaha 
288a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
289a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_OBJ_REGION(cmd, region_desc);
290a2a55e51SPrabhakar Kushwaha 
291a2a55e51SPrabhakar Kushwaha 	return 0;
292a2a55e51SPrabhakar Kushwaha }
293a2a55e51SPrabhakar 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)294a2a55e51SPrabhakar Kushwaha int dprc_connect(struct fsl_mc_io *mc_io,
29587457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
296a2a55e51SPrabhakar Kushwaha 		 uint16_t token,
297a2a55e51SPrabhakar Kushwaha 		 const struct dprc_endpoint *endpoint1,
29887457d11SPrabhakar Kushwaha 		 const struct dprc_endpoint *endpoint2,
29987457d11SPrabhakar Kushwaha 		 const struct dprc_connection_cfg *cfg)
300a2a55e51SPrabhakar Kushwaha {
301a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
302a2a55e51SPrabhakar Kushwaha 
303a2a55e51SPrabhakar Kushwaha 	/* prepare command */
304a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_CONNECT,
30587457d11SPrabhakar Kushwaha 					  cmd_flags,
306a2a55e51SPrabhakar Kushwaha 					  token);
30787457d11SPrabhakar Kushwaha 	DPRC_CMD_CONNECT(cmd, endpoint1, endpoint2, cfg);
308a2a55e51SPrabhakar Kushwaha 
309a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
310a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
311a2a55e51SPrabhakar Kushwaha }
312a2a55e51SPrabhakar Kushwaha 
dprc_disconnect(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dprc_endpoint * endpoint)313a2a55e51SPrabhakar Kushwaha int dprc_disconnect(struct fsl_mc_io *mc_io,
31487457d11SPrabhakar Kushwaha 		    uint32_t cmd_flags,
315a2a55e51SPrabhakar Kushwaha 		    uint16_t token,
316a2a55e51SPrabhakar Kushwaha 		    const struct dprc_endpoint *endpoint)
317a2a55e51SPrabhakar Kushwaha {
318a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
319a2a55e51SPrabhakar Kushwaha 
320a2a55e51SPrabhakar Kushwaha 	/* prepare command */
321a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_DISCONNECT,
32287457d11SPrabhakar Kushwaha 					  cmd_flags,
323a2a55e51SPrabhakar Kushwaha 					  token);
324a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_DISCONNECT(cmd, endpoint);
325a2a55e51SPrabhakar Kushwaha 
326a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
327a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
328a2a55e51SPrabhakar Kushwaha }
329a2a55e51SPrabhakar 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)330a2a55e51SPrabhakar Kushwaha int dprc_get_connection(struct fsl_mc_io *mc_io,
33187457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
332a2a55e51SPrabhakar Kushwaha 			uint16_t token,
333a2a55e51SPrabhakar Kushwaha 			const struct dprc_endpoint *endpoint1,
334a2a55e51SPrabhakar Kushwaha 			struct dprc_endpoint *endpoint2,
335a2a55e51SPrabhakar Kushwaha 			int *state)
336a2a55e51SPrabhakar Kushwaha {
337a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
338a2a55e51SPrabhakar Kushwaha 	int err;
339a2a55e51SPrabhakar Kushwaha 
340a2a55e51SPrabhakar Kushwaha 	/* prepare command */
341a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPRC_CMDID_GET_CONNECTION,
34287457d11SPrabhakar Kushwaha 					  cmd_flags,
343a2a55e51SPrabhakar Kushwaha 					  token);
344a2a55e51SPrabhakar Kushwaha 	DPRC_CMD_GET_CONNECTION(cmd, endpoint1);
345a2a55e51SPrabhakar Kushwaha 
346a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
347a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
348a2a55e51SPrabhakar Kushwaha 	if (err)
349a2a55e51SPrabhakar Kushwaha 		return err;
350a2a55e51SPrabhakar Kushwaha 
351a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
352a2a55e51SPrabhakar Kushwaha 	DPRC_RSP_GET_CONNECTION(cmd, endpoint2, *state);
353a2a55e51SPrabhakar Kushwaha 
354a2a55e51SPrabhakar Kushwaha 	return 0;
355a2a55e51SPrabhakar Kushwaha }
356