2 * Copyright (C) 2013-2015 Freescale Semiconductor
4 * SPDX-License-Identifier: GPL-2.0+
7 #include <fsl-mc/fsl_mc_sys.h>
8 #include <fsl-mc/fsl_mc_cmd.h>
9 #include <fsl-mc/fsl_dpni.h>
11 int dpni_prepare_extended_cfg(const struct dpni_extended_cfg
*cfg
,
14 uint64_t *ext_params
= (uint64_t *)ext_cfg_buf
;
16 DPNI_PREP_EXTENDED_CFG(ext_params
, cfg
);
21 int dpni_extract_extended_cfg(struct dpni_extended_cfg
*cfg
,
22 const uint8_t *ext_cfg_buf
)
24 uint64_t *ext_params
= (uint64_t *)ext_cfg_buf
;
26 DPNI_EXT_EXTENDED_CFG(ext_params
, cfg
);
31 int dpni_open(struct fsl_mc_io
*mc_io
,
36 struct mc_command cmd
= { 0 };
40 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_OPEN
,
43 DPNI_CMD_OPEN(cmd
, dpni_id
);
45 /* send command to mc*/
46 err
= mc_send_command(mc_io
, &cmd
);
50 /* retrieve response parameters */
51 *token
= MC_CMD_HDR_READ_TOKEN(cmd
.header
);
56 int dpni_close(struct fsl_mc_io
*mc_io
,
60 struct mc_command cmd
= { 0 };
63 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_CLOSE
,
67 /* send command to mc*/
68 return mc_send_command(mc_io
, &cmd
);
71 int dpni_create(struct fsl_mc_io
*mc_io
,
73 const struct dpni_cfg
*cfg
,
76 struct mc_command cmd
= { 0 };
80 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_CREATE
,
83 DPNI_CMD_CREATE(cmd
, cfg
);
85 /* send command to mc*/
86 err
= mc_send_command(mc_io
, &cmd
);
90 /* retrieve response parameters */
91 *token
= MC_CMD_HDR_READ_TOKEN(cmd
.header
);
96 int dpni_destroy(struct fsl_mc_io
*mc_io
,
100 struct mc_command cmd
= { 0 };
102 /* prepare command */
103 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_DESTROY
,
107 /* send command to mc*/
108 return mc_send_command(mc_io
, &cmd
);
111 int dpni_set_pools(struct fsl_mc_io
*mc_io
,
114 const struct dpni_pools_cfg
*cfg
)
116 struct mc_command cmd
= { 0 };
118 /* prepare command */
119 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_POOLS
,
122 DPNI_CMD_SET_POOLS(cmd
, cfg
);
124 /* send command to mc*/
125 return mc_send_command(mc_io
, &cmd
);
128 int dpni_enable(struct fsl_mc_io
*mc_io
,
132 struct mc_command cmd
= { 0 };
134 /* prepare command */
135 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_ENABLE
,
139 /* send command to mc*/
140 return mc_send_command(mc_io
, &cmd
);
143 int dpni_disable(struct fsl_mc_io
*mc_io
,
147 struct mc_command cmd
= { 0 };
149 /* prepare command */
150 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_DISABLE
,
154 /* send command to mc*/
155 return mc_send_command(mc_io
, &cmd
);
158 int dpni_reset(struct fsl_mc_io
*mc_io
,
162 struct mc_command cmd
= { 0 };
164 /* prepare command */
165 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_RESET
,
169 /* send command to mc*/
170 return mc_send_command(mc_io
, &cmd
);
173 int dpni_get_attributes(struct fsl_mc_io
*mc_io
,
176 struct dpni_attr
*attr
)
178 struct mc_command cmd
= { 0 };
181 /* prepare command */
182 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_ATTR
,
185 DPNI_CMD_GET_ATTR(cmd
, attr
);
187 /* send command to mc*/
188 err
= mc_send_command(mc_io
, &cmd
);
192 /* retrieve response parameters */
193 DPNI_RSP_GET_ATTR(cmd
, attr
);
198 int dpni_set_errors_behavior(struct fsl_mc_io
*mc_io
,
201 struct dpni_error_cfg
*cfg
)
203 struct mc_command cmd
= { 0 };
205 /* prepare command */
206 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_ERRORS_BEHAVIOR
,
209 DPNI_CMD_SET_ERRORS_BEHAVIOR(cmd
, cfg
);
211 /* send command to mc*/
212 return mc_send_command(mc_io
, &cmd
);
215 int dpni_get_rx_buffer_layout(struct fsl_mc_io
*mc_io
,
218 struct dpni_buffer_layout
*layout
)
220 struct mc_command cmd
= { 0 };
223 /* prepare command */
224 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_RX_BUFFER_LAYOUT
,
228 /* send command to mc*/
229 err
= mc_send_command(mc_io
, &cmd
);
233 /* retrieve response parameters */
234 DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd
, layout
);
239 int dpni_set_rx_buffer_layout(struct fsl_mc_io
*mc_io
,
242 const struct dpni_buffer_layout
*layout
)
244 struct mc_command cmd
= { 0 };
246 /* prepare command */
247 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_RX_BUFFER_LAYOUT
,
250 DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd
, layout
);
252 /* send command to mc*/
253 return mc_send_command(mc_io
, &cmd
);
256 int dpni_get_tx_buffer_layout(struct fsl_mc_io
*mc_io
,
259 struct dpni_buffer_layout
*layout
)
261 struct mc_command cmd
= { 0 };
264 /* prepare command */
265 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_TX_BUFFER_LAYOUT
,
269 /* send command to mc*/
270 err
= mc_send_command(mc_io
, &cmd
);
274 /* retrieve response parameters */
275 DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd
, layout
);
280 int dpni_set_tx_buffer_layout(struct fsl_mc_io
*mc_io
,
283 const struct dpni_buffer_layout
*layout
)
285 struct mc_command cmd
= { 0 };
287 /* prepare command */
288 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_TX_BUFFER_LAYOUT
,
291 DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd
, layout
);
293 /* send command to mc*/
294 return mc_send_command(mc_io
, &cmd
);
297 int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io
*mc_io
,
300 struct dpni_buffer_layout
*layout
)
302 struct mc_command cmd
= { 0 };
305 /* prepare command */
306 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT
,
310 /* send command to mc*/
311 err
= mc_send_command(mc_io
, &cmd
);
315 /* retrieve response parameters */
316 DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd
, layout
);
321 int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io
*mc_io
,
324 const struct dpni_buffer_layout
*layout
)
326 struct mc_command cmd
= { 0 };
328 /* prepare command */
329 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT
,
332 DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd
, layout
);
334 /* send command to mc*/
335 return mc_send_command(mc_io
, &cmd
);
338 int dpni_get_qdid(struct fsl_mc_io
*mc_io
,
343 struct mc_command cmd
= { 0 };
346 /* prepare command */
347 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_QDID
,
351 /* send command to mc*/
352 err
= mc_send_command(mc_io
, &cmd
);
356 /* retrieve response parameters */
357 DPNI_RSP_GET_QDID(cmd
, *qdid
);
362 int dpni_get_tx_data_offset(struct fsl_mc_io
*mc_io
,
365 uint16_t *data_offset
)
367 struct mc_command cmd
= { 0 };
370 /* prepare command */
371 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_TX_DATA_OFFSET
,
375 /* send command to mc*/
376 err
= mc_send_command(mc_io
, &cmd
);
380 /* retrieve response parameters */
381 DPNI_RSP_GET_TX_DATA_OFFSET(cmd
, *data_offset
);
386 int dpni_get_counter(struct fsl_mc_io
*mc_io
,
389 enum dpni_counter counter
,
392 struct mc_command cmd
= { 0 };
395 /* prepare command */
396 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_COUNTER
,
399 DPNI_CMD_GET_COUNTER(cmd
, counter
);
401 /* send command to mc*/
402 err
= mc_send_command(mc_io
, &cmd
);
406 /* retrieve response parameters */
407 DPNI_RSP_GET_COUNTER(cmd
, *value
);
412 int dpni_set_counter(struct fsl_mc_io
*mc_io
,
415 enum dpni_counter counter
,
418 struct mc_command cmd
= { 0 };
420 /* prepare command */
421 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_COUNTER
,
424 DPNI_CMD_SET_COUNTER(cmd
, counter
, value
);
426 /* send command to mc*/
427 return mc_send_command(mc_io
, &cmd
);
430 int dpni_set_link_cfg(struct fsl_mc_io
*mc_io
,
433 const struct dpni_link_cfg
*cfg
)
435 struct mc_command cmd
= { 0 };
437 /* prepare command */
438 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_LINK_CFG
,
441 DPNI_CMD_SET_LINK_CFG(cmd
, cfg
);
443 /* send command to mc*/
444 return mc_send_command(mc_io
, &cmd
);
447 int dpni_get_link_state(struct fsl_mc_io
*mc_io
,
450 struct dpni_link_state
*state
)
452 struct mc_command cmd
= { 0 };
455 /* prepare command */
456 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_LINK_STATE
,
460 /* send command to mc*/
461 err
= mc_send_command(mc_io
, &cmd
);
465 /* retrieve response parameters */
466 DPNI_RSP_GET_LINK_STATE(cmd
, state
);
472 int dpni_set_primary_mac_addr(struct fsl_mc_io
*mc_io
,
475 const uint8_t mac_addr
[6])
477 struct mc_command cmd
= { 0 };
479 /* prepare command */
480 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_PRIM_MAC
,
483 DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd
, mac_addr
);
485 /* send command to mc*/
486 return mc_send_command(mc_io
, &cmd
);
489 int dpni_get_primary_mac_addr(struct fsl_mc_io
*mc_io
,
494 struct mc_command cmd
= { 0 };
497 /* prepare command */
498 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_PRIM_MAC
,
502 /* send command to mc*/
503 err
= mc_send_command(mc_io
, &cmd
);
507 /* retrieve response parameters */
508 DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd
, mac_addr
);
513 int dpni_add_mac_addr(struct fsl_mc_io
*mc_io
,
516 const uint8_t mac_addr
[6])
518 struct mc_command cmd
= { 0 };
520 /* prepare command */
521 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_ADD_MAC_ADDR
,
524 DPNI_CMD_ADD_MAC_ADDR(cmd
, mac_addr
);
526 /* send command to mc*/
527 return mc_send_command(mc_io
, &cmd
);
530 int dpni_remove_mac_addr(struct fsl_mc_io
*mc_io
,
533 const uint8_t mac_addr
[6])
535 struct mc_command cmd
= { 0 };
537 /* prepare command */
538 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_REMOVE_MAC_ADDR
,
541 DPNI_CMD_REMOVE_MAC_ADDR(cmd
, mac_addr
);
543 /* send command to mc*/
544 return mc_send_command(mc_io
, &cmd
);
547 int dpni_set_tx_flow(struct fsl_mc_io
*mc_io
,
551 const struct dpni_tx_flow_cfg
*cfg
)
553 struct mc_command cmd
= { 0 };
556 /* prepare command */
557 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_TX_FLOW
,
560 DPNI_CMD_SET_TX_FLOW(cmd
, *flow_id
, cfg
);
562 /* send command to mc*/
563 err
= mc_send_command(mc_io
, &cmd
);
567 /* retrieve response parameters */
568 DPNI_RSP_SET_TX_FLOW(cmd
, *flow_id
);
573 int dpni_get_tx_flow(struct fsl_mc_io
*mc_io
,
577 struct dpni_tx_flow_attr
*attr
)
579 struct mc_command cmd
= { 0 };
582 /* prepare command */
583 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_TX_FLOW
,
586 DPNI_CMD_GET_TX_FLOW(cmd
, flow_id
);
588 /* send command to mc*/
589 err
= mc_send_command(mc_io
, &cmd
);
593 /* retrieve response parameters */
594 DPNI_RSP_GET_TX_FLOW(cmd
, attr
);
599 int dpni_set_rx_flow(struct fsl_mc_io
*mc_io
,
604 const struct dpni_queue_cfg
*cfg
)
606 struct mc_command cmd
= { 0 };
608 /* prepare command */
609 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_RX_FLOW
,
612 DPNI_CMD_SET_RX_FLOW(cmd
, tc_id
, flow_id
, cfg
);
614 /* send command to mc*/
615 return mc_send_command(mc_io
, &cmd
);
618 int dpni_get_rx_flow(struct fsl_mc_io
*mc_io
,
623 struct dpni_queue_attr
*attr
)
625 struct mc_command cmd
= { 0 };
627 /* prepare command */
628 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_RX_FLOW
,
631 DPNI_CMD_GET_RX_FLOW(cmd
, tc_id
, flow_id
);
633 /* send command to mc*/
634 err
= mc_send_command(mc_io
, &cmd
);
638 /* retrieve response parameters */
639 DPNI_RSP_GET_RX_FLOW(cmd
, attr
);
644 int dpni_set_tx_conf(struct fsl_mc_io
*mc_io
,
648 const struct dpni_tx_conf_cfg
*cfg
)
650 struct mc_command cmd
= { 0 };
652 /* prepare command */
653 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_SET_TX_CONF
,
656 DPNI_CMD_SET_TX_CONF(cmd
, flow_id
, cfg
);
658 /* send command to mc*/
659 return mc_send_command(mc_io
, &cmd
);
662 int dpni_get_tx_conf(struct fsl_mc_io
*mc_io
,
666 struct dpni_tx_conf_attr
*attr
)
668 struct mc_command cmd
= { 0 };
671 /* prepare command */
672 cmd
.header
= mc_encode_cmd_header(DPNI_CMDID_GET_TX_CONF
,
675 DPNI_CMD_GET_TX_CONF(cmd
, flow_id
);
677 /* send command to mc*/
678 err
= mc_send_command(mc_io
, &cmd
);
682 DPNI_RSP_GET_TX_CONF(cmd
, attr
);