xref: /openbmc/u-boot/drivers/net/fsl-mc/dpni.c (revision c590e62d3b6f6dd72eae1183614f919e3fd7ffcb)
183d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
2a2a55e51SPrabhakar Kushwaha /*
3*a6f2a6eaSYogesh Gaur  * Copyright 2013-2016 Freescale Semiconductor, Inc.
42557c5a9SYogesh Gaur  * Copyright 2017 NXP
5a2a55e51SPrabhakar Kushwaha  */
6a2a55e51SPrabhakar Kushwaha 
7a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_sys.h>
8a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_mc_cmd.h>
9a2a55e51SPrabhakar Kushwaha #include <fsl-mc/fsl_dpni.h>
10a2a55e51SPrabhakar Kushwaha 
dpni_prepare_cfg(const struct dpni_cfg * cfg,uint8_t * cfg_buf)112557c5a9SYogesh Gaur int dpni_prepare_cfg(const struct dpni_cfg	*cfg,
122557c5a9SYogesh Gaur 		     uint8_t			*cfg_buf)
1353e353fcSPrabhakar Kushwaha {
142557c5a9SYogesh Gaur 	uint64_t *params = (uint64_t *)cfg_buf;
1553e353fcSPrabhakar Kushwaha 
162557c5a9SYogesh Gaur 	DPNI_PREP_CFG(params, cfg);
1753e353fcSPrabhakar Kushwaha 
1853e353fcSPrabhakar Kushwaha 	return 0;
1953e353fcSPrabhakar Kushwaha }
2053e353fcSPrabhakar Kushwaha 
dpni_extract_cfg(struct dpni_cfg * cfg,const uint8_t * cfg_buf)212557c5a9SYogesh Gaur int dpni_extract_cfg(struct dpni_cfg	*cfg,
222557c5a9SYogesh Gaur 		     const uint8_t	*cfg_buf)
2353e353fcSPrabhakar Kushwaha {
242557c5a9SYogesh Gaur 	uint64_t *params = (uint64_t *)cfg_buf;
2553e353fcSPrabhakar Kushwaha 
262557c5a9SYogesh Gaur 	DPNI_EXT_CFG(params, cfg);
2753e353fcSPrabhakar Kushwaha 
2853e353fcSPrabhakar Kushwaha 	return 0;
2953e353fcSPrabhakar Kushwaha }
3053e353fcSPrabhakar Kushwaha 
dpni_open(struct fsl_mc_io * mc_io,uint32_t cmd_flags,int dpni_id,uint16_t * token)3187457d11SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io *mc_io,
3287457d11SPrabhakar Kushwaha 	      uint32_t cmd_flags,
3387457d11SPrabhakar Kushwaha 	      int dpni_id,
3487457d11SPrabhakar Kushwaha 	      uint16_t *token)
35a2a55e51SPrabhakar Kushwaha {
36a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
37a2a55e51SPrabhakar Kushwaha 	int err;
38a2a55e51SPrabhakar Kushwaha 
39a2a55e51SPrabhakar Kushwaha 	/* prepare command */
40a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_OPEN,
4187457d11SPrabhakar Kushwaha 					  cmd_flags,
4287457d11SPrabhakar Kushwaha 					  0);
43a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_OPEN(cmd, dpni_id);
44a2a55e51SPrabhakar Kushwaha 
45a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
46a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
47a2a55e51SPrabhakar Kushwaha 	if (err)
48a2a55e51SPrabhakar Kushwaha 		return err;
49a2a55e51SPrabhakar Kushwaha 
50a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
51a2a55e51SPrabhakar Kushwaha 	*token = MC_CMD_HDR_READ_TOKEN(cmd.header);
52a2a55e51SPrabhakar Kushwaha 
53a2a55e51SPrabhakar Kushwaha 	return 0;
54a2a55e51SPrabhakar Kushwaha }
55a2a55e51SPrabhakar Kushwaha 
dpni_close(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)5687457d11SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io *mc_io,
5787457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
5887457d11SPrabhakar Kushwaha 	       uint16_t token)
59a2a55e51SPrabhakar Kushwaha {
60a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
61a2a55e51SPrabhakar Kushwaha 
62a2a55e51SPrabhakar Kushwaha 	/* prepare command */
63a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_CLOSE,
6487457d11SPrabhakar Kushwaha 					  cmd_flags,
6587457d11SPrabhakar Kushwaha 					  token);
66a2a55e51SPrabhakar Kushwaha 
67a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
68a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
69a2a55e51SPrabhakar Kushwaha }
70a2a55e51SPrabhakar Kushwaha 
dpni_create(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,const struct dpni_cfg * cfg,uint32_t * obj_id)711ebbe4fcSPrabhakar Kushwaha int dpni_create(struct fsl_mc_io *mc_io,
722557c5a9SYogesh Gaur 		uint16_t dprc_token,
731ebbe4fcSPrabhakar Kushwaha 		uint32_t cmd_flags,
741ebbe4fcSPrabhakar Kushwaha 		const struct dpni_cfg *cfg,
752557c5a9SYogesh Gaur 		uint32_t *obj_id)
761ebbe4fcSPrabhakar Kushwaha {
771ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
781ebbe4fcSPrabhakar Kushwaha 	int err;
791ebbe4fcSPrabhakar Kushwaha 
801ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
811ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_CREATE,
821ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
832557c5a9SYogesh Gaur 					  dprc_token);
841ebbe4fcSPrabhakar Kushwaha 	DPNI_CMD_CREATE(cmd, cfg);
851ebbe4fcSPrabhakar Kushwaha 
861ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
871ebbe4fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
881ebbe4fcSPrabhakar Kushwaha 	if (err)
891ebbe4fcSPrabhakar Kushwaha 		return err;
901ebbe4fcSPrabhakar Kushwaha 
911ebbe4fcSPrabhakar Kushwaha 	/* retrieve response parameters */
922557c5a9SYogesh Gaur 	 MC_CMD_READ_OBJ_ID(cmd, *obj_id);
931ebbe4fcSPrabhakar Kushwaha 
941ebbe4fcSPrabhakar Kushwaha 	return 0;
951ebbe4fcSPrabhakar Kushwaha }
961ebbe4fcSPrabhakar Kushwaha 
dpni_destroy(struct fsl_mc_io * mc_io,uint16_t dprc_token,uint32_t cmd_flags,uint32_t obj_id)971ebbe4fcSPrabhakar Kushwaha int dpni_destroy(struct fsl_mc_io *mc_io,
982557c5a9SYogesh Gaur 		 uint16_t dprc_token,
991ebbe4fcSPrabhakar Kushwaha 		 uint32_t cmd_flags,
1002557c5a9SYogesh Gaur 		 uint32_t obj_id)
1011ebbe4fcSPrabhakar Kushwaha {
1021ebbe4fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
1031ebbe4fcSPrabhakar Kushwaha 
1041ebbe4fcSPrabhakar Kushwaha 	/* prepare command */
1051ebbe4fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_DESTROY,
1061ebbe4fcSPrabhakar Kushwaha 					  cmd_flags,
1072557c5a9SYogesh Gaur 					  dprc_token);
1082557c5a9SYogesh Gaur 
1092557c5a9SYogesh Gaur 	/* set object id to destroy */
1102557c5a9SYogesh Gaur 	CMD_DESTROY_SET_OBJ_ID_PARAM0(cmd, obj_id);
1111ebbe4fcSPrabhakar Kushwaha 
1121ebbe4fcSPrabhakar Kushwaha 	/* send command to mc*/
1131ebbe4fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
1141ebbe4fcSPrabhakar Kushwaha }
1151ebbe4fcSPrabhakar Kushwaha 
dpni_set_pools(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dpni_pools_cfg * cfg)116a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io *mc_io,
11787457d11SPrabhakar Kushwaha 		   uint32_t cmd_flags,
118a2a55e51SPrabhakar Kushwaha 		   uint16_t token,
119a2a55e51SPrabhakar Kushwaha 		   const struct dpni_pools_cfg *cfg)
120a2a55e51SPrabhakar Kushwaha {
121a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
122a2a55e51SPrabhakar Kushwaha 
123a2a55e51SPrabhakar Kushwaha 	/* prepare command */
124a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_POOLS,
12587457d11SPrabhakar Kushwaha 					  cmd_flags,
126a2a55e51SPrabhakar Kushwaha 					  token);
127a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_SET_POOLS(cmd, cfg);
128a2a55e51SPrabhakar Kushwaha 
129a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
130a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
131a2a55e51SPrabhakar Kushwaha }
132a2a55e51SPrabhakar Kushwaha 
dpni_enable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)13387457d11SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io *mc_io,
13487457d11SPrabhakar Kushwaha 		uint32_t cmd_flags,
13587457d11SPrabhakar Kushwaha 		uint16_t token)
136a2a55e51SPrabhakar Kushwaha {
137a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
138a2a55e51SPrabhakar Kushwaha 
139a2a55e51SPrabhakar Kushwaha 	/* prepare command */
140a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_ENABLE,
14187457d11SPrabhakar Kushwaha 					  cmd_flags,
142a2a55e51SPrabhakar Kushwaha 					  token);
143a2a55e51SPrabhakar Kushwaha 
144a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
145a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
146a2a55e51SPrabhakar Kushwaha }
147a2a55e51SPrabhakar Kushwaha 
dpni_disable(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)14887457d11SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io *mc_io,
14987457d11SPrabhakar Kushwaha 		 uint32_t cmd_flags,
15087457d11SPrabhakar Kushwaha 		 uint16_t token)
15187457d11SPrabhakar Kushwaha {
15287457d11SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
15387457d11SPrabhakar Kushwaha 
15487457d11SPrabhakar Kushwaha 	/* prepare command */
15587457d11SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_DISABLE,
15687457d11SPrabhakar Kushwaha 					  cmd_flags,
15787457d11SPrabhakar Kushwaha 					  token);
15887457d11SPrabhakar Kushwaha 
15987457d11SPrabhakar Kushwaha 	/* send command to mc*/
16087457d11SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
16187457d11SPrabhakar Kushwaha }
16287457d11SPrabhakar Kushwaha 
dpni_reset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)16387457d11SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io *mc_io,
16487457d11SPrabhakar Kushwaha 	       uint32_t cmd_flags,
16587457d11SPrabhakar Kushwaha 	       uint16_t token)
166a2a55e51SPrabhakar Kushwaha {
167a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
168a2a55e51SPrabhakar Kushwaha 
169a2a55e51SPrabhakar Kushwaha 	/* prepare command */
170a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_RESET,
17187457d11SPrabhakar Kushwaha 					  cmd_flags,
17287457d11SPrabhakar Kushwaha 					  token);
173a2a55e51SPrabhakar Kushwaha 
174a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
175a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
176a2a55e51SPrabhakar Kushwaha }
177a2a55e51SPrabhakar Kushwaha 
dpni_get_attributes(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpni_attr * attr)178a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io *mc_io,
17987457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
180a2a55e51SPrabhakar Kushwaha 			uint16_t token,
181a2a55e51SPrabhakar Kushwaha 			struct dpni_attr *attr)
182a2a55e51SPrabhakar Kushwaha {
183a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
184a2a55e51SPrabhakar Kushwaha 	int err;
185a2a55e51SPrabhakar Kushwaha 
186a2a55e51SPrabhakar Kushwaha 	/* prepare command */
187a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_ATTR,
18887457d11SPrabhakar Kushwaha 					  cmd_flags,
189a2a55e51SPrabhakar Kushwaha 					  token);
190a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
191a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
192a2a55e51SPrabhakar Kushwaha 	if (err)
193a2a55e51SPrabhakar Kushwaha 		return err;
194a2a55e51SPrabhakar Kushwaha 
195a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
196a2a55e51SPrabhakar Kushwaha 	DPNI_RSP_GET_ATTR(cmd, attr);
197a2a55e51SPrabhakar Kushwaha 
198a2a55e51SPrabhakar Kushwaha 	return 0;
199a2a55e51SPrabhakar Kushwaha }
200a2a55e51SPrabhakar Kushwaha 
dpni_set_errors_behavior(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpni_error_cfg * cfg)20153e353fcSPrabhakar Kushwaha int dpni_set_errors_behavior(struct fsl_mc_io *mc_io,
20253e353fcSPrabhakar Kushwaha 			     uint32_t cmd_flags,
20353e353fcSPrabhakar Kushwaha 			     uint16_t token,
20453e353fcSPrabhakar Kushwaha 			      struct dpni_error_cfg *cfg)
20553e353fcSPrabhakar Kushwaha {
20653e353fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
20753e353fcSPrabhakar Kushwaha 
20853e353fcSPrabhakar Kushwaha 	/* prepare command */
20953e353fcSPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_ERRORS_BEHAVIOR,
21053e353fcSPrabhakar Kushwaha 					  cmd_flags,
21153e353fcSPrabhakar Kushwaha 					  token);
21253e353fcSPrabhakar Kushwaha 	DPNI_CMD_SET_ERRORS_BEHAVIOR(cmd, cfg);
21353e353fcSPrabhakar Kushwaha 
21453e353fcSPrabhakar Kushwaha 	/* send command to mc*/
21553e353fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
21653e353fcSPrabhakar Kushwaha }
21753e353fcSPrabhakar Kushwaha 
dpni_set_buffer_layout(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dpni_buffer_layout * layout,enum dpni_queue_type type)2182557c5a9SYogesh Gaur int dpni_set_buffer_layout(struct fsl_mc_io *mc_io,
21987457d11SPrabhakar Kushwaha 			   uint32_t cmd_flags,
220a2a55e51SPrabhakar Kushwaha 			   uint16_t token,
2212557c5a9SYogesh Gaur 			   const struct dpni_buffer_layout *layout,
2222557c5a9SYogesh Gaur 			   enum dpni_queue_type type)
223a2a55e51SPrabhakar Kushwaha {
224a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
225a2a55e51SPrabhakar Kushwaha 
226a2a55e51SPrabhakar Kushwaha 	/* prepare command */
2272557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_BUFFER_LAYOUT,
22887457d11SPrabhakar Kushwaha 					  cmd_flags,
22987457d11SPrabhakar Kushwaha 					  token);
2302557c5a9SYogesh Gaur 	DPNI_CMD_SET_BUFFER_LAYOUT(cmd, layout, type);
231a2a55e51SPrabhakar Kushwaha 
232a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
233a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
234a2a55e51SPrabhakar Kushwaha }
235a2a55e51SPrabhakar Kushwaha 
dpni_get_qdid(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,uint16_t * qdid)23687457d11SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io *mc_io,
23787457d11SPrabhakar Kushwaha 		  uint32_t cmd_flags,
23887457d11SPrabhakar Kushwaha 		  uint16_t token,
23987457d11SPrabhakar Kushwaha 		  uint16_t *qdid)
240a2a55e51SPrabhakar Kushwaha {
241a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
242a2a55e51SPrabhakar Kushwaha 	int err;
243a2a55e51SPrabhakar Kushwaha 
244a2a55e51SPrabhakar Kushwaha 	/* prepare command */
245a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_QDID,
24687457d11SPrabhakar Kushwaha 					  cmd_flags,
247a2a55e51SPrabhakar Kushwaha 					  token);
248a2a55e51SPrabhakar Kushwaha 
249a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
250a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
251a2a55e51SPrabhakar Kushwaha 	if (err)
252a2a55e51SPrabhakar Kushwaha 		return err;
253a2a55e51SPrabhakar Kushwaha 
254a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
255a2a55e51SPrabhakar Kushwaha 	DPNI_RSP_GET_QDID(cmd, *qdid);
256a2a55e51SPrabhakar Kushwaha 
257a2a55e51SPrabhakar Kushwaha 	return 0;
258a2a55e51SPrabhakar Kushwaha }
259a2a55e51SPrabhakar Kushwaha 
dpni_get_tx_data_offset(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,uint16_t * data_offset)260a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io *mc_io,
26187457d11SPrabhakar Kushwaha 			    uint32_t cmd_flags,
262a2a55e51SPrabhakar Kushwaha 			    uint16_t token,
263a2a55e51SPrabhakar Kushwaha 			    uint16_t *data_offset)
264a2a55e51SPrabhakar Kushwaha {
265a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
266a2a55e51SPrabhakar Kushwaha 	int err;
267a2a55e51SPrabhakar Kushwaha 
268a2a55e51SPrabhakar Kushwaha 	/* prepare command */
269a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_TX_DATA_OFFSET,
27087457d11SPrabhakar Kushwaha 					  cmd_flags,
27187457d11SPrabhakar Kushwaha 					  token);
272a2a55e51SPrabhakar Kushwaha 
273a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
274a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
275a2a55e51SPrabhakar Kushwaha 	if (err)
276a2a55e51SPrabhakar Kushwaha 		return err;
277a2a55e51SPrabhakar Kushwaha 
278a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
279a2a55e51SPrabhakar Kushwaha 	DPNI_RSP_GET_TX_DATA_OFFSET(cmd, *data_offset);
280a2a55e51SPrabhakar Kushwaha 
281a2a55e51SPrabhakar Kushwaha 	return 0;
282a2a55e51SPrabhakar Kushwaha }
283a2a55e51SPrabhakar Kushwaha 
dpni_set_link_cfg(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const struct dpni_link_cfg * cfg)284a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
28587457d11SPrabhakar Kushwaha 		      uint32_t cmd_flags,
286a2a55e51SPrabhakar Kushwaha 		      uint16_t token,
2871f1c25c7SPrabhakar Kushwaha 		      const struct dpni_link_cfg *cfg)
288a2a55e51SPrabhakar Kushwaha {
289a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
290a2a55e51SPrabhakar Kushwaha 
291a2a55e51SPrabhakar Kushwaha 	/* prepare command */
292a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_LINK_CFG,
29387457d11SPrabhakar Kushwaha 					  cmd_flags,
29487457d11SPrabhakar Kushwaha 					  token);
295a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_SET_LINK_CFG(cmd, cfg);
296a2a55e51SPrabhakar Kushwaha 
297a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
298a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
299a2a55e51SPrabhakar Kushwaha }
300a2a55e51SPrabhakar Kushwaha 
dpni_get_link_state(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,struct dpni_link_state * state)301a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io *mc_io,
30287457d11SPrabhakar Kushwaha 			uint32_t cmd_flags,
303a2a55e51SPrabhakar Kushwaha 			uint16_t token,
304a2a55e51SPrabhakar Kushwaha 			struct dpni_link_state *state)
305a2a55e51SPrabhakar Kushwaha {
306a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
307a2a55e51SPrabhakar Kushwaha 	int err;
308a2a55e51SPrabhakar Kushwaha 
309a2a55e51SPrabhakar Kushwaha 	/* prepare command */
310a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_LINK_STATE,
31187457d11SPrabhakar Kushwaha 					  cmd_flags,
31287457d11SPrabhakar Kushwaha 					  token);
313a2a55e51SPrabhakar Kushwaha 
314a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
315a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
316a2a55e51SPrabhakar Kushwaha 	if (err)
317a2a55e51SPrabhakar Kushwaha 		return err;
318a2a55e51SPrabhakar Kushwaha 
319a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
320a2a55e51SPrabhakar Kushwaha 	DPNI_RSP_GET_LINK_STATE(cmd, state);
321a2a55e51SPrabhakar Kushwaha 
322a2a55e51SPrabhakar Kushwaha 	return 0;
323a2a55e51SPrabhakar Kushwaha }
324a2a55e51SPrabhakar Kushwaha 
325a2a55e51SPrabhakar Kushwaha 
dpni_set_primary_mac_addr(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const uint8_t mac_addr[6])326a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
32787457d11SPrabhakar Kushwaha 			      uint32_t cmd_flags,
328a2a55e51SPrabhakar Kushwaha 			      uint16_t token,
329a2a55e51SPrabhakar Kushwaha 			      const uint8_t mac_addr[6])
330a2a55e51SPrabhakar Kushwaha {
331a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
332a2a55e51SPrabhakar Kushwaha 
333a2a55e51SPrabhakar Kushwaha 	/* prepare command */
334a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_PRIM_MAC,
33587457d11SPrabhakar Kushwaha 					  cmd_flags,
33687457d11SPrabhakar Kushwaha 					  token);
337a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr);
338a2a55e51SPrabhakar Kushwaha 
339a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
340a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
341a2a55e51SPrabhakar Kushwaha }
342a2a55e51SPrabhakar Kushwaha 
dpni_get_primary_mac_addr(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,uint8_t mac_addr[6])343a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io *mc_io,
34487457d11SPrabhakar Kushwaha 			      uint32_t cmd_flags,
345a2a55e51SPrabhakar Kushwaha 			      uint16_t token,
346a2a55e51SPrabhakar Kushwaha 			      uint8_t mac_addr[6])
347a2a55e51SPrabhakar Kushwaha {
348a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
349a2a55e51SPrabhakar Kushwaha 	int err;
350a2a55e51SPrabhakar Kushwaha 
351a2a55e51SPrabhakar Kushwaha 	/* prepare command */
352a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_PRIM_MAC,
35387457d11SPrabhakar Kushwaha 					  cmd_flags,
35487457d11SPrabhakar Kushwaha 					  token);
355a2a55e51SPrabhakar Kushwaha 
356a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
357a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
358a2a55e51SPrabhakar Kushwaha 	if (err)
359a2a55e51SPrabhakar Kushwaha 		return err;
360a2a55e51SPrabhakar Kushwaha 
361a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
362a2a55e51SPrabhakar Kushwaha 	DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr);
363a2a55e51SPrabhakar Kushwaha 
364a2a55e51SPrabhakar Kushwaha 	return 0;
365a2a55e51SPrabhakar Kushwaha }
366a2a55e51SPrabhakar Kushwaha 
dpni_add_mac_addr(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const uint8_t mac_addr[6])367a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io *mc_io,
36887457d11SPrabhakar Kushwaha 		      uint32_t cmd_flags,
369a2a55e51SPrabhakar Kushwaha 		      uint16_t token,
370a2a55e51SPrabhakar Kushwaha 		      const uint8_t mac_addr[6])
371a2a55e51SPrabhakar Kushwaha {
372a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
373a2a55e51SPrabhakar Kushwaha 
374a2a55e51SPrabhakar Kushwaha 	/* prepare command */
375a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_ADD_MAC_ADDR,
37687457d11SPrabhakar Kushwaha 					  cmd_flags,
37787457d11SPrabhakar Kushwaha 					  token);
378a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr);
379a2a55e51SPrabhakar Kushwaha 
380a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
381a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
382a2a55e51SPrabhakar Kushwaha }
383a2a55e51SPrabhakar Kushwaha 
dpni_remove_mac_addr(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,const uint8_t mac_addr[6])384a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io *mc_io,
38587457d11SPrabhakar Kushwaha 			 uint32_t cmd_flags,
386a2a55e51SPrabhakar Kushwaha 			 uint16_t token,
387a2a55e51SPrabhakar Kushwaha 			 const uint8_t mac_addr[6])
388a2a55e51SPrabhakar Kushwaha {
389a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
390a2a55e51SPrabhakar Kushwaha 
391a2a55e51SPrabhakar Kushwaha 	/* prepare command */
392a2a55e51SPrabhakar Kushwaha 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_REMOVE_MAC_ADDR,
39387457d11SPrabhakar Kushwaha 					  cmd_flags,
39487457d11SPrabhakar Kushwaha 					  token);
395a2a55e51SPrabhakar Kushwaha 	DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr);
396a2a55e51SPrabhakar Kushwaha 
397a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
398a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
399a2a55e51SPrabhakar Kushwaha }
400a2a55e51SPrabhakar Kushwaha 
dpni_get_api_version(struct fsl_mc_io * mc_io,u32 cmd_flags,u16 * major_ver,u16 * minor_ver)4012557c5a9SYogesh Gaur int dpni_get_api_version(struct fsl_mc_io *mc_io,
4022557c5a9SYogesh Gaur 			 u32 cmd_flags,
4032557c5a9SYogesh Gaur 			 u16 *major_ver,
4042557c5a9SYogesh Gaur 			 u16 *minor_ver)
405a2a55e51SPrabhakar Kushwaha {
406a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
407a2a55e51SPrabhakar Kushwaha 	int err;
408a2a55e51SPrabhakar Kushwaha 
409a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4102557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_API_VERSION,
4112557c5a9SYogesh Gaur 					  cmd_flags, 0);
412a2a55e51SPrabhakar Kushwaha 
413a2a55e51SPrabhakar Kushwaha 	/* send command to mc */
414a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
415a2a55e51SPrabhakar Kushwaha 	if (err)
416a2a55e51SPrabhakar Kushwaha 		return err;
417a2a55e51SPrabhakar Kushwaha 
418a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
4192557c5a9SYogesh Gaur 	mc_cmd_read_api_version(&cmd, major_ver, minor_ver);
420a2a55e51SPrabhakar Kushwaha 
421a2a55e51SPrabhakar Kushwaha 	return 0;
422a2a55e51SPrabhakar Kushwaha }
423a2a55e51SPrabhakar Kushwaha 
dpni_set_queue(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,enum dpni_queue_type type,uint8_t tc,uint8_t index,const struct dpni_queue * queue)4242557c5a9SYogesh Gaur int dpni_set_queue(struct fsl_mc_io *mc_io,
42587457d11SPrabhakar Kushwaha 	uint32_t cmd_flags,
426a2a55e51SPrabhakar Kushwaha 	uint16_t token,
4272557c5a9SYogesh Gaur 	enum dpni_queue_type type,
4282557c5a9SYogesh Gaur 	uint8_t tc,
4292557c5a9SYogesh Gaur 	uint8_t index,
4302557c5a9SYogesh Gaur 	const struct dpni_queue *queue)
431a2a55e51SPrabhakar Kushwaha {
432a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
433a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4342557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_QUEUE,
43587457d11SPrabhakar Kushwaha 					  cmd_flags,
43687457d11SPrabhakar Kushwaha 					  token);
4372557c5a9SYogesh Gaur 	DPNI_CMD_SET_QUEUE(cmd, type, tc, index, queue);
438a2a55e51SPrabhakar Kushwaha 
439a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
440a2a55e51SPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
441a2a55e51SPrabhakar Kushwaha }
442a2a55e51SPrabhakar Kushwaha 
dpni_get_queue(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,enum dpni_queue_type type,uint8_t tc,uint8_t index,struct dpni_queue * queue)4432557c5a9SYogesh Gaur int dpni_get_queue(struct fsl_mc_io *mc_io,
44487457d11SPrabhakar Kushwaha 	uint32_t cmd_flags,
445a2a55e51SPrabhakar Kushwaha 	uint16_t token,
4462557c5a9SYogesh Gaur 	enum dpni_queue_type type,
4472557c5a9SYogesh Gaur 	uint8_t tc,
4482557c5a9SYogesh Gaur 	uint8_t index,
4492557c5a9SYogesh Gaur 	struct dpni_queue *queue)
450a2a55e51SPrabhakar Kushwaha {
451a2a55e51SPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
452a2a55e51SPrabhakar Kushwaha 	int err;
4532557c5a9SYogesh Gaur 
454a2a55e51SPrabhakar Kushwaha 	/* prepare command */
4552557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_QUEUE,
45687457d11SPrabhakar Kushwaha 					  cmd_flags,
45787457d11SPrabhakar Kushwaha 					  token);
4582557c5a9SYogesh Gaur 	DPNI_CMD_GET_QUEUE(cmd, type, tc, index);
459a2a55e51SPrabhakar Kushwaha 
460a2a55e51SPrabhakar Kushwaha 	/* send command to mc*/
461a2a55e51SPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
462a2a55e51SPrabhakar Kushwaha 	if (err)
463a2a55e51SPrabhakar Kushwaha 		return err;
464a2a55e51SPrabhakar Kushwaha 
465a2a55e51SPrabhakar Kushwaha 	/* retrieve response parameters */
4662557c5a9SYogesh Gaur 	DPNI_RSP_GET_QUEUE(cmd, queue);
467a2a55e51SPrabhakar Kushwaha 	return 0;
468a2a55e51SPrabhakar Kushwaha }
46953e353fcSPrabhakar Kushwaha 
dpni_set_tx_confirmation_mode(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,enum dpni_confirmation_mode mode)4702557c5a9SYogesh Gaur int dpni_set_tx_confirmation_mode(struct fsl_mc_io *mc_io,
47153e353fcSPrabhakar Kushwaha 	uint32_t cmd_flags,
47253e353fcSPrabhakar Kushwaha 	uint16_t token,
4732557c5a9SYogesh Gaur 	enum dpni_confirmation_mode mode)
47453e353fcSPrabhakar Kushwaha {
4752557c5a9SYogesh Gaur 	struct dpni_tx_confirmation_mode *cmd_params;
47653e353fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
47753e353fcSPrabhakar Kushwaha 
47853e353fcSPrabhakar Kushwaha 	/* prepare command */
4792557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_SET_TX_CONFIRMATION_MODE,
48053e353fcSPrabhakar Kushwaha 					  cmd_flags,
48153e353fcSPrabhakar Kushwaha 					  token);
4822557c5a9SYogesh Gaur 
4832557c5a9SYogesh Gaur 	cmd_params = (struct dpni_tx_confirmation_mode *)cmd.params;
4842557c5a9SYogesh Gaur 	cmd_params->confirmation_mode = mode;
48553e353fcSPrabhakar Kushwaha 
48653e353fcSPrabhakar Kushwaha 	/* send command to mc*/
48753e353fcSPrabhakar Kushwaha 	return mc_send_command(mc_io, &cmd);
48853e353fcSPrabhakar Kushwaha }
48953e353fcSPrabhakar Kushwaha 
dpni_get_statistics(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token,uint8_t page,struct dpni_statistics * stat)4902557c5a9SYogesh Gaur int dpni_get_statistics(struct fsl_mc_io *mc_io,
49153e353fcSPrabhakar Kushwaha 			uint32_t cmd_flags,
49253e353fcSPrabhakar Kushwaha 			uint16_t token,
4932557c5a9SYogesh Gaur 			uint8_t  page,
4942557c5a9SYogesh Gaur 			struct dpni_statistics *stat)
49553e353fcSPrabhakar Kushwaha {
49653e353fcSPrabhakar Kushwaha 	struct mc_command cmd = { 0 };
49753e353fcSPrabhakar Kushwaha 	int err;
49853e353fcSPrabhakar Kushwaha 
49953e353fcSPrabhakar Kushwaha 	/* prepare command */
5002557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_GET_STATISTICS,
5012557c5a9SYogesh Gaur 					  cmd_flags, token);
5022557c5a9SYogesh Gaur 	DPNI_CMD_GET_STATISTICS(cmd, page);
50353e353fcSPrabhakar Kushwaha 
50453e353fcSPrabhakar Kushwaha 	/* send command to mc*/
50553e353fcSPrabhakar Kushwaha 	err = mc_send_command(mc_io, &cmd);
50653e353fcSPrabhakar Kushwaha 	if (err)
50753e353fcSPrabhakar Kushwaha 		return err;
50853e353fcSPrabhakar Kushwaha 
5092557c5a9SYogesh Gaur 	/* retrieve response parameters */
5102557c5a9SYogesh Gaur 	DPNI_RSP_GET_STATISTICS(cmd, stat);
51153e353fcSPrabhakar Kushwaha 
51253e353fcSPrabhakar Kushwaha 	return 0;
51353e353fcSPrabhakar Kushwaha }
5142557c5a9SYogesh Gaur 
dpni_reset_statistics(struct fsl_mc_io * mc_io,uint32_t cmd_flags,uint16_t token)5152557c5a9SYogesh Gaur int dpni_reset_statistics(struct fsl_mc_io *mc_io,
5162557c5a9SYogesh Gaur 			  uint32_t cmd_flags,
5172557c5a9SYogesh Gaur 			  uint16_t token)
5182557c5a9SYogesh Gaur {
5192557c5a9SYogesh Gaur 	struct mc_command cmd = { 0 };
5202557c5a9SYogesh Gaur 
5212557c5a9SYogesh Gaur 	/* prepare command */
5222557c5a9SYogesh Gaur 	cmd.header = mc_encode_cmd_header(DPNI_CMDID_RESET_STATISTICS,
5232557c5a9SYogesh Gaur 					  cmd_flags, token);
5242557c5a9SYogesh Gaur 
5252557c5a9SYogesh Gaur 	/* send command to mc*/
5262557c5a9SYogesh Gaur 	return mc_send_command(mc_io, &cmd);
5272557c5a9SYogesh Gaur }
5282557c5a9SYogesh Gaur 
529