xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dpni.h (revision 1ebbe4fcf75b15ccf23234bb6a7d28895a7e6b11)
1a2a55e51SPrabhakar Kushwaha /*
2a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor
3a2a55e51SPrabhakar Kushwaha  *
4a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
5a2a55e51SPrabhakar Kushwaha  */
6a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPNI_H
7a2a55e51SPrabhakar Kushwaha #define _FSL_DPNI_H
8a2a55e51SPrabhakar Kushwaha 
9a2a55e51SPrabhakar Kushwaha /* DPNI Version */
101f1c25c7SPrabhakar Kushwaha #define DPNI_VER_MAJOR				5
1187457d11SPrabhakar Kushwaha #define DPNI_VER_MINOR				1
12a2a55e51SPrabhakar Kushwaha 
13a2a55e51SPrabhakar Kushwaha /* Command IDs */
14a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_OPEN				0x801
15a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_CLOSE			0x800
16*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMDID_CREATE			0x901
17*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMDID_DESTROY			0x900
18a2a55e51SPrabhakar Kushwaha 
19a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ENABLE			0x002
20a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_DISABLE			0x003
21a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_ATTR			0x004
22a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_RESET			0x005
23a2a55e51SPrabhakar Kushwaha 
24a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_POOLS			0x200
25a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_BUFFER_LAYOUT		0x201
26a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_BUFFER_LAYOUT		0x202
27a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_BUFFER_LAYOUT		0x203
28a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_BUFFER_LAYOUT		0x204
29a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT	0x205
30a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT	0x206
31a2a55e51SPrabhakar Kushwaha 
32a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_QDID			0x210
33a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_DATA_OFFSET		0x212
34a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_COUNTER			0x213
35a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_COUNTER			0x214
36a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_LINK_STATE		0x215
37a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_LINK_CFG		0x21A
38a2a55e51SPrabhakar Kushwaha 
39a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_PRIM_MAC			0x224
40a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_PRIM_MAC			0x225
41a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ADD_MAC_ADDR			0x226
42a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_REMOVE_MAC_ADDR		0x227
43a2a55e51SPrabhakar Kushwaha 
44a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_FLOW			0x236
45a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_FLOW			0x237
46a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_FLOW			0x238
47a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_FLOW			0x239
48a2a55e51SPrabhakar Kushwaha 
49a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
50a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_OPEN(cmd, dpni_id) \
51a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd,	 0,	0,	32,	int,	dpni_id)
52a2a55e51SPrabhakar Kushwaha 
53*1ebbe4fcSPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
54*1ebbe4fcSPrabhakar Kushwaha #define DPNI_CMD_CREATE(cmd, cfg) \
55*1ebbe4fcSPrabhakar Kushwaha do { \
56*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,	8,  uint8_t,  cfg->adv.max_tcs); \
57*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 8,	8,  uint8_t,  cfg->adv.max_senders); \
58*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16,	8,  uint8_t,  cfg->mac_addr[5]); \
59*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24,	8,  uint8_t,  cfg->mac_addr[4]); \
60*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32,	8,  uint8_t,  cfg->mac_addr[3]); \
61*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40,	8,  uint8_t,  cfg->mac_addr[2]); \
62*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48,	8,  uint8_t,  cfg->mac_addr[1]); \
63*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56,	8,  uint8_t,  cfg->mac_addr[0]); \
64*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,	32, uint32_t, cfg->adv.options); \
65*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,	8,  uint8_t,  cfg->adv.max_unicast_filters); \
66*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 8,	8,  uint8_t,  cfg->adv.max_multicast_filters); \
67*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16,	8,  uint8_t,  cfg->adv.max_vlan_filters); \
68*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 24,	8,  uint8_t,  cfg->adv.max_qos_entries); \
69*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32,	8,  uint8_t,  cfg->adv.max_qos_key_size); \
70*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 48,	8,  uint8_t,  cfg->adv.max_dist_key_size); \
71*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 56,	8,  enum net_prot, cfg->adv.start_hdr); \
72*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,	8,  uint8_t,  cfg->adv.max_dist_per_tc[0]); \
73*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,	8,  uint8_t,  cfg->adv.max_dist_per_tc[1]); \
74*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 16,	8,  uint8_t,  cfg->adv.max_dist_per_tc[2]); \
75*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 24,	8,  uint8_t,  cfg->adv.max_dist_per_tc[3]); \
76*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32,	8,  uint8_t,  cfg->adv.max_dist_per_tc[4]); \
77*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 40,	8,  uint8_t,  cfg->adv.max_dist_per_tc[5]); \
78*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 48,	8,  uint8_t,  cfg->adv.max_dist_per_tc[6]); \
79*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 56,	8,  uint8_t,  cfg->adv.max_dist_per_tc[7]); \
80*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,	16, uint16_t, \
81*1ebbe4fcSPrabhakar Kushwaha 				    cfg->adv.ipr_cfg.max_reass_frm_size); \
82*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 16,	16, uint16_t, \
83*1ebbe4fcSPrabhakar Kushwaha 				    cfg->adv.ipr_cfg.min_frag_size_ipv4); \
84*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32,	16, uint16_t, \
85*1ebbe4fcSPrabhakar Kushwaha 				    cfg->adv.ipr_cfg.min_frag_size_ipv6); \
86*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48,	8,  uint8_t, cfg->adv.max_policers); \
87*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 56,	8,  uint8_t, cfg->adv.max_congestion_ctrl); \
88*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 0,	16, uint16_t, \
89*1ebbe4fcSPrabhakar Kushwaha 				  cfg->adv.ipr_cfg.max_open_frames_ipv4); \
90*1ebbe4fcSPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 16,	16, uint16_t, \
91*1ebbe4fcSPrabhakar Kushwaha 				  cfg->adv.ipr_cfg.max_open_frames_ipv6); \
92*1ebbe4fcSPrabhakar Kushwaha } while (0)
93a2a55e51SPrabhakar Kushwaha 
94a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
95a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_POOLS(cmd, cfg) \
96a2a55e51SPrabhakar Kushwaha do { \
97a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->num_dpbp); \
98a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, int,      cfg->pools[0].dpbp_id); \
99a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 16, uint16_t, cfg->pools[0].buffer_size);\
100a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,      cfg->pools[1].dpbp_id); \
101a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48, 16, uint16_t, cfg->pools[1].buffer_size);\
102a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,      cfg->pools[2].dpbp_id); \
103a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 0,  16, uint16_t, cfg->pools[2].buffer_size);\
104a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  32, int,      cfg->pools[3].dpbp_id); \
105a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 16, 16, uint16_t, cfg->pools[3].buffer_size);\
106a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 32, int,      cfg->pools[4].dpbp_id); \
107a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 32, 16, uint16_t, cfg->pools[4].buffer_size);\
108a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  32, int,      cfg->pools[5].dpbp_id); \
109a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 48, 16, uint16_t, cfg->pools[5].buffer_size);\
110a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 32, int,      cfg->pools[6].dpbp_id); \
111a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 0,  16, uint16_t, cfg->pools[6].buffer_size);\
112a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  32, int,      cfg->pools[7].dpbp_id); \
113a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 16, 16, uint16_t, cfg->pools[7].buffer_size);\
114a2a55e51SPrabhakar Kushwaha } while (0)
115a2a55e51SPrabhakar Kushwaha 
116a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
117a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_ATTR(cmd, attr) \
118a2a55e51SPrabhakar Kushwaha do { \
119a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->id);\
120a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->max_tcs); \
121a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 8,  uint8_t,  attr->max_senders); \
122a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 8,  enum net_prot, attr->start_hdr); \
1231f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, attr->options); \
124a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  8,  uint8_t,  attr->max_unicast_filters); \
125a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 8,  8,  uint8_t,  attr->max_multicast_filters);\
126a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 8,  uint8_t,  attr->max_vlan_filters); \
127a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 24, 8,  uint8_t,  attr->max_qos_entries); \
128a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 8,  uint8_t,  attr->max_qos_key_size); \
129a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 40, 8,  uint8_t,  attr->max_dist_key_size); \
130a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  8,  uint8_t,  attr->max_dist_per_tc[0]); \
131a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 8,  8,  uint8_t,  attr->max_dist_per_tc[1]); \
132a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 16, 8,  uint8_t,  attr->max_dist_per_tc[2]); \
133a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 24, 8,  uint8_t,  attr->max_dist_per_tc[3]); \
134a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 8,  uint8_t,  attr->max_dist_per_tc[4]); \
135a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 40, 8,  uint8_t,  attr->max_dist_per_tc[5]); \
136a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 48, 8,  uint8_t,  attr->max_dist_per_tc[6]); \
137a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 56, 8,  uint8_t,  attr->max_dist_per_tc[7]); \
138a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,	16, uint16_t, \
139a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.max_reass_frm_size); \
140a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16,	16, uint16_t, \
141a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.min_frag_size_ipv4); \
142a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32,	16, uint16_t, \
143a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.min_frag_size_ipv6);\
1441f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 48,	8,  uint8_t, attr->max_policers); \
1451f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 56,	8,  uint8_t, attr->max_congestion_ctrl); \
146a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 0,	16, uint16_t, \
147a2a55e51SPrabhakar Kushwaha 				  attr->ipr_cfg.max_open_frames_ipv4); \
148a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 16,	16, uint16_t, \
149a2a55e51SPrabhakar Kushwaha 				  attr->ipr_cfg.max_open_frames_ipv6); \
150a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\
151a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\
152a2a55e51SPrabhakar Kushwaha } while (0)
153a2a55e51SPrabhakar Kushwaha 
154a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
155a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \
156a2a55e51SPrabhakar Kushwaha do { \
157a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
158a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
159a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
160a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
161a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
162a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
163a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
164a2a55e51SPrabhakar Kushwaha } while (0)
165a2a55e51SPrabhakar Kushwaha 
166a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
167a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \
168a2a55e51SPrabhakar Kushwaha do { \
169a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
170a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
171a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
172a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
173a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
174a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
175a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
176a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
177a2a55e51SPrabhakar Kushwaha } while (0)
178a2a55e51SPrabhakar Kushwaha 
179a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
180a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \
181a2a55e51SPrabhakar Kushwaha do { \
182a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
183a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
184a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,      layout->pass_timestamp); \
185a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
186a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
187a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
188a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
189a2a55e51SPrabhakar Kushwaha } while (0)
190a2a55e51SPrabhakar Kushwaha 
191a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
192a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \
193a2a55e51SPrabhakar Kushwaha do { \
194a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
195a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
196a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
197a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
198a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
199a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
200a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
201a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
202a2a55e51SPrabhakar Kushwaha } while (0)
203a2a55e51SPrabhakar Kushwaha 
204a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
205a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \
206a2a55e51SPrabhakar Kushwaha do { \
207a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
208a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
209a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,      layout->pass_timestamp); \
210a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
211a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
212a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
213a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
214a2a55e51SPrabhakar Kushwaha } while (0)
215a2a55e51SPrabhakar Kushwaha 
216a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
217a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \
218a2a55e51SPrabhakar Kushwaha do { \
219a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
220a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
221a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
222a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
223a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
224a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
225a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
226a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
227a2a55e51SPrabhakar Kushwaha } while (0)
228a2a55e51SPrabhakar Kushwaha 
229a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
230a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_QDID(cmd, qdid) \
231a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, qdid)
232a2a55e51SPrabhakar Kushwaha 
233a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
234a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_DATA_OFFSET(cmd, data_offset) \
235a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, data_offset)
236a2a55e51SPrabhakar Kushwaha 
237a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
238a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_COUNTER(cmd, counter) \
239a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, enum dpni_counter, counter)
240a2a55e51SPrabhakar Kushwaha 
241a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
242a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_COUNTER(cmd, value) \
243a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, value)
244a2a55e51SPrabhakar Kushwaha 
245a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
246a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_COUNTER(cmd, counter, value) \
247a2a55e51SPrabhakar Kushwaha do { \
248a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, enum dpni_counter, counter); \
249a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, value); \
250a2a55e51SPrabhakar Kushwaha } while (0)
251a2a55e51SPrabhakar Kushwaha 
252a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
253a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \
254a2a55e51SPrabhakar Kushwaha do { \
2551f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, uint32_t, cfg->rate);\
256a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  64, uint64_t, cfg->options);\
257a2a55e51SPrabhakar Kushwaha } while (0)
258a2a55e51SPrabhakar Kushwaha 
259a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
260a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_LINK_STATE(cmd, state) \
261a2a55e51SPrabhakar Kushwaha do { \
262a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32,  1, int,      state->up);\
2631f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  32, uint32_t, state->rate);\
264a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, state->options);\
265a2a55e51SPrabhakar Kushwaha } while (0)
266a2a55e51SPrabhakar Kushwaha 
267a2a55e51SPrabhakar Kushwaha 
268a2a55e51SPrabhakar Kushwaha 
269a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
270a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr) \
271a2a55e51SPrabhakar Kushwaha do { \
272a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
273a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
274a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
275a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
276a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
277a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
278a2a55e51SPrabhakar Kushwaha } while (0)
279a2a55e51SPrabhakar Kushwaha 
280a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
281a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr) \
282a2a55e51SPrabhakar Kushwaha do { \
283a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
284a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
285a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
286a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
287a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
288a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
289a2a55e51SPrabhakar Kushwaha } while (0)
290a2a55e51SPrabhakar Kushwaha 
291a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
292a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \
293a2a55e51SPrabhakar Kushwaha do { \
294a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
295a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
296a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
297a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
298a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
299a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
300a2a55e51SPrabhakar Kushwaha } while (0)
301a2a55e51SPrabhakar Kushwaha 
302a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
303a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \
304a2a55e51SPrabhakar Kushwaha do { \
305a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
306a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
307a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
308a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
309a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
310a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
311a2a55e51SPrabhakar Kushwaha } while (0)
312a2a55e51SPrabhakar Kushwaha 
313a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
314a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \
315a2a55e51SPrabhakar Kushwaha do { \
316a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,     \
317a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_id);\
318a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t, \
319a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.priority);\
320a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 2,  enum dpni_dest, \
321a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_type);\
322a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 1,  int,	    cfg->conf_err_cfg.errors_only);\
323a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 43, 1,  int,	    cfg->l3_chksum_gen);\
324a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 44, 1,  int,	    cfg->l4_chksum_gen);\
325a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 45, 1,  int,	    \
326a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.use_default_queue);\
327a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\
328a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, \
329a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.user_ctx);\
330a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  32, uint32_t, cfg->options);\
331a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32,  32, uint32_t, \
332a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.options);\
333a2a55e51SPrabhakar Kushwaha } while (0)
334a2a55e51SPrabhakar Kushwaha 
335a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
336a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \
337a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id)
338a2a55e51SPrabhakar Kushwaha 
339a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
340a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \
341a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id)
342a2a55e51SPrabhakar Kushwaha 
343a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
344a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_FLOW(cmd, attr) \
345a2a55e51SPrabhakar Kushwaha do { \
346a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,      \
347a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.dest_id);\
348a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  \
349a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.priority);\
350a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, \
351a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.dest_type);\
352a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 42, 1,  int,	    attr->conf_err_attr.errors_only);\
353a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 43, 1,  int,	    attr->l3_chksum_gen);\
354a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 44, 1,  int,	    attr->l4_chksum_gen);\
355a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 45, 1,  int,	    \
356a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.use_default_queue);\
357a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, \
358a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.user_ctx);\
359a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 32, uint32_t, \
360a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.fqid);\
361a2a55e51SPrabhakar Kushwaha } while (0)
362a2a55e51SPrabhakar Kushwaha 
363a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
364a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \
365a2a55e51SPrabhakar Kushwaha do { \
366a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      cfg->dest_cfg.dest_id); \
367a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  cfg->dest_cfg.priority);\
368a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 2,  enum dpni_dest, cfg->dest_cfg.dest_type);\
36987457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 1,  int,      cfg->order_preservation_en);\
370a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \
371a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->user_ctx); \
372a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  uint8_t,  tc_id); \
373a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32,  32, uint32_t, cfg->options); \
3741f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  4,  enum dpni_flc_type, cfg->flc_cfg.flc_type); \
3751f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 4,  4,  enum dpni_stash_size, \
3761f1c25c7SPrabhakar Kushwaha 		cfg->flc_cfg.frame_data_size);\
3771f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 8,  4,  enum dpni_stash_size, \
3781f1c25c7SPrabhakar Kushwaha 		cfg->flc_cfg.flow_context_size);\
3791f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 32, uint32_t, cfg->flc_cfg.options);\
3801f1c25c7SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  64, uint64_t, cfg->flc_cfg.flow_context);\
381a2a55e51SPrabhakar Kushwaha } while (0)
382a2a55e51SPrabhakar Kushwaha 
383a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
384a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \
385a2a55e51SPrabhakar Kushwaha do { \
386a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  tc_id); \
387a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \
388a2a55e51SPrabhakar Kushwaha } while (0)
389a2a55e51SPrabhakar Kushwaha 
390a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
391a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_FLOW(cmd, attr) \
392a2a55e51SPrabhakar Kushwaha do { \
393a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,      attr->dest_cfg.dest_id); \
394a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->dest_cfg.priority);\
395a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, attr->dest_cfg.dest_type); \
39687457d11SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 1,  int,      attr->order_preservation_en);\
397a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->user_ctx); \
398a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \
3991f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  4,  enum dpni_flc_type, attr->flc_cfg.flc_type); \
4001f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 4,  4,  enum dpni_stash_size, \
4011f1c25c7SPrabhakar Kushwaha 		attr->flc_cfg.frame_data_size);\
4021f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 8,  4,  enum dpni_stash_size, \
4031f1c25c7SPrabhakar Kushwaha 		attr->flc_cfg.flow_context_size);\
4041f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 32, uint32_t, attr->flc_cfg.options);\
4051f1c25c7SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,  64, uint64_t, attr->flc_cfg.flow_context);\
406a2a55e51SPrabhakar Kushwaha } while (0)
407a2a55e51SPrabhakar Kushwaha 
408a2a55e51SPrabhakar Kushwaha enum net_prot {
409a2a55e51SPrabhakar Kushwaha 	NET_PROT_NONE = 0,
410a2a55e51SPrabhakar Kushwaha 	NET_PROT_PAYLOAD,
411a2a55e51SPrabhakar Kushwaha 	NET_PROT_ETH,
412a2a55e51SPrabhakar Kushwaha 	NET_PROT_VLAN,
413a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPV4,
414a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPV6,
415a2a55e51SPrabhakar Kushwaha 	NET_PROT_IP,
416a2a55e51SPrabhakar Kushwaha 	NET_PROT_TCP,
417a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP,
418a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP_LITE,
419a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPHC,
420a2a55e51SPrabhakar Kushwaha 	NET_PROT_SCTP,
421a2a55e51SPrabhakar Kushwaha 	NET_PROT_SCTP_CHUNK_DATA,
422a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPOE,
423a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPP,
424a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPMUX,
425a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPMUX_SUBFRM,
426a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV2,
427a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV3_CTRL,
428a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV3_SESS,
429a2a55e51SPrabhakar Kushwaha 	NET_PROT_LLC,
430a2a55e51SPrabhakar Kushwaha 	NET_PROT_LLC_SNAP,
431a2a55e51SPrabhakar Kushwaha 	NET_PROT_NLPID,
432a2a55e51SPrabhakar Kushwaha 	NET_PROT_SNAP,
433a2a55e51SPrabhakar Kushwaha 	NET_PROT_MPLS,
434a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPSEC_AH,
435a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPSEC_ESP,
436a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP_ENC_ESP, /* RFC 3948 */
437a2a55e51SPrabhakar Kushwaha 	NET_PROT_MACSEC,
438a2a55e51SPrabhakar Kushwaha 	NET_PROT_GRE,
439a2a55e51SPrabhakar Kushwaha 	NET_PROT_MINENCAP,
440a2a55e51SPrabhakar Kushwaha 	NET_PROT_DCCP,
441a2a55e51SPrabhakar Kushwaha 	NET_PROT_ICMP,
442a2a55e51SPrabhakar Kushwaha 	NET_PROT_IGMP,
443a2a55e51SPrabhakar Kushwaha 	NET_PROT_ARP,
444a2a55e51SPrabhakar Kushwaha 	NET_PROT_CAPWAP_DATA,
445a2a55e51SPrabhakar Kushwaha 	NET_PROT_CAPWAP_CTRL,
446a2a55e51SPrabhakar Kushwaha 	NET_PROT_RFC2684,
447a2a55e51SPrabhakar Kushwaha 	NET_PROT_ICMPV6,
448a2a55e51SPrabhakar Kushwaha 	NET_PROT_FCOE,
449a2a55e51SPrabhakar Kushwaha 	NET_PROT_FIP,
450a2a55e51SPrabhakar Kushwaha 	NET_PROT_ISCSI,
451a2a55e51SPrabhakar Kushwaha 	NET_PROT_GTP,
452a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L2,
453a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L3,
454a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L4,
455a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L5,
456a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_SHIM1,
457a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_SHIM2,
458a2a55e51SPrabhakar Kushwaha 
459a2a55e51SPrabhakar Kushwaha 	NET_PROT_DUMMY_LAST
460a2a55e51SPrabhakar Kushwaha };
461a2a55e51SPrabhakar Kushwaha 
4621f1c25c7SPrabhakar Kushwaha /**
4631f1c25c7SPrabhakar Kushwaha  * Data Path Network Interface API
464a2a55e51SPrabhakar Kushwaha  * Contains initialization APIs and runtime control APIs for DPNI
465a2a55e51SPrabhakar Kushwaha  */
466a2a55e51SPrabhakar Kushwaha 
467a2a55e51SPrabhakar Kushwaha struct fsl_mc_io;
468a2a55e51SPrabhakar Kushwaha 
469a2a55e51SPrabhakar Kushwaha /* General DPNI macros */
470a2a55e51SPrabhakar Kushwaha 
471a2a55e51SPrabhakar Kushwaha /* Maximum number of traffic classes */
472a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_TC				8
473a2a55e51SPrabhakar Kushwaha /* Maximum number of buffer pools per DPNI */
474a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_DPBP				8
475a2a55e51SPrabhakar Kushwaha 
476a2a55e51SPrabhakar Kushwaha /* All traffic classes considered; see dpni_set_rx_flow() */
477a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TCS				(uint8_t)(-1)
478a2a55e51SPrabhakar Kushwaha /* All flows within traffic class considered; see dpni_set_rx_flow() */
479a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TC_FLOWS			(uint16_t)(-1)
480a2a55e51SPrabhakar Kushwaha /* Generate new flow ID; see dpni_set_tx_flow() */
481a2a55e51SPrabhakar Kushwaha #define DPNI_NEW_FLOW_ID			(uint16_t)(-1)
482a2a55e51SPrabhakar Kushwaha 
483a2a55e51SPrabhakar Kushwaha /**
484a2a55e51SPrabhakar Kushwaha  * dpni_open() - Open a control session for the specified object
485a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
48687457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
487a2a55e51SPrabhakar Kushwaha  * @dpni_id:	DPNI unique ID
488a2a55e51SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
489a2a55e51SPrabhakar Kushwaha  *
490a2a55e51SPrabhakar Kushwaha  * This function can be used to open a control session for an
491a2a55e51SPrabhakar Kushwaha  * already created object; an object may have been declared in
492a2a55e51SPrabhakar Kushwaha  * the DPL or by calling the dpni_create() function.
493a2a55e51SPrabhakar Kushwaha  * This function returns a unique authentication token,
494a2a55e51SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
495a2a55e51SPrabhakar Kushwaha  * portal; this token must be used in all subsequent commands for
496a2a55e51SPrabhakar Kushwaha  * this specific object.
497a2a55e51SPrabhakar Kushwaha  *
498a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
499a2a55e51SPrabhakar Kushwaha  */
50087457d11SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io	*mc_io,
50187457d11SPrabhakar Kushwaha 	      uint32_t		cmd_flags,
50287457d11SPrabhakar Kushwaha 	      int		dpni_id,
50387457d11SPrabhakar Kushwaha 	      uint16_t		*token);
504a2a55e51SPrabhakar Kushwaha 
505a2a55e51SPrabhakar Kushwaha /**
506a2a55e51SPrabhakar Kushwaha  * dpni_close() - Close the control session of the object
507a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
50887457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
509a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
510a2a55e51SPrabhakar Kushwaha  *
511a2a55e51SPrabhakar Kushwaha  * After this function is called, no further operations are
512a2a55e51SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
513a2a55e51SPrabhakar Kushwaha  *
514a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
515a2a55e51SPrabhakar Kushwaha  */
51687457d11SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io	*mc_io,
51787457d11SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
51887457d11SPrabhakar Kushwaha 	       uint16_t		token);
519a2a55e51SPrabhakar Kushwaha 
520*1ebbe4fcSPrabhakar Kushwaha /* DPNI configuration options */
521*1ebbe4fcSPrabhakar Kushwaha 
522*1ebbe4fcSPrabhakar Kushwaha /**
523*1ebbe4fcSPrabhakar Kushwaha  * Allow different distribution key profiles for different traffic classes;
524*1ebbe4fcSPrabhakar Kushwaha  * if not set, a single key profile is assumed
525*1ebbe4fcSPrabhakar Kushwaha  */
526*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_ALLOW_DIST_KEY_PER_TC		0x00000001
527*1ebbe4fcSPrabhakar Kushwaha 
528*1ebbe4fcSPrabhakar Kushwaha /**
529*1ebbe4fcSPrabhakar Kushwaha  * Disable all non-error transmit confirmation; error frames are reported
530*1ebbe4fcSPrabhakar Kushwaha  * back to a common Tx error queue
531*1ebbe4fcSPrabhakar Kushwaha  */
532*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_TX_CONF_DISABLED		0x00000002
533*1ebbe4fcSPrabhakar Kushwaha 
534*1ebbe4fcSPrabhakar Kushwaha /* Disable per-sender private Tx confirmation/error queue */
535*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED	0x00000004
536*1ebbe4fcSPrabhakar Kushwaha 
537*1ebbe4fcSPrabhakar Kushwaha /**
538*1ebbe4fcSPrabhakar Kushwaha  * Support distribution based on hashed key;
539*1ebbe4fcSPrabhakar Kushwaha  * allows statistical distribution over receive queues in a traffic class
540*1ebbe4fcSPrabhakar Kushwaha  */
541*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_HASH			0x00000010
542*1ebbe4fcSPrabhakar Kushwaha 
543*1ebbe4fcSPrabhakar Kushwaha /**
544*1ebbe4fcSPrabhakar Kushwaha  * Support distribution based on flow steering;
545*1ebbe4fcSPrabhakar Kushwaha  * allows explicit control of distribution over receive queues in a traffic
546*1ebbe4fcSPrabhakar Kushwaha  * class
547*1ebbe4fcSPrabhakar Kushwaha  */
548*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_DIST_FS			0x00000020
549*1ebbe4fcSPrabhakar Kushwaha 
550*1ebbe4fcSPrabhakar Kushwaha /* Unicast filtering support */
551*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_UNICAST_FILTER			0x00000080
552*1ebbe4fcSPrabhakar Kushwaha /* Multicast filtering support */
553*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_MULTICAST_FILTER		0x00000100
554*1ebbe4fcSPrabhakar Kushwaha /* VLAN filtering support */
555*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_FILTER			0x00000200
556*1ebbe4fcSPrabhakar Kushwaha /* Support IP reassembly on received packets */
557*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPR				0x00000800
558*1ebbe4fcSPrabhakar Kushwaha /* Support IP fragmentation on transmitted packets */
559*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_IPF				0x00001000
560*1ebbe4fcSPrabhakar Kushwaha /* VLAN manipulation support */
561*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_VLAN_MANIPULATION		0x00010000
562*1ebbe4fcSPrabhakar Kushwaha /* Support masking of QoS lookup keys */
563*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_QOS_MASK_SUPPORT		0x00020000
564*1ebbe4fcSPrabhakar Kushwaha /* Support masking of Flow Steering lookup keys */
565*1ebbe4fcSPrabhakar Kushwaha #define DPNI_OPT_FS_MASK_SUPPORT		0x00040000
566*1ebbe4fcSPrabhakar Kushwaha 
567a2a55e51SPrabhakar Kushwaha /**
568a2a55e51SPrabhakar Kushwaha  * struct dpni_ipr_cfg - Structure representing IP reassembly configuration
569a2a55e51SPrabhakar Kushwaha  * @max_reass_frm_size: Maximum size of the reassembled frame
570a2a55e51SPrabhakar Kushwaha  * @min_frag_size_ipv4: Minimum fragment size of IPv4 fragments
571a2a55e51SPrabhakar Kushwaha  * @min_frag_size_ipv6: Minimum fragment size of IPv6 fragments
572a2a55e51SPrabhakar Kushwaha  * @max_open_frames_ipv4: Maximum concurrent IPv4 packets in reassembly process
573a2a55e51SPrabhakar Kushwaha  * @max_open_frames_ipv6: Maximum concurrent IPv6 packets in reassembly process
574a2a55e51SPrabhakar Kushwaha  */
575a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg {
576a2a55e51SPrabhakar Kushwaha 	uint16_t max_reass_frm_size;
577a2a55e51SPrabhakar Kushwaha 	uint16_t min_frag_size_ipv4;
578a2a55e51SPrabhakar Kushwaha 	uint16_t min_frag_size_ipv6;
579a2a55e51SPrabhakar Kushwaha 	uint16_t max_open_frames_ipv4;
580a2a55e51SPrabhakar Kushwaha 	uint16_t max_open_frames_ipv6;
581a2a55e51SPrabhakar Kushwaha };
582a2a55e51SPrabhakar Kushwaha 
583a2a55e51SPrabhakar Kushwaha /**
584*1ebbe4fcSPrabhakar Kushwaha  * struct dpni_cfg - Structure representing DPNI configuration
585*1ebbe4fcSPrabhakar Kushwaha  * @mac_addr: Primary MAC address
586*1ebbe4fcSPrabhakar Kushwaha  * @adv: Advanced parameters; default is all zeros;
587*1ebbe4fcSPrabhakar Kushwaha  *		use this structure to change default settings
588*1ebbe4fcSPrabhakar Kushwaha  */
589*1ebbe4fcSPrabhakar Kushwaha struct dpni_cfg {
590*1ebbe4fcSPrabhakar Kushwaha 	uint8_t mac_addr[6];
591*1ebbe4fcSPrabhakar Kushwaha 	/**
592*1ebbe4fcSPrabhakar Kushwaha 	 * struct adv - Advanced parameters
593*1ebbe4fcSPrabhakar Kushwaha 	 * @options: Mask of available options; use 'DPNI_OPT_<X>' values
594*1ebbe4fcSPrabhakar Kushwaha 	 * @start_hdr: Selects the packet starting header for parsing;
595*1ebbe4fcSPrabhakar Kushwaha 	 *		'NET_PROT_NONE' is treated as default: 'NET_PROT_ETH'
596*1ebbe4fcSPrabhakar Kushwaha 	 * @max_senders: Maximum number of different senders; used as the number
597*1ebbe4fcSPrabhakar Kushwaha 	 *		of dedicated Tx flows; Non-power-of-2 values are rounded
598*1ebbe4fcSPrabhakar Kushwaha 	 *		up to the next power-of-2 value as hardware demands it;
599*1ebbe4fcSPrabhakar Kushwaha 	 *		'0' will be treated as '1'
600*1ebbe4fcSPrabhakar Kushwaha 	 * @max_tcs: Maximum number of traffic classes (for both Tx and Rx);
601*1ebbe4fcSPrabhakar Kushwaha 	 *		'0' will e treated as '1'
602*1ebbe4fcSPrabhakar Kushwaha 	 * @max_dist_per_tc: Maximum distribution size per Rx traffic class;
603*1ebbe4fcSPrabhakar Kushwaha 	 *			Must be set to the required value minus 1;
604*1ebbe4fcSPrabhakar Kushwaha 	 *			i.e. 0->1, 1->2, ... ,255->256;
605*1ebbe4fcSPrabhakar Kushwaha 	 *			Non-power-of-2 values are rounded up to the next
606*1ebbe4fcSPrabhakar Kushwaha 	 *			power-of-2 value as hardware demands it
607*1ebbe4fcSPrabhakar Kushwaha 	 * @max_unicast_filters: Maximum number of unicast filters;
608*1ebbe4fcSPrabhakar Kushwaha 	 *			'0' is treated	as '16'
609*1ebbe4fcSPrabhakar Kushwaha 	 * @max_multicast_filters: Maximum number of multicast filters;
610*1ebbe4fcSPrabhakar Kushwaha 	 *			'0' is treated as '64'
611*1ebbe4fcSPrabhakar Kushwaha 	 * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in
612*1ebbe4fcSPrabhakar Kushwaha 	 *			the QoS	table; '0' is treated as '64'
613*1ebbe4fcSPrabhakar Kushwaha 	 * @max_qos_key_size: Maximum key size for the QoS look-up;
614*1ebbe4fcSPrabhakar Kushwaha 	 *			'0' is treated as '24' which is enough for IPv4
615*1ebbe4fcSPrabhakar Kushwaha 	 *			5-tuple
616*1ebbe4fcSPrabhakar Kushwaha 	 * @max_dist_key_size: Maximum key size for the distribution;
617*1ebbe4fcSPrabhakar Kushwaha 	 *		'0' is treated as '24' which is enough for IPv4 5-tuple
618*1ebbe4fcSPrabhakar Kushwaha 	 * @max_policers: Maximum number of policers;
619*1ebbe4fcSPrabhakar Kushwaha 	 *		should be between '0' and max_tcs
620*1ebbe4fcSPrabhakar Kushwaha 	 * @max_congestion_ctrl: Maximum number of congestion control groups
621*1ebbe4fcSPrabhakar Kushwaha 	 *		(CGs); covers early drop and congestion notification
622*1ebbe4fcSPrabhakar Kushwaha 	 *		requirements for traffic classes;
623*1ebbe4fcSPrabhakar Kushwaha 	 *		should be between '0' and max_tcs
624*1ebbe4fcSPrabhakar Kushwaha 	 * @ipr_cfg: IP reassembly configuration
625*1ebbe4fcSPrabhakar Kushwaha 	 */
626*1ebbe4fcSPrabhakar Kushwaha 	struct {
627*1ebbe4fcSPrabhakar Kushwaha 		uint32_t		options;
628*1ebbe4fcSPrabhakar Kushwaha 		enum net_prot		start_hdr;
629*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_senders;
630*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_tcs;
631*1ebbe4fcSPrabhakar Kushwaha 		uint8_t			max_dist_per_tc[DPNI_MAX_TC];
632*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_unicast_filters;
633*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_multicast_filters;
634*1ebbe4fcSPrabhakar Kushwaha 		uint8_t			max_vlan_filters;
635*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_qos_entries;
636*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_qos_key_size;
637*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_dist_key_size;
638*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_policers;
639*1ebbe4fcSPrabhakar Kushwaha 		uint8_t		max_congestion_ctrl;
640*1ebbe4fcSPrabhakar Kushwaha 		struct dpni_ipr_cfg	ipr_cfg;
641*1ebbe4fcSPrabhakar Kushwaha 	} adv;
642*1ebbe4fcSPrabhakar Kushwaha };
643*1ebbe4fcSPrabhakar Kushwaha 
644*1ebbe4fcSPrabhakar Kushwaha /**
645*1ebbe4fcSPrabhakar Kushwaha  * dpni_create() - Create the DPNI object
646*1ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
647*1ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
648*1ebbe4fcSPrabhakar Kushwaha  * @cfg:	Configuration structure
649*1ebbe4fcSPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
650*1ebbe4fcSPrabhakar Kushwaha  *
651*1ebbe4fcSPrabhakar Kushwaha  * Create the DPNI object, allocate required resources and
652*1ebbe4fcSPrabhakar Kushwaha  * perform required initialization.
653*1ebbe4fcSPrabhakar Kushwaha  *
654*1ebbe4fcSPrabhakar Kushwaha  * The object can be created either by declaring it in the
655*1ebbe4fcSPrabhakar Kushwaha  * DPL file, or by calling this function.
656*1ebbe4fcSPrabhakar Kushwaha  *
657*1ebbe4fcSPrabhakar Kushwaha  * This function returns a unique authentication token,
658*1ebbe4fcSPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
659*1ebbe4fcSPrabhakar Kushwaha  * portal; this token must be used in all subsequent calls to
660*1ebbe4fcSPrabhakar Kushwaha  * this specific object. For objects that are created using the
661*1ebbe4fcSPrabhakar Kushwaha  * DPL file, call dpni_open() function to get an authentication
662*1ebbe4fcSPrabhakar Kushwaha  * token first.
663*1ebbe4fcSPrabhakar Kushwaha  *
664*1ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
665*1ebbe4fcSPrabhakar Kushwaha  */
666*1ebbe4fcSPrabhakar Kushwaha int dpni_create(struct fsl_mc_io	*mc_io,
667*1ebbe4fcSPrabhakar Kushwaha 		uint32_t		cmd_flags,
668*1ebbe4fcSPrabhakar Kushwaha 		const struct dpni_cfg	*cfg,
669*1ebbe4fcSPrabhakar Kushwaha 		uint16_t		*token);
670*1ebbe4fcSPrabhakar Kushwaha 
671*1ebbe4fcSPrabhakar Kushwaha /**
672*1ebbe4fcSPrabhakar Kushwaha  * dpni_destroy() - Destroy the DPNI object and release all its resources.
673*1ebbe4fcSPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
674*1ebbe4fcSPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
675*1ebbe4fcSPrabhakar Kushwaha  * @token:	Token of DPNI object
676*1ebbe4fcSPrabhakar Kushwaha  *
677*1ebbe4fcSPrabhakar Kushwaha  * Return:	'0' on Success; error code otherwise.
678*1ebbe4fcSPrabhakar Kushwaha  */
679*1ebbe4fcSPrabhakar Kushwaha int dpni_destroy(struct fsl_mc_io	*mc_io,
680*1ebbe4fcSPrabhakar Kushwaha 		 uint32_t		cmd_flags,
681*1ebbe4fcSPrabhakar Kushwaha 		 uint16_t		token);
682*1ebbe4fcSPrabhakar Kushwaha 
683*1ebbe4fcSPrabhakar Kushwaha /**
684a2a55e51SPrabhakar Kushwaha  * struct dpni_pools_cfg - Structure representing buffer pools configuration
685a2a55e51SPrabhakar Kushwaha  * @num_dpbp: Number of DPBPs
686a2a55e51SPrabhakar Kushwaha  * @pools: Array of buffer pools parameters; The number of valid entries
687a2a55e51SPrabhakar Kushwaha  *	must match 'num_dpbp' value
688a2a55e51SPrabhakar Kushwaha  */
689a2a55e51SPrabhakar Kushwaha struct dpni_pools_cfg {
690a2a55e51SPrabhakar Kushwaha 	uint8_t num_dpbp;
691a2a55e51SPrabhakar Kushwaha 	/**
692a2a55e51SPrabhakar Kushwaha 	 * struct pools - Buffer pools parameters
693a2a55e51SPrabhakar Kushwaha 	 * @dpbp_id: DPBP object ID
694a2a55e51SPrabhakar Kushwaha 	 * @buffer_size: Buffer size
69587457d11SPrabhakar Kushwaha 	 * @backup_pool: Backup pool
696a2a55e51SPrabhakar Kushwaha 	 */
697a2a55e51SPrabhakar Kushwaha 	struct {
698a2a55e51SPrabhakar Kushwaha 		int		dpbp_id;
699a2a55e51SPrabhakar Kushwaha 		uint16_t	buffer_size;
70087457d11SPrabhakar Kushwaha 		int		backup_pool;
701a2a55e51SPrabhakar Kushwaha 	} pools[DPNI_MAX_DPBP];
702a2a55e51SPrabhakar Kushwaha };
703a2a55e51SPrabhakar Kushwaha 
704a2a55e51SPrabhakar Kushwaha /**
705a2a55e51SPrabhakar Kushwaha  * dpni_set_pools() - Set buffer pools configuration
706a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
70787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
708a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
709a2a55e51SPrabhakar Kushwaha  * @cfg:	Buffer pools configuration
710a2a55e51SPrabhakar Kushwaha  *
711a2a55e51SPrabhakar Kushwaha  * mandatory for DPNI operation
712a2a55e51SPrabhakar Kushwaha  * warning:Allowed only when DPNI is disabled
713a2a55e51SPrabhakar Kushwaha  *
714a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
715a2a55e51SPrabhakar Kushwaha  */
716a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io		*mc_io,
71787457d11SPrabhakar Kushwaha 		   uint32_t			cmd_flags,
718a2a55e51SPrabhakar Kushwaha 		   uint16_t			token,
719a2a55e51SPrabhakar Kushwaha 		   const struct dpni_pools_cfg	*cfg);
720a2a55e51SPrabhakar Kushwaha 
721a2a55e51SPrabhakar Kushwaha /**
722a2a55e51SPrabhakar Kushwaha  * dpni_enable() - Enable the DPNI, allow sending and receiving frames.
723a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
72487457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
725a2a55e51SPrabhakar Kushwaha  * @token:		Token of DPNI object
726a2a55e51SPrabhakar Kushwaha  *
727a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
728a2a55e51SPrabhakar Kushwaha  */
72987457d11SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io	*mc_io,
73087457d11SPrabhakar Kushwaha 		uint32_t		cmd_flags,
73187457d11SPrabhakar Kushwaha 		uint16_t		token);
732a2a55e51SPrabhakar Kushwaha 
733a2a55e51SPrabhakar Kushwaha /**
734a2a55e51SPrabhakar Kushwaha  * dpni_disable() - Disable the DPNI, stop sending and receiving frames.
735a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
73687457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
737a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
738a2a55e51SPrabhakar Kushwaha  *
739a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
740a2a55e51SPrabhakar Kushwaha  */
74187457d11SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io	*mc_io,
74287457d11SPrabhakar Kushwaha 		 uint32_t		cmd_flags,
74387457d11SPrabhakar Kushwaha 		 uint16_t		token);
744a2a55e51SPrabhakar Kushwaha 
745a2a55e51SPrabhakar Kushwaha 
746a2a55e51SPrabhakar Kushwaha /**
74787457d11SPrabhakar Kushwaha  * dpni_reset() - Reset the DPNI, returns the object to initial state.
748a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
74987457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
750a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
751a2a55e51SPrabhakar Kushwaha  *
752a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
753a2a55e51SPrabhakar Kushwaha  */
75487457d11SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io	*mc_io,
75587457d11SPrabhakar Kushwaha 	       uint32_t		cmd_flags,
75687457d11SPrabhakar Kushwaha 	       uint16_t		token);
757a2a55e51SPrabhakar Kushwaha 
758a2a55e51SPrabhakar Kushwaha /**
759a2a55e51SPrabhakar Kushwaha  * struct dpni_attr - Structure representing DPNI attributes
760a2a55e51SPrabhakar Kushwaha  * @id: DPNI object ID
761a2a55e51SPrabhakar Kushwaha  * @version: DPNI version
762a2a55e51SPrabhakar Kushwaha  * @start_hdr: Indicates the packet starting header for parsing
763a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; reflects the value as was given in
764a2a55e51SPrabhakar Kushwaha  *		object's creation
765a2a55e51SPrabhakar Kushwaha  * @max_senders: Maximum number of different senders; used as the number
766a2a55e51SPrabhakar Kushwaha  *		of dedicated Tx flows;
767a2a55e51SPrabhakar Kushwaha  * @max_tcs: Maximum number of traffic classes (for both Tx and Rx)
768a2a55e51SPrabhakar Kushwaha  * @max_dist_per_tc: Maximum distribution size per Rx traffic class;
769a2a55e51SPrabhakar Kushwaha  *			Set to the required value minus 1
770a2a55e51SPrabhakar Kushwaha  * @max_unicast_filters: Maximum number of unicast filters
771a2a55e51SPrabhakar Kushwaha  * @max_multicast_filters: Maximum number of multicast filters
772a2a55e51SPrabhakar Kushwaha  * @max_vlan_filters: Maximum number of VLAN filters
773a2a55e51SPrabhakar Kushwaha  * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table
774a2a55e51SPrabhakar Kushwaha  * @max_qos_key_size: Maximum key size for the QoS look-up
775a2a55e51SPrabhakar Kushwaha  * @max_dist_key_size: Maximum key size for the distribution look-up
7761f1c25c7SPrabhakar Kushwaha  * @max_policers: Maximum number of policers;
7771f1c25c7SPrabhakar Kushwaha  * @max_congestion_ctrl: Maximum number of congestion control groups (CGs);
778a2a55e51SPrabhakar Kushwaha  * @ipr_cfg: IP reassembly configuration
779a2a55e51SPrabhakar Kushwaha  */
780a2a55e51SPrabhakar Kushwaha struct dpni_attr {
781a2a55e51SPrabhakar Kushwaha 	int id;
782a2a55e51SPrabhakar Kushwaha 	/**
783a2a55e51SPrabhakar Kushwaha 	 * struct version - DPNI version
784a2a55e51SPrabhakar Kushwaha 	 * @major: DPNI major version
785a2a55e51SPrabhakar Kushwaha 	 * @minor: DPNI minor version
786a2a55e51SPrabhakar Kushwaha 	 */
787a2a55e51SPrabhakar Kushwaha 	struct {
788a2a55e51SPrabhakar Kushwaha 		uint16_t major;
789a2a55e51SPrabhakar Kushwaha 		uint16_t minor;
790a2a55e51SPrabhakar Kushwaha 	} version;
791a2a55e51SPrabhakar Kushwaha 	enum net_prot start_hdr;
7921f1c25c7SPrabhakar Kushwaha 	uint32_t options;
793a2a55e51SPrabhakar Kushwaha 	uint8_t max_senders;
794a2a55e51SPrabhakar Kushwaha 	uint8_t max_tcs;
795a2a55e51SPrabhakar Kushwaha 	uint8_t max_dist_per_tc[DPNI_MAX_TC];
796a2a55e51SPrabhakar Kushwaha 	uint8_t max_unicast_filters;
797a2a55e51SPrabhakar Kushwaha 	uint8_t max_multicast_filters;
798a2a55e51SPrabhakar Kushwaha 	uint8_t max_vlan_filters;
799a2a55e51SPrabhakar Kushwaha 	uint8_t max_qos_entries;
800a2a55e51SPrabhakar Kushwaha 	uint8_t max_qos_key_size;
801a2a55e51SPrabhakar Kushwaha 	uint8_t max_dist_key_size;
8021f1c25c7SPrabhakar Kushwaha 	uint8_t max_policers;
8031f1c25c7SPrabhakar Kushwaha 	uint8_t max_congestion_ctrl;
804a2a55e51SPrabhakar Kushwaha 	struct dpni_ipr_cfg ipr_cfg;
805a2a55e51SPrabhakar Kushwaha };
8061f1c25c7SPrabhakar Kushwaha 
807a2a55e51SPrabhakar Kushwaha /**
808a2a55e51SPrabhakar Kushwaha  * dpni_get_attributes() - Retrieve DPNI attributes.
80987457d11SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
81087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
811a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
812a2a55e51SPrabhakar Kushwaha  * @attr:	Returned object's attributes
813a2a55e51SPrabhakar Kushwaha  *
814a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
815a2a55e51SPrabhakar Kushwaha  */
816a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io	*mc_io,
81787457d11SPrabhakar Kushwaha 			uint32_t		cmd_flags,
818a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
819a2a55e51SPrabhakar Kushwaha 			struct dpni_attr	*attr);
820a2a55e51SPrabhakar Kushwaha 
821a2a55e51SPrabhakar Kushwaha /* DPNI buffer layout modification options */
822a2a55e51SPrabhakar Kushwaha 
823a2a55e51SPrabhakar Kushwaha /* Select to modify the time-stamp setting */
824a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_TIMESTAMP		0x00000001
825a2a55e51SPrabhakar Kushwaha /* Select to modify the parser-result setting; not applicable for Tx */
826a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PARSER_RESULT	0x00000002
827a2a55e51SPrabhakar Kushwaha /* Select to modify the frame-status setting */
828a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_FRAME_STATUS	0x00000004
829a2a55e51SPrabhakar Kushwaha /* Select to modify the private-data-size setting */
830a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE	0x00000008
831a2a55e51SPrabhakar Kushwaha /* Select to modify the data-alignment setting */
832a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_ALIGN		0x00000010
833a2a55e51SPrabhakar Kushwaha /* Select to modify the data-head-room setting */
834a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM	0x00000020
835a2a55e51SPrabhakar Kushwaha /*!< Select to modify the data-tail-room setting */
836a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM	0x00000040
837a2a55e51SPrabhakar Kushwaha 
838a2a55e51SPrabhakar Kushwaha /**
839a2a55e51SPrabhakar Kushwaha  * struct dpni_buffer_layout - Structure representing DPNI buffer layout
840a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the buffer
841a2a55e51SPrabhakar Kushwaha  *		layout; Use any combination of 'DPNI_BUF_LAYOUT_OPT_<X>' flags
842a2a55e51SPrabhakar Kushwaha  * @pass_timestamp: Pass timestamp value
843a2a55e51SPrabhakar Kushwaha  * @pass_parser_result: Pass parser results
844a2a55e51SPrabhakar Kushwaha  * @pass_frame_status: Pass frame status
845a2a55e51SPrabhakar Kushwaha  * @private_data_size: Size kept for private data (in bytes)
846a2a55e51SPrabhakar Kushwaha  * @data_align: Data alignment
847a2a55e51SPrabhakar Kushwaha  * @data_head_room: Data head room
848a2a55e51SPrabhakar Kushwaha  * @data_tail_room: Data tail room
849a2a55e51SPrabhakar Kushwaha  */
850a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout {
851a2a55e51SPrabhakar Kushwaha 	uint32_t options;
852a2a55e51SPrabhakar Kushwaha 	int pass_timestamp;
853a2a55e51SPrabhakar Kushwaha 	int pass_parser_result;
854a2a55e51SPrabhakar Kushwaha 	int pass_frame_status;
855a2a55e51SPrabhakar Kushwaha 	uint16_t private_data_size;
856a2a55e51SPrabhakar Kushwaha 	uint16_t data_align;
857a2a55e51SPrabhakar Kushwaha 	uint16_t data_head_room;
858a2a55e51SPrabhakar Kushwaha 	uint16_t data_tail_room;
859a2a55e51SPrabhakar Kushwaha };
860a2a55e51SPrabhakar Kushwaha 
861a2a55e51SPrabhakar Kushwaha /**
862a2a55e51SPrabhakar Kushwaha  * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes.
863a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
86487457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
865a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
866a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
867a2a55e51SPrabhakar Kushwaha  *
868a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
869a2a55e51SPrabhakar Kushwaha  */
870a2a55e51SPrabhakar Kushwaha int dpni_get_rx_buffer_layout(struct fsl_mc_io		*mc_io,
87187457d11SPrabhakar Kushwaha 			      uint32_t			cmd_flags,
872a2a55e51SPrabhakar Kushwaha 			      uint16_t			token,
873a2a55e51SPrabhakar Kushwaha 			      struct dpni_buffer_layout	*layout);
8741f1c25c7SPrabhakar Kushwaha 
875a2a55e51SPrabhakar Kushwaha /**
876a2a55e51SPrabhakar Kushwaha  * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration.
877a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
87887457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
879a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
880a2a55e51SPrabhakar Kushwaha  * @layout:	Buffer layout configuration
881a2a55e51SPrabhakar Kushwaha  *
882a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
883a2a55e51SPrabhakar Kushwaha  *
884a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
885a2a55e51SPrabhakar Kushwaha  */
886a2a55e51SPrabhakar Kushwaha int dpni_set_rx_buffer_layout(struct fsl_mc_io			*mc_io,
88787457d11SPrabhakar Kushwaha 			      uint32_t				cmd_flags,
888a2a55e51SPrabhakar Kushwaha 			      uint16_t				token,
889a2a55e51SPrabhakar Kushwaha 			      const struct dpni_buffer_layout	*layout);
890a2a55e51SPrabhakar Kushwaha 
891a2a55e51SPrabhakar Kushwaha /**
892a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes.
893a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
89487457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
895a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
896a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
897a2a55e51SPrabhakar Kushwaha  *
898a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
899a2a55e51SPrabhakar Kushwaha  */
900a2a55e51SPrabhakar Kushwaha int dpni_get_tx_buffer_layout(struct fsl_mc_io		*mc_io,
90187457d11SPrabhakar Kushwaha 			      uint32_t			cmd_flags,
902a2a55e51SPrabhakar Kushwaha 			      uint16_t			token,
903a2a55e51SPrabhakar Kushwaha 			      struct dpni_buffer_layout	*layout);
904a2a55e51SPrabhakar Kushwaha 
905a2a55e51SPrabhakar Kushwaha /**
9061f1c25c7SPrabhakar Kushwaha  * dpni_set_tx_buffer_layout() - Set Tx buffer layout configuration.
9071f1c25c7SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
90887457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
9091f1c25c7SPrabhakar Kushwaha  * @token:	Token of DPNI object
9101f1c25c7SPrabhakar Kushwaha  * @layout:	Buffer layout configuration
911a2a55e51SPrabhakar Kushwaha  *
9121f1c25c7SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
913a2a55e51SPrabhakar Kushwaha  *
914a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
915a2a55e51SPrabhakar Kushwaha  */
916a2a55e51SPrabhakar Kushwaha int dpni_set_tx_buffer_layout(struct fsl_mc_io			*mc_io,
91787457d11SPrabhakar Kushwaha 			      uint32_t				cmd_flags,
918a2a55e51SPrabhakar Kushwaha 			      uint16_t				token,
919a2a55e51SPrabhakar Kushwaha 			      const struct dpni_buffer_layout	*layout);
9201f1c25c7SPrabhakar Kushwaha 
921a2a55e51SPrabhakar Kushwaha /**
922a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout
923a2a55e51SPrabhakar Kushwaha  *				attributes.
924a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
92587457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
926a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
927a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
928a2a55e51SPrabhakar Kushwaha  *
929a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
930a2a55e51SPrabhakar Kushwaha  */
931a2a55e51SPrabhakar Kushwaha int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io		*mc_io,
93287457d11SPrabhakar Kushwaha 				   uint32_t			cmd_flags,
933a2a55e51SPrabhakar Kushwaha 				   uint16_t			token,
934a2a55e51SPrabhakar Kushwaha 				   struct dpni_buffer_layout	*layout);
9351f1c25c7SPrabhakar Kushwaha 
936a2a55e51SPrabhakar Kushwaha /**
937a2a55e51SPrabhakar Kushwaha  * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout
938a2a55e51SPrabhakar Kushwaha  *					configuration.
939a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
94087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
941a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
942a2a55e51SPrabhakar Kushwaha  * @layout:	Buffer layout configuration
943a2a55e51SPrabhakar Kushwaha  *
944a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
945a2a55e51SPrabhakar Kushwaha  *
946a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
947a2a55e51SPrabhakar Kushwaha  */
948a2a55e51SPrabhakar Kushwaha int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io		   *mc_io,
94987457d11SPrabhakar Kushwaha 				   uint32_t			   cmd_flags,
950a2a55e51SPrabhakar Kushwaha 				   uint16_t			   token,
951a2a55e51SPrabhakar Kushwaha 				   const struct dpni_buffer_layout *layout);
9521f1c25c7SPrabhakar Kushwaha 
953a2a55e51SPrabhakar Kushwaha /**
9541f1c25c7SPrabhakar Kushwaha  * dpni_get_qdid() - Get the Queuing Destination ID (QDID) that should be used
9551f1c25c7SPrabhakar Kushwaha  *			for enqueue operations
956a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
95787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
958a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
9591f1c25c7SPrabhakar Kushwaha  * @qdid:	Returned virtual QDID value that should be used as an argument
9601f1c25c7SPrabhakar Kushwaha  *			in all enqueue operations
961a2a55e51SPrabhakar Kushwaha  *
962a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
963a2a55e51SPrabhakar Kushwaha  */
96487457d11SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io	*mc_io,
96587457d11SPrabhakar Kushwaha 		  uint32_t		cmd_flags,
96687457d11SPrabhakar Kushwaha 		  uint16_t		token,
96787457d11SPrabhakar Kushwaha 		  uint16_t		*qdid);
968a2a55e51SPrabhakar Kushwaha 
969a2a55e51SPrabhakar Kushwaha /**
970a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer)
971a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
97287457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
973a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
974a2a55e51SPrabhakar Kushwaha  * @data_offset: Tx data offset (from start of buffer)
975a2a55e51SPrabhakar Kushwaha  *
976a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
977a2a55e51SPrabhakar Kushwaha  */
978a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io	*mc_io,
97987457d11SPrabhakar Kushwaha 			    uint32_t		cmd_flags,
980a2a55e51SPrabhakar Kushwaha 			    uint16_t		token,
981a2a55e51SPrabhakar Kushwaha 			    uint16_t		*data_offset);
982a2a55e51SPrabhakar Kushwaha 
983a2a55e51SPrabhakar Kushwaha /**
984a2a55e51SPrabhakar Kushwaha  * enum dpni_counter - DPNI counter types
985a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME: Counts ingress frames
986a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BYTE: Counts ingress bytes
987a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit
988a2a55e51SPrabhakar Kushwaha  *		'drop' setting
989a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors
990a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames
991a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes
992a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames
993a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes
994a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_FRAME: Counts egress frames
995a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_BYTE: Counts egress bytes
996a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors
997a2a55e51SPrabhakar Kushwaha  */
998a2a55e51SPrabhakar Kushwaha enum dpni_counter {
999a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME = 0x0,
1000a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BYTE = 0x1,
1001a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME_DROP = 0x2,
1002a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME_DISCARD = 0x3,
1003a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_MCAST_FRAME = 0x4,
1004a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_MCAST_BYTE = 0x5,
1005a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BCAST_FRAME = 0x6,
1006a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BCAST_BYTES = 0x7,
1007a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_FRAME = 0x8,
1008a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_BYTE = 0x9,
1009a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_FRAME_DISCARD = 0xa
1010a2a55e51SPrabhakar Kushwaha };
1011a2a55e51SPrabhakar Kushwaha 
1012a2a55e51SPrabhakar Kushwaha /**
1013a2a55e51SPrabhakar Kushwaha  * dpni_get_counter() - Read a specific DPNI counter
1014a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
101587457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1016a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1017a2a55e51SPrabhakar Kushwaha  * @counter:	The requested counter
1018a2a55e51SPrabhakar Kushwaha  * @value:	Returned counter's current value
1019a2a55e51SPrabhakar Kushwaha  *
1020a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1021a2a55e51SPrabhakar Kushwaha  */
1022a2a55e51SPrabhakar Kushwaha int dpni_get_counter(struct fsl_mc_io	*mc_io,
102387457d11SPrabhakar Kushwaha 		     uint32_t		cmd_flags,
1024a2a55e51SPrabhakar Kushwaha 		     uint16_t		token,
1025a2a55e51SPrabhakar Kushwaha 		     enum dpni_counter	counter,
1026a2a55e51SPrabhakar Kushwaha 		     uint64_t		*value);
1027a2a55e51SPrabhakar Kushwaha 
1028a2a55e51SPrabhakar Kushwaha /**
1029a2a55e51SPrabhakar Kushwaha  * dpni_set_counter() - Set (or clear) a specific DPNI counter
1030a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
103187457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1032a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1033a2a55e51SPrabhakar Kushwaha  * @counter:	The requested counter
1034a2a55e51SPrabhakar Kushwaha  * @value:	New counter value; typically pass '0' for resetting
1035a2a55e51SPrabhakar Kushwaha  *			the counter.
1036a2a55e51SPrabhakar Kushwaha  *
1037a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1038a2a55e51SPrabhakar Kushwaha  */
1039a2a55e51SPrabhakar Kushwaha int dpni_set_counter(struct fsl_mc_io	*mc_io,
104087457d11SPrabhakar Kushwaha 		     uint32_t		cmd_flags,
1041a2a55e51SPrabhakar Kushwaha 		     uint16_t		token,
1042a2a55e51SPrabhakar Kushwaha 		     enum dpni_counter	counter,
1043a2a55e51SPrabhakar Kushwaha 		     uint64_t		value);
10441f1c25c7SPrabhakar Kushwaha 
10451f1c25c7SPrabhakar Kushwaha /* Enable auto-negotiation */
10461f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_AUTONEG		0x0000000000000001ULL
10471f1c25c7SPrabhakar Kushwaha /* Enable half-duplex mode */
10481f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_HALF_DUPLEX	0x0000000000000002ULL
10491f1c25c7SPrabhakar Kushwaha /* Enable pause frames */
10501f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_PAUSE		0x0000000000000004ULL
10511f1c25c7SPrabhakar Kushwaha /* Enable a-symmetric pause frames */
10521f1c25c7SPrabhakar Kushwaha #define DPNI_LINK_OPT_ASYM_PAUSE	0x0000000000000008ULL
10531f1c25c7SPrabhakar Kushwaha 
1054a2a55e51SPrabhakar Kushwaha /**
1055a2a55e51SPrabhakar Kushwaha  * struct - Structure representing DPNI link configuration
1056a2a55e51SPrabhakar Kushwaha  * @rate: Rate
1057a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values
1058a2a55e51SPrabhakar Kushwaha  */
1059a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg {
10601f1c25c7SPrabhakar Kushwaha 	uint32_t rate;
1061a2a55e51SPrabhakar Kushwaha 	uint64_t options;
1062a2a55e51SPrabhakar Kushwaha };
1063a2a55e51SPrabhakar Kushwaha 
1064a2a55e51SPrabhakar Kushwaha /**
1065a2a55e51SPrabhakar Kushwaha  * dpni_set_link_cfg() - set the link configuration.
1066a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
106787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1068a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1069a2a55e51SPrabhakar Kushwaha  * @cfg:	Link configuration
1070a2a55e51SPrabhakar Kushwaha  *
1071a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1072a2a55e51SPrabhakar Kushwaha  */
1073a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io			*mc_io,
107487457d11SPrabhakar Kushwaha 		      uint32_t				cmd_flags,
1075a2a55e51SPrabhakar Kushwaha 		      uint16_t				token,
10761f1c25c7SPrabhakar Kushwaha 		      const struct dpni_link_cfg	*cfg);
1077a2a55e51SPrabhakar Kushwaha 
1078a2a55e51SPrabhakar Kushwaha /**
1079a2a55e51SPrabhakar Kushwaha  * struct dpni_link_state - Structure representing DPNI link state
1080a2a55e51SPrabhakar Kushwaha  * @rate: Rate
1081a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values
1082a2a55e51SPrabhakar Kushwaha  * @up: Link state; '0' for down, '1' for up
1083a2a55e51SPrabhakar Kushwaha  */
1084a2a55e51SPrabhakar Kushwaha struct dpni_link_state {
10851f1c25c7SPrabhakar Kushwaha 	uint32_t rate;
1086a2a55e51SPrabhakar Kushwaha 	uint64_t options;
1087a2a55e51SPrabhakar Kushwaha 	int up;
1088a2a55e51SPrabhakar Kushwaha };
1089a2a55e51SPrabhakar Kushwaha 
1090a2a55e51SPrabhakar Kushwaha /**
1091a2a55e51SPrabhakar Kushwaha  * dpni_get_link_state() - Return the link state (either up or down)
1092a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
109387457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1094a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1095a2a55e51SPrabhakar Kushwaha  * @state:	Returned link state;
1096a2a55e51SPrabhakar Kushwaha  *
1097a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1098a2a55e51SPrabhakar Kushwaha  */
1099a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io	*mc_io,
110087457d11SPrabhakar Kushwaha 			uint32_t		cmd_flags,
1101a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
1102a2a55e51SPrabhakar Kushwaha 			struct dpni_link_state	*state);
1103a2a55e51SPrabhakar Kushwaha 
1104a2a55e51SPrabhakar Kushwaha /**
1105a2a55e51SPrabhakar Kushwaha  * dpni_set_primary_mac_addr() - Set the primary MAC address
1106a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
110787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1108a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1109a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to set as primary address
1110a2a55e51SPrabhakar Kushwaha  *
1111a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1112a2a55e51SPrabhakar Kushwaha  */
1113a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io *mc_io,
111487457d11SPrabhakar Kushwaha 			      uint32_t		cmd_flags,
1115a2a55e51SPrabhakar Kushwaha 			      uint16_t		token,
1116a2a55e51SPrabhakar Kushwaha 			      const uint8_t	mac_addr[6]);
11171f1c25c7SPrabhakar Kushwaha 
1118a2a55e51SPrabhakar Kushwaha /**
1119a2a55e51SPrabhakar Kushwaha  * dpni_get_primary_mac_addr() - Get the primary MAC address
1120a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
112187457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1122a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1123a2a55e51SPrabhakar Kushwaha  * @mac_addr:	Returned MAC address
1124a2a55e51SPrabhakar Kushwaha  *
1125a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1126a2a55e51SPrabhakar Kushwaha  */
1127a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io	*mc_io,
112887457d11SPrabhakar Kushwaha 			      uint32_t		cmd_flags,
1129a2a55e51SPrabhakar Kushwaha 			      uint16_t		token,
1130a2a55e51SPrabhakar Kushwaha 			      uint8_t		mac_addr[6]);
11311f1c25c7SPrabhakar Kushwaha 
1132a2a55e51SPrabhakar Kushwaha /**
1133a2a55e51SPrabhakar Kushwaha  * dpni_add_mac_addr() - Add MAC address filter
1134a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
113587457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1136a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1137a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to add
1138a2a55e51SPrabhakar Kushwaha  *
1139a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1140a2a55e51SPrabhakar Kushwaha  */
1141a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io	*mc_io,
114287457d11SPrabhakar Kushwaha 		      uint32_t		cmd_flags,
1143a2a55e51SPrabhakar Kushwaha 		      uint16_t		token,
1144a2a55e51SPrabhakar Kushwaha 		      const uint8_t	mac_addr[6]);
1145a2a55e51SPrabhakar Kushwaha 
1146a2a55e51SPrabhakar Kushwaha /**
1147a2a55e51SPrabhakar Kushwaha  * dpni_remove_mac_addr() - Remove MAC address filter
1148a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
114987457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1150a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1151a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to remove
1152a2a55e51SPrabhakar Kushwaha  *
1153a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1154a2a55e51SPrabhakar Kushwaha  */
1155a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io	*mc_io,
115687457d11SPrabhakar Kushwaha 			 uint32_t		cmd_flags,
1157a2a55e51SPrabhakar Kushwaha 			 uint16_t		token,
1158a2a55e51SPrabhakar Kushwaha 			 const uint8_t		mac_addr[6]);
1159a2a55e51SPrabhakar Kushwaha 
1160a2a55e51SPrabhakar Kushwaha /**
1161a2a55e51SPrabhakar Kushwaha  * enum dpni_dest - DPNI destination types
11621f1c25c7SPrabhakar Kushwaha  * @DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and
1163a2a55e51SPrabhakar Kushwaha  *		does not generate FQDAN notifications; user is expected to
1164a2a55e51SPrabhakar Kushwaha  *		dequeue from the queue based on polling or other user-defined
1165a2a55e51SPrabhakar Kushwaha  *		method
1166a2a55e51SPrabhakar Kushwaha  * @DPNI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN
1167a2a55e51SPrabhakar Kushwaha  *		notifications to the specified DPIO; user is expected to dequeue
1168a2a55e51SPrabhakar Kushwaha  *		from the queue only after notification is received
1169a2a55e51SPrabhakar Kushwaha  * @DPNI_DEST_DPCON: The queue is set in schedule mode and does not generate
1170a2a55e51SPrabhakar Kushwaha  *		FQDAN notifications, but is connected to the specified DPCON
1171a2a55e51SPrabhakar Kushwaha  *		object; user is expected to dequeue from the DPCON channel
1172a2a55e51SPrabhakar Kushwaha  */
1173a2a55e51SPrabhakar Kushwaha enum dpni_dest {
1174a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_NONE = 0,
1175a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_DPIO = 1,
1176a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_DPCON = 2
1177a2a55e51SPrabhakar Kushwaha };
1178a2a55e51SPrabhakar Kushwaha 
1179a2a55e51SPrabhakar Kushwaha /**
1180a2a55e51SPrabhakar Kushwaha  * struct dpni_dest_cfg - Structure representing DPNI destination parameters
1181a2a55e51SPrabhakar Kushwaha  * @dest_type: Destination type
1182a2a55e51SPrabhakar Kushwaha  * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type
1183a2a55e51SPrabhakar Kushwaha  * @priority: Priority selection within the DPIO or DPCON channel; valid values
1184a2a55e51SPrabhakar Kushwaha  *		are 0-1 or 0-7, depending on the number of priorities in that
1185a2a55e51SPrabhakar Kushwaha  *		channel; not relevant for 'DPNI_DEST_NONE' option
1186a2a55e51SPrabhakar Kushwaha  */
1187a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg {
1188a2a55e51SPrabhakar Kushwaha 	enum dpni_dest dest_type;
1189a2a55e51SPrabhakar Kushwaha 	int dest_id;
1190a2a55e51SPrabhakar Kushwaha 	uint8_t priority;
1191a2a55e51SPrabhakar Kushwaha };
1192a2a55e51SPrabhakar Kushwaha 
11931f1c25c7SPrabhakar Kushwaha /**
11941f1c25c7SPrabhakar Kushwaha  * enum dpni_flc_type - DPNI FLC types
11951f1c25c7SPrabhakar Kushwaha  * @DPNI_FLC_USER_DEFINED: select the FLC to be used for user defined value
11961f1c25c7SPrabhakar Kushwaha  * @DPNI_FLC_STASH: select the FLC to be used for stash control
11971f1c25c7SPrabhakar Kushwaha  */
11981f1c25c7SPrabhakar Kushwaha enum dpni_flc_type {
11991f1c25c7SPrabhakar Kushwaha 	DPNI_FLC_USER_DEFINED = 0,
12001f1c25c7SPrabhakar Kushwaha 	DPNI_FLC_STASH = 1,
12011f1c25c7SPrabhakar Kushwaha };
12021f1c25c7SPrabhakar Kushwaha 
12031f1c25c7SPrabhakar Kushwaha /**
12041f1c25c7SPrabhakar Kushwaha  * enum dpni_stash_size - DPNI FLC stashing size
12051f1c25c7SPrabhakar Kushwaha  * @DPNI_STASH_SIZE_0B: no stash
12061f1c25c7SPrabhakar Kushwaha  * @DPNI_STASH_SIZE_64B: stashes 64 bytes
12071f1c25c7SPrabhakar Kushwaha  * @DPNI_STASH_SIZE_128B: stashes 128 bytes
12081f1c25c7SPrabhakar Kushwaha  * @DPNI_STASH_SIZE_192B: stashes 192 bytes
12091f1c25c7SPrabhakar Kushwaha  */
12101f1c25c7SPrabhakar Kushwaha enum dpni_stash_size {
12111f1c25c7SPrabhakar Kushwaha 	DPNI_STASH_SIZE_0B = 0,
12121f1c25c7SPrabhakar Kushwaha 	DPNI_STASH_SIZE_64B = 1,
12131f1c25c7SPrabhakar Kushwaha 	DPNI_STASH_SIZE_128B = 2,
12141f1c25c7SPrabhakar Kushwaha 	DPNI_STASH_SIZE_192B = 3,
12151f1c25c7SPrabhakar Kushwaha };
12161f1c25c7SPrabhakar Kushwaha 
12171f1c25c7SPrabhakar Kushwaha /* DPNI FLC stash options */
12181f1c25c7SPrabhakar Kushwaha 
12191f1c25c7SPrabhakar Kushwaha /* stashes the whole annotation area (up to 192 bytes) */
12201f1c25c7SPrabhakar Kushwaha #define DPNI_FLC_STASH_FRAME_ANNOTATION	0x00000001
12211f1c25c7SPrabhakar Kushwaha 
12221f1c25c7SPrabhakar Kushwaha /**
12231f1c25c7SPrabhakar Kushwaha  * struct dpni_flc_cfg - Structure representing DPNI FLC configuration
12241f1c25c7SPrabhakar Kushwaha  * @flc_type: FLC type
12251f1c25c7SPrabhakar Kushwaha  * @options: Mask of available options;
12261f1c25c7SPrabhakar Kushwaha  *	use 'DPNI_FLC_STASH_<X>' values
12271f1c25c7SPrabhakar Kushwaha  * @frame_data_size: Size of frame data to be stashed
12281f1c25c7SPrabhakar Kushwaha  * @flow_context_size: Size of flow context to be stashed
12291f1c25c7SPrabhakar Kushwaha  * @flow_context: 1. In case flc_type is 'DPNI_FLC_USER_DEFINED':
12301f1c25c7SPrabhakar Kushwaha  *			this value will be provided in the frame descriptor
12311f1c25c7SPrabhakar Kushwaha  *			(FD[FLC])
12321f1c25c7SPrabhakar Kushwaha  *		  2. In case flc_type is 'DPNI_FLC_STASH':
12331f1c25c7SPrabhakar Kushwaha  *			this value will be I/O virtual address of the
12341f1c25c7SPrabhakar Kushwaha  *			flow-context;
12351f1c25c7SPrabhakar Kushwaha  *			Must be cacheline-aligned and DMA-able memory
12361f1c25c7SPrabhakar Kushwaha  */
12371f1c25c7SPrabhakar Kushwaha struct dpni_flc_cfg {
12381f1c25c7SPrabhakar Kushwaha 	enum dpni_flc_type flc_type;
12391f1c25c7SPrabhakar Kushwaha 	uint32_t options;
12401f1c25c7SPrabhakar Kushwaha 	enum dpni_stash_size frame_data_size;
12411f1c25c7SPrabhakar Kushwaha 	enum dpni_stash_size flow_context_size;
12421f1c25c7SPrabhakar Kushwaha 	uint64_t flow_context;
12431f1c25c7SPrabhakar Kushwaha };
12441f1c25c7SPrabhakar Kushwaha 
1245a2a55e51SPrabhakar Kushwaha /* DPNI queue modification options */
1246a2a55e51SPrabhakar Kushwaha 
1247a2a55e51SPrabhakar Kushwaha /* Select to modify the user's context associated with the queue */
1248a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_USER_CTX		0x00000001
1249a2a55e51SPrabhakar Kushwaha /* Select to modify the queue's destination */
1250a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_DEST		0x00000002
12511f1c25c7SPrabhakar Kushwaha /** Select to modify the flow-context parameters;
12521f1c25c7SPrabhakar Kushwaha  * not applicable for Tx-conf/Err queues as the FD comes from the user
12531f1c25c7SPrabhakar Kushwaha  */
12541f1c25c7SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_FLC		0x00000004
125587457d11SPrabhakar Kushwaha /* Select to modify the queue's order preservation */
125687457d11SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_ORDER_PRESERVATION 0x00000008
1257a2a55e51SPrabhakar Kushwaha 
1258a2a55e51SPrabhakar Kushwaha /**
1259a2a55e51SPrabhakar Kushwaha  * struct dpni_queue_cfg - Structure representing queue configuration
1260a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the queue;
1261a2a55e51SPrabhakar Kushwaha  *		Use any combination of 'DPNI_QUEUE_OPT_<X>' flags
1262a2a55e51SPrabhakar Kushwaha  * @user_ctx: User context value provided in the frame descriptor of each
1263a2a55e51SPrabhakar Kushwaha  *		dequeued frame; valid only if 'DPNI_QUEUE_OPT_USER_CTX'
1264a2a55e51SPrabhakar Kushwaha  *		is contained in 'options'
1265a2a55e51SPrabhakar Kushwaha  * @dest_cfg: Queue destination parameters;
1266a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options'
12671f1c25c7SPrabhakar Kushwaha  * @flc_cfg: Flow context configuration; in case the TC's distribution
12681f1c25c7SPrabhakar Kushwaha  *		is either NONE or HASH the FLC's settings of flow#0 are used.
12691f1c25c7SPrabhakar Kushwaha  *		in the case of FS (flow-steering) the flow's FLC settings
12701f1c25c7SPrabhakar Kushwaha  *		are used.
12711f1c25c7SPrabhakar Kushwaha  *		valid only if 'DPNI_QUEUE_OPT_FLC' is contained in 'options'
127287457d11SPrabhakar Kushwaha  * @order_preservation_en: enable/disable order preservation;
127387457d11SPrabhakar Kushwaha  *		valid only if 'DPNI_QUEUE_OPT_ORDER_PRESERVATION' is contained
127487457d11SPrabhakar Kushwaha  *		in 'options'
1275a2a55e51SPrabhakar Kushwaha  */
1276a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg {
1277a2a55e51SPrabhakar Kushwaha 	uint32_t options;
1278a2a55e51SPrabhakar Kushwaha 	uint64_t user_ctx;
1279a2a55e51SPrabhakar Kushwaha 	struct dpni_dest_cfg dest_cfg;
12801f1c25c7SPrabhakar Kushwaha 	struct dpni_flc_cfg flc_cfg;
128187457d11SPrabhakar Kushwaha 	int order_preservation_en;
1282a2a55e51SPrabhakar Kushwaha };
1283a2a55e51SPrabhakar Kushwaha 
1284a2a55e51SPrabhakar Kushwaha /**
1285a2a55e51SPrabhakar Kushwaha  * struct dpni_queue_attr - Structure representing queue attributes
1286a2a55e51SPrabhakar Kushwaha  * @user_ctx: User context value provided in the frame descriptor of each
1287a2a55e51SPrabhakar Kushwaha  *	dequeued frame
1288a2a55e51SPrabhakar Kushwaha  * @dest_cfg: Queue destination configuration
12891f1c25c7SPrabhakar Kushwaha  * @flc_cfg: Flow context configuration
129087457d11SPrabhakar Kushwaha  * @order_preservation_en: enable/disable order preservation
1291a2a55e51SPrabhakar Kushwaha  * @fqid: Virtual fqid value to be used for dequeue operations
1292a2a55e51SPrabhakar Kushwaha  */
1293a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr {
1294a2a55e51SPrabhakar Kushwaha 	uint64_t user_ctx;
1295a2a55e51SPrabhakar Kushwaha 	struct dpni_dest_cfg dest_cfg;
12961f1c25c7SPrabhakar Kushwaha 	struct dpni_flc_cfg flc_cfg;
129787457d11SPrabhakar Kushwaha 	int order_preservation_en;
1298a2a55e51SPrabhakar Kushwaha 	uint32_t fqid;
1299a2a55e51SPrabhakar Kushwaha };
1300a2a55e51SPrabhakar Kushwaha 
1301a2a55e51SPrabhakar Kushwaha /* DPNI Tx flow modification options */
1302a2a55e51SPrabhakar Kushwaha 
1303a2a55e51SPrabhakar Kushwaha /* Select to modify the settings for dedicate Tx confirmation/error */
1304a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_TX_CONF_ERROR	0x00000001
1305a2a55e51SPrabhakar Kushwaha /*!< Select to modify the Tx confirmation and/or error setting */
1306a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_ONLY_TX_ERROR	0x00000002
1307a2a55e51SPrabhakar Kushwaha /*!< Select to modify the queue configuration */
1308a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_QUEUE		0x00000004
1309a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L3 checksum generation setting */
1310a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN	0x00000010
1311a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L4 checksum generation setting */
1312a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN	0x00000020
1313a2a55e51SPrabhakar Kushwaha 
1314a2a55e51SPrabhakar Kushwaha /**
1315a2a55e51SPrabhakar Kushwaha  * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration
1316a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the Tx flow;
1317a2a55e51SPrabhakar Kushwaha  *		Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags
1318a2a55e51SPrabhakar Kushwaha  * @conf_err_cfg: Tx confirmation and error configuration; these settings are
1319a2a55e51SPrabhakar Kushwaha  *		ignored if 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' was set at
1320a2a55e51SPrabhakar Kushwaha  *		DPNI creation
1321a2a55e51SPrabhakar Kushwaha  * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable;
1322a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in
1323a2a55e51SPrabhakar Kushwaha  *		'options'
1324a2a55e51SPrabhakar Kushwaha  * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable;
1325a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in
1326a2a55e51SPrabhakar Kushwaha  *		'options'
1327a2a55e51SPrabhakar Kushwaha  */
1328a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_cfg {
1329a2a55e51SPrabhakar Kushwaha 	uint32_t options;
1330a2a55e51SPrabhakar Kushwaha 	/**
1331a2a55e51SPrabhakar Kushwaha 	 * struct cnf_err_cfg - Tx confirmation and error configuration
1332a2a55e51SPrabhakar Kushwaha 	 * @use_default_queue: Set to '1' to use the common (default) Tx
1333a2a55e51SPrabhakar Kushwaha 	 *		confirmation and error queue; Set to '0' to use the
1334a2a55e51SPrabhakar Kushwaha 	 *		private Tx confirmation and error queue; valid only if
1335a2a55e51SPrabhakar Kushwaha 	 *		'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in
1336a2a55e51SPrabhakar Kushwaha 	 *		'options'
1337a2a55e51SPrabhakar Kushwaha 	 * @errors_only: Set to '1' to report back only error frames;
1338a2a55e51SPrabhakar Kushwaha 	 *		Set to '0' to confirm transmission/error for all
1339a2a55e51SPrabhakar Kushwaha 	 *		transmitted frames;
1340a2a55e51SPrabhakar Kushwaha 	 *		valid only if 'DPNI_TX_FLOW_OPT_ONLY_TX_ERROR' is
1341a2a55e51SPrabhakar Kushwaha 	 *		contained in 'options' and 'use_default_queue = 0';
1342a2a55e51SPrabhakar Kushwaha 	 * @queue_cfg: Queue configuration; valid only if
1343a2a55e51SPrabhakar Kushwaha 	 *		'DPNI_TX_FLOW_OPT_QUEUE' is contained in 'options'
1344a2a55e51SPrabhakar Kushwaha 	 */
1345a2a55e51SPrabhakar Kushwaha 	struct {
1346a2a55e51SPrabhakar Kushwaha 		int use_default_queue;
1347a2a55e51SPrabhakar Kushwaha 		int errors_only;
1348a2a55e51SPrabhakar Kushwaha 		struct dpni_queue_cfg queue_cfg;
1349a2a55e51SPrabhakar Kushwaha 	} conf_err_cfg;
1350a2a55e51SPrabhakar Kushwaha 	int l3_chksum_gen;
1351a2a55e51SPrabhakar Kushwaha 	int l4_chksum_gen;
1352a2a55e51SPrabhakar Kushwaha };
1353a2a55e51SPrabhakar Kushwaha 
1354a2a55e51SPrabhakar Kushwaha /**
1355a2a55e51SPrabhakar Kushwaha  * dpni_set_tx_flow() - Set Tx flow configuration
1356a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
135787457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1358a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1359a2a55e51SPrabhakar Kushwaha  * @flow_id:	Provides (or returns) the sender's flow ID;
1360a2a55e51SPrabhakar Kushwaha  *				for each new sender set (*flow_id) to
1361a2a55e51SPrabhakar Kushwaha  *				'DPNI_NEW_FLOW_ID' to generate a new flow_id;
1362a2a55e51SPrabhakar Kushwaha  *				this ID should be used as the QDBIN argument
1363a2a55e51SPrabhakar Kushwaha  *				in enqueue operations
1364a2a55e51SPrabhakar Kushwaha  * @cfg:	Tx flow configuration
1365a2a55e51SPrabhakar Kushwaha  *
1366a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1367a2a55e51SPrabhakar Kushwaha  */
1368a2a55e51SPrabhakar Kushwaha int dpni_set_tx_flow(struct fsl_mc_io			*mc_io,
136987457d11SPrabhakar Kushwaha 		     uint32_t				cmd_flags,
1370a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
1371a2a55e51SPrabhakar Kushwaha 		     uint16_t				*flow_id,
1372a2a55e51SPrabhakar Kushwaha 		     const struct dpni_tx_flow_cfg	*cfg);
1373a2a55e51SPrabhakar Kushwaha 
1374a2a55e51SPrabhakar Kushwaha /**
1375a2a55e51SPrabhakar Kushwaha  * struct dpni_tx_flow_attr - Structure representing Tx flow attributes
1376a2a55e51SPrabhakar Kushwaha  * @conf_err_attr: Tx confirmation and error attributes
1377a2a55e51SPrabhakar Kushwaha  * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled
1378a2a55e51SPrabhakar Kushwaha  * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled
1379a2a55e51SPrabhakar Kushwaha  */
1380a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr {
1381a2a55e51SPrabhakar Kushwaha 	/**
1382a2a55e51SPrabhakar Kushwaha 	 * struct conf_err_attr - Tx confirmation and error attributes
1383a2a55e51SPrabhakar Kushwaha 	 * @use_default_queue: '1' if using common (default) Tx confirmation and
1384a2a55e51SPrabhakar Kushwaha 	 *			error queue;
1385a2a55e51SPrabhakar Kushwaha 	 *			'0' if using private Tx confirmation and error
1386a2a55e51SPrabhakar Kushwaha 	 *			queue
1387a2a55e51SPrabhakar Kushwaha 	 * @errors_only: '1' if only error frames are reported back; '0' if all
1388a2a55e51SPrabhakar Kushwaha 	 *		transmitted frames are confirmed
1389a2a55e51SPrabhakar Kushwaha 	 * @queue_attr: Queue attributes
1390a2a55e51SPrabhakar Kushwaha 	 */
1391a2a55e51SPrabhakar Kushwaha 	struct {
1392a2a55e51SPrabhakar Kushwaha 		int use_default_queue;
1393a2a55e51SPrabhakar Kushwaha 		int errors_only;
1394a2a55e51SPrabhakar Kushwaha 		struct dpni_queue_attr queue_attr;
1395a2a55e51SPrabhakar Kushwaha 	} conf_err_attr;
1396a2a55e51SPrabhakar Kushwaha 	int l3_chksum_gen;
1397a2a55e51SPrabhakar Kushwaha 	int l4_chksum_gen;
1398a2a55e51SPrabhakar Kushwaha };
1399a2a55e51SPrabhakar Kushwaha 
1400a2a55e51SPrabhakar Kushwaha /**
1401a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_flow() - Get Tx flow attributes
1402a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
140387457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1404a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1405a2a55e51SPrabhakar Kushwaha  * @flow_id:	The sender's flow ID, as returned by the
1406a2a55e51SPrabhakar Kushwaha  *			dpni_set_tx_flow() function
1407a2a55e51SPrabhakar Kushwaha  * @attr:	Returned Tx flow attributes
1408a2a55e51SPrabhakar Kushwaha  *
1409a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1410a2a55e51SPrabhakar Kushwaha  */
1411a2a55e51SPrabhakar Kushwaha int dpni_get_tx_flow(struct fsl_mc_io		*mc_io,
141287457d11SPrabhakar Kushwaha 		     uint32_t			cmd_flags,
1413a2a55e51SPrabhakar Kushwaha 		     uint16_t			token,
1414a2a55e51SPrabhakar Kushwaha 		     uint16_t			flow_id,
1415a2a55e51SPrabhakar Kushwaha 		     struct dpni_tx_flow_attr	*attr);
1416a2a55e51SPrabhakar Kushwaha 
1417a2a55e51SPrabhakar Kushwaha /**
1418a2a55e51SPrabhakar Kushwaha  * dpni_set_rx_flow() - Set Rx flow configuration
1419a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
142087457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1421a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1422a2a55e51SPrabhakar Kushwaha  * @tc_id:	Traffic class selection (0-7);
1423a2a55e51SPrabhakar Kushwaha  *			use 'DPNI_ALL_TCS' to set all TCs and all flows
142487457d11SPrabhakar Kushwaha  * @flow_id:	Rx flow id within the traffic class; use
1425a2a55e51SPrabhakar Kushwaha  *			'DPNI_ALL_TC_FLOWS' to set all flows within
1426a2a55e51SPrabhakar Kushwaha  *			this tc_id; ignored if tc_id is set to
1427a2a55e51SPrabhakar Kushwaha  *			'DPNI_ALL_TCS';
1428a2a55e51SPrabhakar Kushwaha  * @cfg:	Rx flow configuration
1429a2a55e51SPrabhakar Kushwaha  *
1430a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1431a2a55e51SPrabhakar Kushwaha  */
1432a2a55e51SPrabhakar Kushwaha int dpni_set_rx_flow(struct fsl_mc_io			*mc_io,
143387457d11SPrabhakar Kushwaha 		     uint32_t				cmd_flags,
1434a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
1435a2a55e51SPrabhakar Kushwaha 		     uint8_t				tc_id,
1436a2a55e51SPrabhakar Kushwaha 		     uint16_t				flow_id,
1437a2a55e51SPrabhakar Kushwaha 		     const struct dpni_queue_cfg	*cfg);
1438a2a55e51SPrabhakar Kushwaha 
1439a2a55e51SPrabhakar Kushwaha /**
1440a2a55e51SPrabhakar Kushwaha  * dpni_get_rx_flow() -	Get Rx flow attributes
1441a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
144287457d11SPrabhakar Kushwaha  * @cmd_flags:	Command flags; one or more of 'MC_CMD_FLAG_'
1443a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1444a2a55e51SPrabhakar Kushwaha  * @tc_id:	Traffic class selection (0-7)
1445a2a55e51SPrabhakar Kushwaha  * @flow_id:	Rx flow id within the traffic class
1446a2a55e51SPrabhakar Kushwaha  * @attr:	Returned Rx flow attributes
1447a2a55e51SPrabhakar Kushwaha  *
1448a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1449a2a55e51SPrabhakar Kushwaha  */
1450a2a55e51SPrabhakar Kushwaha int dpni_get_rx_flow(struct fsl_mc_io		*mc_io,
145187457d11SPrabhakar Kushwaha 		     uint32_t			cmd_flags,
1452a2a55e51SPrabhakar Kushwaha 		     uint16_t			token,
1453a2a55e51SPrabhakar Kushwaha 		     uint8_t			tc_id,
1454a2a55e51SPrabhakar Kushwaha 		     uint16_t			flow_id,
1455a2a55e51SPrabhakar Kushwaha 		     struct dpni_queue_attr	*attr);
1456a2a55e51SPrabhakar Kushwaha 
1457a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPNI_H */
1458