xref: /rk3399_rockchip-uboot/include/fsl-mc/fsl_dpni.h (revision a2a55e518f81900ab1538656e5df8d2759ccb1fb)
1*a2a55e51SPrabhakar Kushwaha /*
2*a2a55e51SPrabhakar Kushwaha  * Copyright (C) 2013-2015 Freescale Semiconductor
3*a2a55e51SPrabhakar Kushwaha  *
4*a2a55e51SPrabhakar Kushwaha  * SPDX-License-Identifier:	GPL-2.0+
5*a2a55e51SPrabhakar Kushwaha  */
6*a2a55e51SPrabhakar Kushwaha #ifndef _FSL_DPNI_H
7*a2a55e51SPrabhakar Kushwaha #define _FSL_DPNI_H
8*a2a55e51SPrabhakar Kushwaha 
9*a2a55e51SPrabhakar Kushwaha /* DPNI Version */
10*a2a55e51SPrabhakar Kushwaha #define DPNI_VER_MAJOR				4
11*a2a55e51SPrabhakar Kushwaha #define DPNI_VER_MINOR				0
12*a2a55e51SPrabhakar Kushwaha 
13*a2a55e51SPrabhakar Kushwaha /* Command IDs */
14*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_OPEN				0x801
15*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_CLOSE			0x800
16*a2a55e51SPrabhakar Kushwaha 
17*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ENABLE			0x002
18*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_DISABLE			0x003
19*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_ATTR			0x004
20*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_RESET			0x005
21*a2a55e51SPrabhakar Kushwaha 
22*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_POOLS			0x200
23*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_BUFFER_LAYOUT		0x201
24*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_BUFFER_LAYOUT		0x202
25*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_BUFFER_LAYOUT		0x203
26*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_BUFFER_LAYOUT		0x204
27*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_CONF_BUFFER_LAYOUT	0x205
28*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_CONF_BUFFER_LAYOUT	0x206
29*a2a55e51SPrabhakar Kushwaha 
30*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_QDID			0x210
31*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_DATA_OFFSET		0x212
32*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_COUNTER			0x213
33*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_COUNTER			0x214
34*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_LINK_STATE		0x215
35*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_LINK_CFG		0x21A
36*a2a55e51SPrabhakar Kushwaha 
37*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_PRIM_MAC			0x224
38*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_PRIM_MAC			0x225
39*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_ADD_MAC_ADDR			0x226
40*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_REMOVE_MAC_ADDR		0x227
41*a2a55e51SPrabhakar Kushwaha 
42*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_TX_FLOW			0x236
43*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_TX_FLOW			0x237
44*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_SET_RX_FLOW			0x238
45*a2a55e51SPrabhakar Kushwaha #define DPNI_CMDID_GET_RX_FLOW			0x239
46*a2a55e51SPrabhakar Kushwaha 
47*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
48*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_OPEN(cmd, dpni_id) \
49*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd,	 0,	0,	32,	int,	dpni_id)
50*a2a55e51SPrabhakar Kushwaha 
51*a2a55e51SPrabhakar Kushwaha 
52*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
53*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_POOLS(cmd, cfg) \
54*a2a55e51SPrabhakar Kushwaha do { \
55*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  8,  uint8_t,  cfg->num_dpbp); \
56*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, int,      cfg->pools[0].dpbp_id); \
57*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 32, 16, uint16_t, cfg->pools[0].buffer_size);\
58*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  32, int,      cfg->pools[1].dpbp_id); \
59*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 48, 16, uint16_t, cfg->pools[1].buffer_size);\
60*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 32, int,      cfg->pools[2].dpbp_id); \
61*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 0,  16, uint16_t, cfg->pools[2].buffer_size);\
62*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  32, int,      cfg->pools[3].dpbp_id); \
63*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 16, 16, uint16_t, cfg->pools[3].buffer_size);\
64*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32, 32, int,      cfg->pools[4].dpbp_id); \
65*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 32, 16, uint16_t, cfg->pools[4].buffer_size);\
66*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 0,  32, int,      cfg->pools[5].dpbp_id); \
67*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 5, 48, 16, uint16_t, cfg->pools[5].buffer_size);\
68*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 3, 32, 32, int,      cfg->pools[6].dpbp_id); \
69*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 0,  16, uint16_t, cfg->pools[6].buffer_size);\
70*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 4, 0,  32, int,      cfg->pools[7].dpbp_id); \
71*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 6, 16, 16, uint16_t, cfg->pools[7].buffer_size);\
72*a2a55e51SPrabhakar Kushwaha } while (0)
73*a2a55e51SPrabhakar Kushwaha 
74*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
75*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_ATTR(cmd, attr) \
76*a2a55e51SPrabhakar Kushwaha do { \
77*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,	    attr->id);\
78*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->max_tcs); \
79*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 8,  uint8_t,  attr->max_senders); \
80*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 8,  enum net_prot, attr->start_hdr); \
81*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->options); \
82*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  8,  uint8_t,  attr->max_unicast_filters); \
83*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 8,  8,  uint8_t,  attr->max_multicast_filters);\
84*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 16, 8,  uint8_t,  attr->max_vlan_filters); \
85*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 24, 8,  uint8_t,  attr->max_qos_entries); \
86*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 8,  uint8_t,  attr->max_qos_key_size); \
87*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 40, 8,  uint8_t,  attr->max_dist_key_size); \
88*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 0,  8,  uint8_t,  attr->max_dist_per_tc[0]); \
89*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 8,  8,  uint8_t,  attr->max_dist_per_tc[1]); \
90*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 16, 8,  uint8_t,  attr->max_dist_per_tc[2]); \
91*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 24, 8,  uint8_t,  attr->max_dist_per_tc[3]); \
92*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 32, 8,  uint8_t,  attr->max_dist_per_tc[4]); \
93*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 40, 8,  uint8_t,  attr->max_dist_per_tc[5]); \
94*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 48, 8,  uint8_t,  attr->max_dist_per_tc[6]); \
95*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 3, 56, 8,  uint8_t,  attr->max_dist_per_tc[7]); \
96*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 0,	16, uint16_t, \
97*a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.max_reass_frm_size); \
98*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 16,	16, uint16_t, \
99*a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.min_frag_size_ipv4); \
100*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 4, 32,	16, uint16_t, \
101*a2a55e51SPrabhakar Kushwaha 				    attr->ipr_cfg.min_frag_size_ipv6); \
102*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 0,	16, uint16_t, \
103*a2a55e51SPrabhakar Kushwaha 				  attr->ipr_cfg.max_open_frames_ipv4); \
104*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 16,	16, uint16_t, \
105*a2a55e51SPrabhakar Kushwaha 				  attr->ipr_cfg.max_open_frames_ipv6); \
106*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 32, 16, uint16_t, attr->version.major);\
107*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 5, 48, 16, uint16_t, attr->version.minor);\
108*a2a55e51SPrabhakar Kushwaha } while (0)
109*a2a55e51SPrabhakar Kushwaha 
110*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
111*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_BUFFER_LAYOUT(cmd, layout) \
112*a2a55e51SPrabhakar Kushwaha do { \
113*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
114*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
115*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
116*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
117*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
118*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
119*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
120*a2a55e51SPrabhakar Kushwaha } while (0)
121*a2a55e51SPrabhakar Kushwaha 
122*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
123*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_BUFFER_LAYOUT(cmd, layout) \
124*a2a55e51SPrabhakar Kushwaha do { \
125*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
126*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
127*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
128*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
129*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
130*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
131*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
132*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
133*a2a55e51SPrabhakar Kushwaha } while (0)
134*a2a55e51SPrabhakar Kushwaha 
135*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
136*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_BUFFER_LAYOUT(cmd, layout) \
137*a2a55e51SPrabhakar Kushwaha do { \
138*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
139*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
140*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,      layout->pass_timestamp); \
141*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
142*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
143*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
144*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
145*a2a55e51SPrabhakar Kushwaha } while (0)
146*a2a55e51SPrabhakar Kushwaha 
147*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
148*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_BUFFER_LAYOUT(cmd, layout) \
149*a2a55e51SPrabhakar Kushwaha do { \
150*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
151*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
152*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
153*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
154*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
155*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
156*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
157*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
158*a2a55e51SPrabhakar Kushwaha } while (0)
159*a2a55e51SPrabhakar Kushwaha 
160*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
161*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \
162*a2a55e51SPrabhakar Kushwaha do { \
163*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
164*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
165*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  1,  int,      layout->pass_timestamp); \
166*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
167*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
168*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
169*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
170*a2a55e51SPrabhakar Kushwaha } while (0)
171*a2a55e51SPrabhakar Kushwaha 
172*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
173*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_CONF_BUFFER_LAYOUT(cmd, layout) \
174*a2a55e51SPrabhakar Kushwaha do { \
175*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, uint16_t, layout->private_data_size); \
176*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 16, uint16_t, layout->data_align); \
177*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 32, uint32_t, layout->options); \
178*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  1,  int,	    layout->pass_timestamp); \
179*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 1,  1,  int,	    layout->pass_parser_result); \
180*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 2,  1,  int,	    layout->pass_frame_status); \
181*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 16, 16, uint16_t, layout->data_head_room); \
182*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 32, 16, uint16_t, layout->data_tail_room); \
183*a2a55e51SPrabhakar Kushwaha } while (0)
184*a2a55e51SPrabhakar Kushwaha 
185*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
186*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_QDID(cmd, qdid) \
187*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, qdid)
188*a2a55e51SPrabhakar Kushwaha 
189*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
190*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_DATA_OFFSET(cmd, data_offset) \
191*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  16, uint16_t, data_offset)
192*a2a55e51SPrabhakar Kushwaha 
193*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
194*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_COUNTER(cmd, counter) \
195*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, enum dpni_counter, counter)
196*a2a55e51SPrabhakar Kushwaha 
197*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
198*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_COUNTER(cmd, value) \
199*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, value)
200*a2a55e51SPrabhakar Kushwaha 
201*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
202*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_COUNTER(cmd, counter, value) \
203*a2a55e51SPrabhakar Kushwaha do { \
204*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  16, enum dpni_counter, counter); \
205*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, value); \
206*a2a55e51SPrabhakar Kushwaha } while (0)
207*a2a55e51SPrabhakar Kushwaha 
208*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
209*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_LINK_CFG(cmd, cfg) \
210*a2a55e51SPrabhakar Kushwaha do { \
211*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->rate);\
212*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  64, uint64_t, cfg->options);\
213*a2a55e51SPrabhakar Kushwaha } while (0)
214*a2a55e51SPrabhakar Kushwaha 
215*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
216*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_LINK_STATE(cmd, state) \
217*a2a55e51SPrabhakar Kushwaha do { \
218*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32,  1, int,      state->up);\
219*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, state->rate);\
220*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 0,  64, uint64_t, state->options);\
221*a2a55e51SPrabhakar Kushwaha } while (0)
222*a2a55e51SPrabhakar Kushwaha 
223*a2a55e51SPrabhakar Kushwaha 
224*a2a55e51SPrabhakar Kushwaha 
225*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
226*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_PRIMARY_MAC_ADDR(cmd, mac_addr) \
227*a2a55e51SPrabhakar Kushwaha do { \
228*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
229*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
230*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
231*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
232*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
233*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
234*a2a55e51SPrabhakar Kushwaha } while (0)
235*a2a55e51SPrabhakar Kushwaha 
236*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
237*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_PRIMARY_MAC_ADDR(cmd, mac_addr) \
238*a2a55e51SPrabhakar Kushwaha do { \
239*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
240*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
241*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
242*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
243*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
244*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
245*a2a55e51SPrabhakar Kushwaha } while (0)
246*a2a55e51SPrabhakar Kushwaha 
247*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
248*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_ADD_MAC_ADDR(cmd, mac_addr) \
249*a2a55e51SPrabhakar Kushwaha do { \
250*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
251*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
252*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
253*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
254*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
255*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
256*a2a55e51SPrabhakar Kushwaha } while (0)
257*a2a55e51SPrabhakar Kushwaha 
258*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
259*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_REMOVE_MAC_ADDR(cmd, mac_addr) \
260*a2a55e51SPrabhakar Kushwaha do { \
261*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  mac_addr[5]); \
262*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 24, 8,  uint8_t,  mac_addr[4]); \
263*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  mac_addr[3]); \
264*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 8,  uint8_t,  mac_addr[2]); \
265*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 8,  uint8_t,  mac_addr[1]); \
266*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 56, 8,  uint8_t,  mac_addr[0]); \
267*a2a55e51SPrabhakar Kushwaha } while (0)
268*a2a55e51SPrabhakar Kushwaha 
269*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
270*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_TX_FLOW(cmd, flow_id, cfg) \
271*a2a55e51SPrabhakar Kushwaha do { \
272*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,     \
273*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_id);\
274*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t, \
275*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.priority);\
276*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 2,  enum dpni_dest, \
277*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.dest_cfg.dest_type);\
278*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 42, 1,  int,	    cfg->conf_err_cfg.errors_only);\
279*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 43, 1,  int,	    cfg->l3_chksum_gen);\
280*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 44, 1,  int,	    cfg->l4_chksum_gen);\
281*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 45, 1,  int,	    \
282*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.use_default_queue);\
283*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id);\
284*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, \
285*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.user_ctx);\
286*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 0,  32, uint32_t, cfg->options);\
287*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32,  32, uint32_t, \
288*a2a55e51SPrabhakar Kushwaha 			   cfg->conf_err_cfg.queue_cfg.options);\
289*a2a55e51SPrabhakar Kushwaha } while (0)
290*a2a55e51SPrabhakar Kushwaha 
291*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
292*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_SET_TX_FLOW(cmd, flow_id) \
293*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 48, 16, uint16_t, flow_id)
294*a2a55e51SPrabhakar Kushwaha 
295*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
296*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_TX_FLOW(cmd, flow_id) \
297*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id)
298*a2a55e51SPrabhakar Kushwaha 
299*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
300*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_TX_FLOW(cmd, attr) \
301*a2a55e51SPrabhakar Kushwaha do { \
302*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,      \
303*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.dest_id);\
304*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  \
305*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.priority);\
306*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, \
307*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.dest_cfg.dest_type);\
308*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 42, 1,  int,	    attr->conf_err_attr.errors_only);\
309*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 43, 1,  int,	    attr->l3_chksum_gen);\
310*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 44, 1,  int,	    attr->l4_chksum_gen);\
311*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 45, 1,  int,	    \
312*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.use_default_queue);\
313*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, \
314*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.user_ctx);\
315*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 32, uint32_t, \
316*a2a55e51SPrabhakar Kushwaha 			attr->conf_err_attr.queue_attr.fqid);\
317*a2a55e51SPrabhakar Kushwaha } while (0)
318*a2a55e51SPrabhakar Kushwaha 
319*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
320*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_SET_RX_FLOW(cmd, tc_id, flow_id, cfg) \
321*a2a55e51SPrabhakar Kushwaha do { \
322*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 0,  32, int,      cfg->dest_cfg.dest_id); \
323*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 32, 8,  uint8_t,  cfg->dest_cfg.priority);\
324*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 40, 2,  enum dpni_dest, cfg->dest_cfg.dest_type);\
325*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \
326*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 1, 0,  64, uint64_t, cfg->user_ctx); \
327*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 16, 8,  uint8_t,  tc_id); \
328*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 2, 32,  32, uint32_t, cfg->options); \
329*a2a55e51SPrabhakar Kushwaha } while (0)
330*a2a55e51SPrabhakar Kushwaha 
331*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
332*a2a55e51SPrabhakar Kushwaha #define DPNI_CMD_GET_RX_FLOW(cmd, tc_id, flow_id) \
333*a2a55e51SPrabhakar Kushwaha do { \
334*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 16, 8,  uint8_t,  tc_id); \
335*a2a55e51SPrabhakar Kushwaha 	MC_CMD_OP(cmd, 0, 48, 16, uint16_t, flow_id); \
336*a2a55e51SPrabhakar Kushwaha } while (0)
337*a2a55e51SPrabhakar Kushwaha 
338*a2a55e51SPrabhakar Kushwaha /*                cmd, param, offset, width, type, arg_name */
339*a2a55e51SPrabhakar Kushwaha #define DPNI_RSP_GET_RX_FLOW(cmd, attr) \
340*a2a55e51SPrabhakar Kushwaha do { \
341*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 0,  32, int,      attr->dest_cfg.dest_id); \
342*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 32, 8,  uint8_t,  attr->dest_cfg.priority);\
343*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 0, 40, 2,  enum dpni_dest, attr->dest_cfg.dest_type); \
344*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 1, 0,  64, uint64_t, attr->user_ctx); \
345*a2a55e51SPrabhakar Kushwaha 	MC_RSP_OP(cmd, 2, 32, 32, uint32_t, attr->fqid); \
346*a2a55e51SPrabhakar Kushwaha } while (0)
347*a2a55e51SPrabhakar Kushwaha 
348*a2a55e51SPrabhakar Kushwaha enum net_prot {
349*a2a55e51SPrabhakar Kushwaha 	NET_PROT_NONE = 0,
350*a2a55e51SPrabhakar Kushwaha 	NET_PROT_PAYLOAD,
351*a2a55e51SPrabhakar Kushwaha 	NET_PROT_ETH,
352*a2a55e51SPrabhakar Kushwaha 	NET_PROT_VLAN,
353*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPV4,
354*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPV6,
355*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IP,
356*a2a55e51SPrabhakar Kushwaha 	NET_PROT_TCP,
357*a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP,
358*a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP_LITE,
359*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPHC,
360*a2a55e51SPrabhakar Kushwaha 	NET_PROT_SCTP,
361*a2a55e51SPrabhakar Kushwaha 	NET_PROT_SCTP_CHUNK_DATA,
362*a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPOE,
363*a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPP,
364*a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPMUX,
365*a2a55e51SPrabhakar Kushwaha 	NET_PROT_PPPMUX_SUBFRM,
366*a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV2,
367*a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV3_CTRL,
368*a2a55e51SPrabhakar Kushwaha 	NET_PROT_L2TPV3_SESS,
369*a2a55e51SPrabhakar Kushwaha 	NET_PROT_LLC,
370*a2a55e51SPrabhakar Kushwaha 	NET_PROT_LLC_SNAP,
371*a2a55e51SPrabhakar Kushwaha 	NET_PROT_NLPID,
372*a2a55e51SPrabhakar Kushwaha 	NET_PROT_SNAP,
373*a2a55e51SPrabhakar Kushwaha 	NET_PROT_MPLS,
374*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPSEC_AH,
375*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IPSEC_ESP,
376*a2a55e51SPrabhakar Kushwaha 	NET_PROT_UDP_ENC_ESP, /* RFC 3948 */
377*a2a55e51SPrabhakar Kushwaha 	NET_PROT_MACSEC,
378*a2a55e51SPrabhakar Kushwaha 	NET_PROT_GRE,
379*a2a55e51SPrabhakar Kushwaha 	NET_PROT_MINENCAP,
380*a2a55e51SPrabhakar Kushwaha 	NET_PROT_DCCP,
381*a2a55e51SPrabhakar Kushwaha 	NET_PROT_ICMP,
382*a2a55e51SPrabhakar Kushwaha 	NET_PROT_IGMP,
383*a2a55e51SPrabhakar Kushwaha 	NET_PROT_ARP,
384*a2a55e51SPrabhakar Kushwaha 	NET_PROT_CAPWAP_DATA,
385*a2a55e51SPrabhakar Kushwaha 	NET_PROT_CAPWAP_CTRL,
386*a2a55e51SPrabhakar Kushwaha 	NET_PROT_RFC2684,
387*a2a55e51SPrabhakar Kushwaha 	NET_PROT_ICMPV6,
388*a2a55e51SPrabhakar Kushwaha 	NET_PROT_FCOE,
389*a2a55e51SPrabhakar Kushwaha 	NET_PROT_FIP,
390*a2a55e51SPrabhakar Kushwaha 	NET_PROT_ISCSI,
391*a2a55e51SPrabhakar Kushwaha 	NET_PROT_GTP,
392*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L2,
393*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L3,
394*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L4,
395*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_L5,
396*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_SHIM1,
397*a2a55e51SPrabhakar Kushwaha 	NET_PROT_USER_DEFINED_SHIM2,
398*a2a55e51SPrabhakar Kushwaha 
399*a2a55e51SPrabhakar Kushwaha 	NET_PROT_DUMMY_LAST
400*a2a55e51SPrabhakar Kushwaha };
401*a2a55e51SPrabhakar Kushwaha 
402*a2a55e51SPrabhakar Kushwaha /* Data Path Network Interface API
403*a2a55e51SPrabhakar Kushwaha  * Contains initialization APIs and runtime control APIs for DPNI
404*a2a55e51SPrabhakar Kushwaha  */
405*a2a55e51SPrabhakar Kushwaha 
406*a2a55e51SPrabhakar Kushwaha struct fsl_mc_io;
407*a2a55e51SPrabhakar Kushwaha 
408*a2a55e51SPrabhakar Kushwaha /* General DPNI macros */
409*a2a55e51SPrabhakar Kushwaha 
410*a2a55e51SPrabhakar Kushwaha /* Maximum number of traffic classes */
411*a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_TC				8
412*a2a55e51SPrabhakar Kushwaha /* Maximum number of buffer pools per DPNI */
413*a2a55e51SPrabhakar Kushwaha #define DPNI_MAX_DPBP				8
414*a2a55e51SPrabhakar Kushwaha 
415*a2a55e51SPrabhakar Kushwaha /* All traffic classes considered; see dpni_set_rx_flow() */
416*a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TCS				(uint8_t)(-1)
417*a2a55e51SPrabhakar Kushwaha /* All flows within traffic class considered; see dpni_set_rx_flow() */
418*a2a55e51SPrabhakar Kushwaha #define DPNI_ALL_TC_FLOWS			(uint16_t)(-1)
419*a2a55e51SPrabhakar Kushwaha /* Generate new flow ID; see dpni_set_tx_flow() */
420*a2a55e51SPrabhakar Kushwaha #define DPNI_NEW_FLOW_ID			(uint16_t)(-1)
421*a2a55e51SPrabhakar Kushwaha 
422*a2a55e51SPrabhakar Kushwaha /**
423*a2a55e51SPrabhakar Kushwaha  * dpni_open() - Open a control session for the specified object
424*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
425*a2a55e51SPrabhakar Kushwaha  * @dpni_id:	DPNI unique ID
426*a2a55e51SPrabhakar Kushwaha  * @token:	Returned token; use in subsequent API calls
427*a2a55e51SPrabhakar Kushwaha  *
428*a2a55e51SPrabhakar Kushwaha  * This function can be used to open a control session for an
429*a2a55e51SPrabhakar Kushwaha  * already created object; an object may have been declared in
430*a2a55e51SPrabhakar Kushwaha  * the DPL or by calling the dpni_create() function.
431*a2a55e51SPrabhakar Kushwaha  * This function returns a unique authentication token,
432*a2a55e51SPrabhakar Kushwaha  * associated with the specific object ID and the specific MC
433*a2a55e51SPrabhakar Kushwaha  * portal; this token must be used in all subsequent commands for
434*a2a55e51SPrabhakar Kushwaha  * this specific object.
435*a2a55e51SPrabhakar Kushwaha  *
436*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
437*a2a55e51SPrabhakar Kushwaha  */
438*a2a55e51SPrabhakar Kushwaha int dpni_open(struct fsl_mc_io *mc_io, int dpni_id, uint16_t *token);
439*a2a55e51SPrabhakar Kushwaha 
440*a2a55e51SPrabhakar Kushwaha /**
441*a2a55e51SPrabhakar Kushwaha  * dpni_close() - Close the control session of the object
442*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
443*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
444*a2a55e51SPrabhakar Kushwaha  *
445*a2a55e51SPrabhakar Kushwaha  * After this function is called, no further operations are
446*a2a55e51SPrabhakar Kushwaha  * allowed on the object without opening a new control session.
447*a2a55e51SPrabhakar Kushwaha  *
448*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
449*a2a55e51SPrabhakar Kushwaha  */
450*a2a55e51SPrabhakar Kushwaha int dpni_close(struct fsl_mc_io *mc_io, uint16_t token);
451*a2a55e51SPrabhakar Kushwaha 
452*a2a55e51SPrabhakar Kushwaha /**
453*a2a55e51SPrabhakar Kushwaha  * struct dpni_ipr_cfg - Structure representing IP reassembly configuration
454*a2a55e51SPrabhakar Kushwaha  * @max_reass_frm_size: Maximum size of the reassembled frame
455*a2a55e51SPrabhakar Kushwaha  * @min_frag_size_ipv4: Minimum fragment size of IPv4 fragments
456*a2a55e51SPrabhakar Kushwaha  * @min_frag_size_ipv6: Minimum fragment size of IPv6 fragments
457*a2a55e51SPrabhakar Kushwaha  * @max_open_frames_ipv4: Maximum concurrent IPv4 packets in reassembly process
458*a2a55e51SPrabhakar Kushwaha  * @max_open_frames_ipv6: Maximum concurrent IPv6 packets in reassembly process
459*a2a55e51SPrabhakar Kushwaha  */
460*a2a55e51SPrabhakar Kushwaha struct dpni_ipr_cfg {
461*a2a55e51SPrabhakar Kushwaha 	uint16_t max_reass_frm_size;
462*a2a55e51SPrabhakar Kushwaha 	uint16_t min_frag_size_ipv4;
463*a2a55e51SPrabhakar Kushwaha 	uint16_t min_frag_size_ipv6;
464*a2a55e51SPrabhakar Kushwaha 	uint16_t max_open_frames_ipv4;
465*a2a55e51SPrabhakar Kushwaha 	uint16_t max_open_frames_ipv6;
466*a2a55e51SPrabhakar Kushwaha };
467*a2a55e51SPrabhakar Kushwaha 
468*a2a55e51SPrabhakar Kushwaha /**
469*a2a55e51SPrabhakar Kushwaha  * struct dpni_pools_cfg - Structure representing buffer pools configuration
470*a2a55e51SPrabhakar Kushwaha  * @num_dpbp: Number of DPBPs
471*a2a55e51SPrabhakar Kushwaha  * @pools: Array of buffer pools parameters; The number of valid entries
472*a2a55e51SPrabhakar Kushwaha  *	must match 'num_dpbp' value
473*a2a55e51SPrabhakar Kushwaha  */
474*a2a55e51SPrabhakar Kushwaha struct dpni_pools_cfg {
475*a2a55e51SPrabhakar Kushwaha 	uint8_t num_dpbp;
476*a2a55e51SPrabhakar Kushwaha 	/**
477*a2a55e51SPrabhakar Kushwaha 	 * struct pools - Buffer pools parameters
478*a2a55e51SPrabhakar Kushwaha 	 * @dpbp_id: DPBP object ID
479*a2a55e51SPrabhakar Kushwaha 	 * @buffer_size: Buffer size
480*a2a55e51SPrabhakar Kushwaha 	 */
481*a2a55e51SPrabhakar Kushwaha 	struct {
482*a2a55e51SPrabhakar Kushwaha 		int dpbp_id;
483*a2a55e51SPrabhakar Kushwaha 		uint16_t buffer_size;
484*a2a55e51SPrabhakar Kushwaha 	} pools[DPNI_MAX_DPBP];
485*a2a55e51SPrabhakar Kushwaha };
486*a2a55e51SPrabhakar Kushwaha 
487*a2a55e51SPrabhakar Kushwaha /**
488*a2a55e51SPrabhakar Kushwaha  * dpni_set_pools() - Set buffer pools configuration
489*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
490*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
491*a2a55e51SPrabhakar Kushwaha  * @cfg:	Buffer pools configuration
492*a2a55e51SPrabhakar Kushwaha  *
493*a2a55e51SPrabhakar Kushwaha  * mandatory for DPNI operation
494*a2a55e51SPrabhakar Kushwaha  * warning:Allowed only when DPNI is disabled
495*a2a55e51SPrabhakar Kushwaha  *
496*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
497*a2a55e51SPrabhakar Kushwaha  */
498*a2a55e51SPrabhakar Kushwaha int dpni_set_pools(struct fsl_mc_io		*mc_io,
499*a2a55e51SPrabhakar Kushwaha 		   uint16_t			token,
500*a2a55e51SPrabhakar Kushwaha 		   const struct dpni_pools_cfg	*cfg);
501*a2a55e51SPrabhakar Kushwaha 
502*a2a55e51SPrabhakar Kushwaha /**
503*a2a55e51SPrabhakar Kushwaha  * dpni_enable() - Enable the DPNI, allow sending and receiving frames.
504*a2a55e51SPrabhakar Kushwaha  * @mc_io:		Pointer to MC portal's I/O object
505*a2a55e51SPrabhakar Kushwaha  * @token:		Token of DPNI object
506*a2a55e51SPrabhakar Kushwaha  *
507*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
508*a2a55e51SPrabhakar Kushwaha  */
509*a2a55e51SPrabhakar Kushwaha int dpni_enable(struct fsl_mc_io *mc_io, uint16_t token);
510*a2a55e51SPrabhakar Kushwaha 
511*a2a55e51SPrabhakar Kushwaha /**
512*a2a55e51SPrabhakar Kushwaha  * dpni_disable() - Disable the DPNI, stop sending and receiving frames.
513*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
514*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
515*a2a55e51SPrabhakar Kushwaha  *
516*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
517*a2a55e51SPrabhakar Kushwaha  */
518*a2a55e51SPrabhakar Kushwaha int dpni_disable(struct fsl_mc_io *mc_io, uint16_t token);
519*a2a55e51SPrabhakar Kushwaha 
520*a2a55e51SPrabhakar Kushwaha 
521*a2a55e51SPrabhakar Kushwaha /**
522*a2a55e51SPrabhakar Kushwaha  * @dpni_reset() - Reset the DPNI, returns the object to initial state.
523*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
524*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
525*a2a55e51SPrabhakar Kushwaha  *
526*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
527*a2a55e51SPrabhakar Kushwaha  */
528*a2a55e51SPrabhakar Kushwaha int dpni_reset(struct fsl_mc_io *mc_io, uint16_t token);
529*a2a55e51SPrabhakar Kushwaha 
530*a2a55e51SPrabhakar Kushwaha /**
531*a2a55e51SPrabhakar Kushwaha  * struct dpni_attr - Structure representing DPNI attributes
532*a2a55e51SPrabhakar Kushwaha  * @id: DPNI object ID
533*a2a55e51SPrabhakar Kushwaha  * @version: DPNI version
534*a2a55e51SPrabhakar Kushwaha  * @start_hdr: Indicates the packet starting header for parsing
535*a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; reflects the value as was given in
536*a2a55e51SPrabhakar Kushwaha  *		object's creation
537*a2a55e51SPrabhakar Kushwaha  * @max_senders: Maximum number of different senders; used as the number
538*a2a55e51SPrabhakar Kushwaha  *		of dedicated Tx flows;
539*a2a55e51SPrabhakar Kushwaha  * @max_tcs: Maximum number of traffic classes (for both Tx and Rx)
540*a2a55e51SPrabhakar Kushwaha  * @max_dist_per_tc: Maximum distribution size per Rx traffic class;
541*a2a55e51SPrabhakar Kushwaha  *			Set to the required value minus 1
542*a2a55e51SPrabhakar Kushwaha  * @max_unicast_filters: Maximum number of unicast filters
543*a2a55e51SPrabhakar Kushwaha  * @max_multicast_filters: Maximum number of multicast filters
544*a2a55e51SPrabhakar Kushwaha  * @max_vlan_filters: Maximum number of VLAN filters
545*a2a55e51SPrabhakar Kushwaha  * @max_qos_entries: if 'max_tcs > 1', declares the maximum entries in QoS table
546*a2a55e51SPrabhakar Kushwaha  * @max_qos_key_size: Maximum key size for the QoS look-up
547*a2a55e51SPrabhakar Kushwaha  * @max_dist_key_size: Maximum key size for the distribution look-up
548*a2a55e51SPrabhakar Kushwaha  * @ipr_cfg: IP reassembly configuration
549*a2a55e51SPrabhakar Kushwaha  */
550*a2a55e51SPrabhakar Kushwaha struct dpni_attr {
551*a2a55e51SPrabhakar Kushwaha 	int id;
552*a2a55e51SPrabhakar Kushwaha 	/**
553*a2a55e51SPrabhakar Kushwaha 	 * struct version - DPNI version
554*a2a55e51SPrabhakar Kushwaha 	 * @major: DPNI major version
555*a2a55e51SPrabhakar Kushwaha 	 * @minor: DPNI minor version
556*a2a55e51SPrabhakar Kushwaha 	 */
557*a2a55e51SPrabhakar Kushwaha 	struct {
558*a2a55e51SPrabhakar Kushwaha 		uint16_t major;
559*a2a55e51SPrabhakar Kushwaha 		uint16_t minor;
560*a2a55e51SPrabhakar Kushwaha 	} version;
561*a2a55e51SPrabhakar Kushwaha 	enum net_prot start_hdr;
562*a2a55e51SPrabhakar Kushwaha 	uint64_t options;
563*a2a55e51SPrabhakar Kushwaha 	uint8_t max_senders;
564*a2a55e51SPrabhakar Kushwaha 	uint8_t max_tcs;
565*a2a55e51SPrabhakar Kushwaha 	uint8_t max_dist_per_tc[DPNI_MAX_TC];
566*a2a55e51SPrabhakar Kushwaha 	uint8_t max_unicast_filters;
567*a2a55e51SPrabhakar Kushwaha 	uint8_t max_multicast_filters;
568*a2a55e51SPrabhakar Kushwaha 	uint8_t max_vlan_filters;
569*a2a55e51SPrabhakar Kushwaha 	uint8_t max_qos_entries;
570*a2a55e51SPrabhakar Kushwaha 	uint8_t max_qos_key_size;
571*a2a55e51SPrabhakar Kushwaha 	uint8_t max_dist_key_size;
572*a2a55e51SPrabhakar Kushwaha 	struct dpni_ipr_cfg ipr_cfg;
573*a2a55e51SPrabhakar Kushwaha };
574*a2a55e51SPrabhakar Kushwaha /**
575*a2a55e51SPrabhakar Kushwaha  * dpni_get_attributes() - Retrieve DPNI attributes.
576*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O objec
577*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
578*a2a55e51SPrabhakar Kushwaha  * @attr:	Returned object's attributes
579*a2a55e51SPrabhakar Kushwaha  *
580*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
581*a2a55e51SPrabhakar Kushwaha  */
582*a2a55e51SPrabhakar Kushwaha int dpni_get_attributes(struct fsl_mc_io	*mc_io,
583*a2a55e51SPrabhakar Kushwaha 			uint16_t		token,
584*a2a55e51SPrabhakar Kushwaha 			struct dpni_attr	*attr);
585*a2a55e51SPrabhakar Kushwaha 
586*a2a55e51SPrabhakar Kushwaha /* DPNI buffer layout modification options */
587*a2a55e51SPrabhakar Kushwaha 
588*a2a55e51SPrabhakar Kushwaha /* Select to modify the time-stamp setting */
589*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_TIMESTAMP		0x00000001
590*a2a55e51SPrabhakar Kushwaha /* Select to modify the parser-result setting; not applicable for Tx */
591*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PARSER_RESULT	0x00000002
592*a2a55e51SPrabhakar Kushwaha /* Select to modify the frame-status setting */
593*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_FRAME_STATUS	0x00000004
594*a2a55e51SPrabhakar Kushwaha /* Select to modify the private-data-size setting */
595*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_PRIVATE_DATA_SIZE	0x00000008
596*a2a55e51SPrabhakar Kushwaha /* Select to modify the data-alignment setting */
597*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_ALIGN		0x00000010
598*a2a55e51SPrabhakar Kushwaha /* Select to modify the data-head-room setting */
599*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_HEAD_ROOM	0x00000020
600*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the data-tail-room setting */
601*a2a55e51SPrabhakar Kushwaha #define DPNI_BUF_LAYOUT_OPT_DATA_TAIL_ROOM	0x00000040
602*a2a55e51SPrabhakar Kushwaha 
603*a2a55e51SPrabhakar Kushwaha /**
604*a2a55e51SPrabhakar Kushwaha  * struct dpni_buffer_layout - Structure representing DPNI buffer layout
605*a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the buffer
606*a2a55e51SPrabhakar Kushwaha  *		layout; Use any combination of 'DPNI_BUF_LAYOUT_OPT_<X>' flags
607*a2a55e51SPrabhakar Kushwaha  * @pass_timestamp: Pass timestamp value
608*a2a55e51SPrabhakar Kushwaha  * @pass_parser_result: Pass parser results
609*a2a55e51SPrabhakar Kushwaha  * @pass_frame_status: Pass frame status
610*a2a55e51SPrabhakar Kushwaha  * @private_data_size: Size kept for private data (in bytes)
611*a2a55e51SPrabhakar Kushwaha  * @data_align: Data alignment
612*a2a55e51SPrabhakar Kushwaha  * @data_head_room: Data head room
613*a2a55e51SPrabhakar Kushwaha  * @data_tail_room: Data tail room
614*a2a55e51SPrabhakar Kushwaha  */
615*a2a55e51SPrabhakar Kushwaha struct dpni_buffer_layout {
616*a2a55e51SPrabhakar Kushwaha 	uint32_t options;
617*a2a55e51SPrabhakar Kushwaha 	int pass_timestamp;
618*a2a55e51SPrabhakar Kushwaha 	int pass_parser_result;
619*a2a55e51SPrabhakar Kushwaha 	int pass_frame_status;
620*a2a55e51SPrabhakar Kushwaha 	uint16_t private_data_size;
621*a2a55e51SPrabhakar Kushwaha 	uint16_t data_align;
622*a2a55e51SPrabhakar Kushwaha 	uint16_t data_head_room;
623*a2a55e51SPrabhakar Kushwaha 	uint16_t data_tail_room;
624*a2a55e51SPrabhakar Kushwaha };
625*a2a55e51SPrabhakar Kushwaha 
626*a2a55e51SPrabhakar Kushwaha /**
627*a2a55e51SPrabhakar Kushwaha  * dpni_get_rx_buffer_layout() - Retrieve Rx buffer layout attributes.
628*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
629*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
630*a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
631*a2a55e51SPrabhakar Kushwaha  *
632*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
633*a2a55e51SPrabhakar Kushwaha  */
634*a2a55e51SPrabhakar Kushwaha int dpni_get_rx_buffer_layout(struct fsl_mc_io		*mc_io,
635*a2a55e51SPrabhakar Kushwaha 			      uint16_t			token,
636*a2a55e51SPrabhakar Kushwaha 			      struct dpni_buffer_layout	*layout);
637*a2a55e51SPrabhakar Kushwaha /**
638*a2a55e51SPrabhakar Kushwaha  * dpni_set_rx_buffer_layout() - Set Rx buffer layout configuration.
639*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
640*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
641*a2a55e51SPrabhakar Kushwaha  * @layout:	Buffer layout configuration
642*a2a55e51SPrabhakar Kushwaha  *
643*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
644*a2a55e51SPrabhakar Kushwaha  *
645*a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
646*a2a55e51SPrabhakar Kushwaha  */
647*a2a55e51SPrabhakar Kushwaha int dpni_set_rx_buffer_layout(struct fsl_mc_io			*mc_io,
648*a2a55e51SPrabhakar Kushwaha 			      uint16_t				token,
649*a2a55e51SPrabhakar Kushwaha 			      const struct dpni_buffer_layout	*layout);
650*a2a55e51SPrabhakar Kushwaha 
651*a2a55e51SPrabhakar Kushwaha /**
652*a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_buffer_layout() - Retrieve Tx buffer layout attributes.
653*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
654*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
655*a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
656*a2a55e51SPrabhakar Kushwaha  *
657*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
658*a2a55e51SPrabhakar Kushwaha  */
659*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_buffer_layout(struct fsl_mc_io		*mc_io,
660*a2a55e51SPrabhakar Kushwaha 			      uint16_t			token,
661*a2a55e51SPrabhakar Kushwaha 			      struct dpni_buffer_layout	*layout);
662*a2a55e51SPrabhakar Kushwaha 
663*a2a55e51SPrabhakar Kushwaha /**
664*a2a55e51SPrabhakar Kushwaha  * @brief	Set Tx buffer layout configuration.
665*a2a55e51SPrabhakar Kushwaha  *
666*a2a55e51SPrabhakar Kushwaha  * @param[in]	mc_io	Pointer to MC portal's I/O object
667*a2a55e51SPrabhakar Kushwaha  * @param[in]   token	Token of DPNI object
668*a2a55e51SPrabhakar Kushwaha  * @param[in]	layout	Buffer layout configuration
669*a2a55e51SPrabhakar Kushwaha  *
670*a2a55e51SPrabhakar Kushwaha  * @returns	'0' on Success; Error code otherwise.
671*a2a55e51SPrabhakar Kushwaha  *
672*a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
673*a2a55e51SPrabhakar Kushwaha  */
674*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_buffer_layout(struct fsl_mc_io			*mc_io,
675*a2a55e51SPrabhakar Kushwaha 			      uint16_t				token,
676*a2a55e51SPrabhakar Kushwaha 			      const struct dpni_buffer_layout	*layout);
677*a2a55e51SPrabhakar Kushwaha /**
678*a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_conf_buffer_layout() - Retrieve Tx confirmation buffer layout
679*a2a55e51SPrabhakar Kushwaha  *				attributes.
680*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
681*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
682*a2a55e51SPrabhakar Kushwaha  * @layout:	Returns buffer layout attributes
683*a2a55e51SPrabhakar Kushwaha  *
684*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
685*a2a55e51SPrabhakar Kushwaha  */
686*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_conf_buffer_layout(struct fsl_mc_io		*mc_io,
687*a2a55e51SPrabhakar Kushwaha 				   uint16_t			token,
688*a2a55e51SPrabhakar Kushwaha 				   struct dpni_buffer_layout	*layout);
689*a2a55e51SPrabhakar Kushwaha /**
690*a2a55e51SPrabhakar Kushwaha  * dpni_set_tx_conf_buffer_layout() - Set Tx confirmation buffer layout
691*a2a55e51SPrabhakar Kushwaha  *					configuration.
692*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
693*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
694*a2a55e51SPrabhakar Kushwaha  * @layout:	Buffer layout configuration
695*a2a55e51SPrabhakar Kushwaha  *
696*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
697*a2a55e51SPrabhakar Kushwaha  *
698*a2a55e51SPrabhakar Kushwaha  * @warning	Allowed only when DPNI is disabled
699*a2a55e51SPrabhakar Kushwaha  */
700*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_conf_buffer_layout(struct fsl_mc_io		   *mc_io,
701*a2a55e51SPrabhakar Kushwaha 				   uint16_t			   token,
702*a2a55e51SPrabhakar Kushwaha 				   const struct dpni_buffer_layout *layout);
703*a2a55e51SPrabhakar Kushwaha /**
704*a2a55e51SPrabhakar Kushwaha  * dpni_get_spid() - Get the AIOP storage profile ID associated with the DPNI
705*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
706*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
707*a2a55e51SPrabhakar Kushwaha  * @spid:	Returned aiop storage-profile ID
708*a2a55e51SPrabhakar Kushwaha  *
709*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
710*a2a55e51SPrabhakar Kushwaha  *
711*a2a55e51SPrabhakar Kushwaha  * @warning	Only relevant for DPNI that belongs to AIOP container.
712*a2a55e51SPrabhakar Kushwaha  */
713*a2a55e51SPrabhakar Kushwaha int dpni_get_qdid(struct fsl_mc_io *mc_io, uint16_t token, uint16_t *qdid);
714*a2a55e51SPrabhakar Kushwaha 
715*a2a55e51SPrabhakar Kushwaha /**
716*a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_data_offset() - Get the Tx data offset (from start of buffer)
717*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
718*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
719*a2a55e51SPrabhakar Kushwaha  * @data_offset: Tx data offset (from start of buffer)
720*a2a55e51SPrabhakar Kushwaha  *
721*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
722*a2a55e51SPrabhakar Kushwaha  */
723*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_data_offset(struct fsl_mc_io	*mc_io,
724*a2a55e51SPrabhakar Kushwaha 			    uint16_t		token,
725*a2a55e51SPrabhakar Kushwaha 			    uint16_t		*data_offset);
726*a2a55e51SPrabhakar Kushwaha 
727*a2a55e51SPrabhakar Kushwaha /**
728*a2a55e51SPrabhakar Kushwaha  * enum dpni_counter - DPNI counter types
729*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME: Counts ingress frames
730*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BYTE: Counts ingress bytes
731*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME_DROP: Counts ingress frames dropped due to explicit
732*a2a55e51SPrabhakar Kushwaha  *		'drop' setting
733*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_FRAME_DISCARD: Counts ingress frames discarded due to errors
734*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_MCAST_FRAME: Counts ingress multicast frames
735*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes
736*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames
737*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes
738*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_FRAME: Counts egress frames
739*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_BYTE: Counts egress bytes
740*a2a55e51SPrabhakar Kushwaha  * @DPNI_CNT_EGR_FRAME_DISCARD: Counts egress frames discarded due to errors
741*a2a55e51SPrabhakar Kushwaha  */
742*a2a55e51SPrabhakar Kushwaha enum dpni_counter {
743*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME = 0x0,
744*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BYTE = 0x1,
745*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME_DROP = 0x2,
746*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_FRAME_DISCARD = 0x3,
747*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_MCAST_FRAME = 0x4,
748*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_MCAST_BYTE = 0x5,
749*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BCAST_FRAME = 0x6,
750*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_ING_BCAST_BYTES = 0x7,
751*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_FRAME = 0x8,
752*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_BYTE = 0x9,
753*a2a55e51SPrabhakar Kushwaha 	DPNI_CNT_EGR_FRAME_DISCARD = 0xa
754*a2a55e51SPrabhakar Kushwaha };
755*a2a55e51SPrabhakar Kushwaha 
756*a2a55e51SPrabhakar Kushwaha /**
757*a2a55e51SPrabhakar Kushwaha  * dpni_get_counter() - Read a specific DPNI counter
758*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
759*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
760*a2a55e51SPrabhakar Kushwaha  * @counter:	The requested counter
761*a2a55e51SPrabhakar Kushwaha  * @value:	Returned counter's current value
762*a2a55e51SPrabhakar Kushwaha  *
763*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
764*a2a55e51SPrabhakar Kushwaha  */
765*a2a55e51SPrabhakar Kushwaha int dpni_get_counter(struct fsl_mc_io	*mc_io,
766*a2a55e51SPrabhakar Kushwaha 		     uint16_t		token,
767*a2a55e51SPrabhakar Kushwaha 		     enum dpni_counter	counter,
768*a2a55e51SPrabhakar Kushwaha 		     uint64_t		*value);
769*a2a55e51SPrabhakar Kushwaha 
770*a2a55e51SPrabhakar Kushwaha /**
771*a2a55e51SPrabhakar Kushwaha  * dpni_set_counter() - Set (or clear) a specific DPNI counter
772*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
773*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
774*a2a55e51SPrabhakar Kushwaha  * @counter:	The requested counter
775*a2a55e51SPrabhakar Kushwaha  * @value:	New counter value; typically pass '0' for resetting
776*a2a55e51SPrabhakar Kushwaha  *			the counter.
777*a2a55e51SPrabhakar Kushwaha  *
778*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
779*a2a55e51SPrabhakar Kushwaha  */
780*a2a55e51SPrabhakar Kushwaha int dpni_set_counter(struct fsl_mc_io	*mc_io,
781*a2a55e51SPrabhakar Kushwaha 		     uint16_t		token,
782*a2a55e51SPrabhakar Kushwaha 		     enum dpni_counter	counter,
783*a2a55e51SPrabhakar Kushwaha 		     uint64_t		value);
784*a2a55e51SPrabhakar Kushwaha /**
785*a2a55e51SPrabhakar Kushwaha  * struct - Structure representing DPNI link configuration
786*a2a55e51SPrabhakar Kushwaha  * @rate: Rate
787*a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values
788*a2a55e51SPrabhakar Kushwaha  */
789*a2a55e51SPrabhakar Kushwaha struct dpni_link_cfg {
790*a2a55e51SPrabhakar Kushwaha 	uint64_t rate;
791*a2a55e51SPrabhakar Kushwaha 	uint64_t options;
792*a2a55e51SPrabhakar Kushwaha };
793*a2a55e51SPrabhakar Kushwaha 
794*a2a55e51SPrabhakar Kushwaha /**
795*a2a55e51SPrabhakar Kushwaha  * dpni_set_link_cfg() - set the link configuration.
796*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
797*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
798*a2a55e51SPrabhakar Kushwaha  * @cfg:	Link configuration
799*a2a55e51SPrabhakar Kushwaha  *
800*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
801*a2a55e51SPrabhakar Kushwaha  */
802*a2a55e51SPrabhakar Kushwaha int dpni_set_link_cfg(struct fsl_mc_io *mc_io,
803*a2a55e51SPrabhakar Kushwaha 		      uint16_t token,
804*a2a55e51SPrabhakar Kushwaha 		      struct dpni_link_cfg *cfg);
805*a2a55e51SPrabhakar Kushwaha 
806*a2a55e51SPrabhakar Kushwaha /**
807*a2a55e51SPrabhakar Kushwaha  * struct dpni_link_state - Structure representing DPNI link state
808*a2a55e51SPrabhakar Kushwaha  * @rate: Rate
809*a2a55e51SPrabhakar Kushwaha  * @options: Mask of available options; use 'DPNI_LINK_OPT_<X>' values
810*a2a55e51SPrabhakar Kushwaha  * @up: Link state; '0' for down, '1' for up
811*a2a55e51SPrabhakar Kushwaha  */
812*a2a55e51SPrabhakar Kushwaha struct dpni_link_state {
813*a2a55e51SPrabhakar Kushwaha 	uint64_t rate;
814*a2a55e51SPrabhakar Kushwaha 	uint64_t options;
815*a2a55e51SPrabhakar Kushwaha 	int up;
816*a2a55e51SPrabhakar Kushwaha };
817*a2a55e51SPrabhakar Kushwaha 
818*a2a55e51SPrabhakar Kushwaha /**
819*a2a55e51SPrabhakar Kushwaha  * dpni_get_link_state() - Return the link state (either up or down)
820*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
821*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
822*a2a55e51SPrabhakar Kushwaha  * @state:	Returned link state;
823*a2a55e51SPrabhakar Kushwaha  *
824*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
825*a2a55e51SPrabhakar Kushwaha  */
826*a2a55e51SPrabhakar Kushwaha int dpni_get_link_state(struct fsl_mc_io *mc_io,
827*a2a55e51SPrabhakar Kushwaha 			uint16_t token,
828*a2a55e51SPrabhakar Kushwaha 			struct dpni_link_state *state);
829*a2a55e51SPrabhakar Kushwaha 
830*a2a55e51SPrabhakar Kushwaha /**
831*a2a55e51SPrabhakar Kushwaha  * dpni_set_primary_mac_addr() - Set the primary MAC address
832*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
833*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
834*a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to set as primary address
835*a2a55e51SPrabhakar Kushwaha  *
836*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
837*a2a55e51SPrabhakar Kushwaha  */
838*a2a55e51SPrabhakar Kushwaha int dpni_set_primary_mac_addr(struct fsl_mc_io	*mc_io,
839*a2a55e51SPrabhakar Kushwaha 			      uint16_t		token,
840*a2a55e51SPrabhakar Kushwaha 			      const uint8_t	mac_addr[6]);
841*a2a55e51SPrabhakar Kushwaha /**
842*a2a55e51SPrabhakar Kushwaha  * dpni_get_primary_mac_addr() - Get the primary MAC address
843*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
844*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
845*a2a55e51SPrabhakar Kushwaha  * @mac_addr:	Returned MAC address
846*a2a55e51SPrabhakar Kushwaha  *
847*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
848*a2a55e51SPrabhakar Kushwaha  */
849*a2a55e51SPrabhakar Kushwaha int dpni_get_primary_mac_addr(struct fsl_mc_io	*mc_io,
850*a2a55e51SPrabhakar Kushwaha 			      uint16_t		token,
851*a2a55e51SPrabhakar Kushwaha 			      uint8_t		mac_addr[6]);
852*a2a55e51SPrabhakar Kushwaha /**
853*a2a55e51SPrabhakar Kushwaha  * dpni_add_mac_addr() - Add MAC address filter
854*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
855*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
856*a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to add
857*a2a55e51SPrabhakar Kushwaha  *
858*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
859*a2a55e51SPrabhakar Kushwaha  */
860*a2a55e51SPrabhakar Kushwaha int dpni_add_mac_addr(struct fsl_mc_io	*mc_io,
861*a2a55e51SPrabhakar Kushwaha 		      uint16_t		token,
862*a2a55e51SPrabhakar Kushwaha 		      const uint8_t	mac_addr[6]);
863*a2a55e51SPrabhakar Kushwaha 
864*a2a55e51SPrabhakar Kushwaha /**
865*a2a55e51SPrabhakar Kushwaha  * dpni_remove_mac_addr() - Remove MAC address filter
866*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
867*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
868*a2a55e51SPrabhakar Kushwaha  * @mac_addr:	MAC address to remove
869*a2a55e51SPrabhakar Kushwaha  *
870*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
871*a2a55e51SPrabhakar Kushwaha  */
872*a2a55e51SPrabhakar Kushwaha int dpni_remove_mac_addr(struct fsl_mc_io	*mc_io,
873*a2a55e51SPrabhakar Kushwaha 			 uint16_t		token,
874*a2a55e51SPrabhakar Kushwaha 			 const uint8_t		mac_addr[6]);
875*a2a55e51SPrabhakar Kushwaha 
876*a2a55e51SPrabhakar Kushwaha /**
877*a2a55e51SPrabhakar Kushwaha  * enum dpni_dest - DPNI destination types
878*a2a55e51SPrabhakar Kushwaha  * DPNI_DEST_NONE: Unassigned destination; The queue is set in parked mode and
879*a2a55e51SPrabhakar Kushwaha  *		does not generate FQDAN notifications; user is expected to
880*a2a55e51SPrabhakar Kushwaha  *		dequeue from the queue based on polling or other user-defined
881*a2a55e51SPrabhakar Kushwaha  *		method
882*a2a55e51SPrabhakar Kushwaha  * @DPNI_DEST_DPIO: The queue is set in schedule mode and generates FQDAN
883*a2a55e51SPrabhakar Kushwaha  *		notifications to the specified DPIO; user is expected to dequeue
884*a2a55e51SPrabhakar Kushwaha  *		from the queue only after notification is received
885*a2a55e51SPrabhakar Kushwaha  * @DPNI_DEST_DPCON: The queue is set in schedule mode and does not generate
886*a2a55e51SPrabhakar Kushwaha  *		FQDAN notifications, but is connected to the specified DPCON
887*a2a55e51SPrabhakar Kushwaha  *		object; user is expected to dequeue from the DPCON channel
888*a2a55e51SPrabhakar Kushwaha  */
889*a2a55e51SPrabhakar Kushwaha enum dpni_dest {
890*a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_NONE = 0,
891*a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_DPIO = 1,
892*a2a55e51SPrabhakar Kushwaha 	DPNI_DEST_DPCON = 2
893*a2a55e51SPrabhakar Kushwaha };
894*a2a55e51SPrabhakar Kushwaha 
895*a2a55e51SPrabhakar Kushwaha /**
896*a2a55e51SPrabhakar Kushwaha  * struct dpni_dest_cfg - Structure representing DPNI destination parameters
897*a2a55e51SPrabhakar Kushwaha  * @dest_type: Destination type
898*a2a55e51SPrabhakar Kushwaha  * @dest_id: Either DPIO ID or DPCON ID, depending on the destination type
899*a2a55e51SPrabhakar Kushwaha  * @priority: Priority selection within the DPIO or DPCON channel; valid values
900*a2a55e51SPrabhakar Kushwaha  *		are 0-1 or 0-7, depending on the number of priorities in that
901*a2a55e51SPrabhakar Kushwaha  *		channel; not relevant for 'DPNI_DEST_NONE' option
902*a2a55e51SPrabhakar Kushwaha  */
903*a2a55e51SPrabhakar Kushwaha struct dpni_dest_cfg {
904*a2a55e51SPrabhakar Kushwaha 	enum dpni_dest dest_type;
905*a2a55e51SPrabhakar Kushwaha 	int dest_id;
906*a2a55e51SPrabhakar Kushwaha 	uint8_t priority;
907*a2a55e51SPrabhakar Kushwaha };
908*a2a55e51SPrabhakar Kushwaha 
909*a2a55e51SPrabhakar Kushwaha /* DPNI queue modification options */
910*a2a55e51SPrabhakar Kushwaha 
911*a2a55e51SPrabhakar Kushwaha /* Select to modify the user's context associated with the queue */
912*a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_USER_CTX		0x00000001
913*a2a55e51SPrabhakar Kushwaha /* Select to modify the queue's destination */
914*a2a55e51SPrabhakar Kushwaha #define DPNI_QUEUE_OPT_DEST		0x00000002
915*a2a55e51SPrabhakar Kushwaha 
916*a2a55e51SPrabhakar Kushwaha /**
917*a2a55e51SPrabhakar Kushwaha  * struct dpni_queue_cfg - Structure representing queue configuration
918*a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the queue;
919*a2a55e51SPrabhakar Kushwaha  *		Use any combination of 'DPNI_QUEUE_OPT_<X>' flags
920*a2a55e51SPrabhakar Kushwaha  * @user_ctx: User context value provided in the frame descriptor of each
921*a2a55e51SPrabhakar Kushwaha  *		dequeued frame; valid only if 'DPNI_QUEUE_OPT_USER_CTX'
922*a2a55e51SPrabhakar Kushwaha  *		is contained in 'options'
923*a2a55e51SPrabhakar Kushwaha  * @dest_cfg: Queue destination parameters;
924*a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_QUEUE_OPT_DEST' is contained in 'options'
925*a2a55e51SPrabhakar Kushwaha  */
926*a2a55e51SPrabhakar Kushwaha struct dpni_queue_cfg {
927*a2a55e51SPrabhakar Kushwaha 	uint32_t options;
928*a2a55e51SPrabhakar Kushwaha 	uint64_t user_ctx;
929*a2a55e51SPrabhakar Kushwaha 	struct dpni_dest_cfg dest_cfg;
930*a2a55e51SPrabhakar Kushwaha };
931*a2a55e51SPrabhakar Kushwaha 
932*a2a55e51SPrabhakar Kushwaha /**
933*a2a55e51SPrabhakar Kushwaha  * struct dpni_queue_attr - Structure representing queue attributes
934*a2a55e51SPrabhakar Kushwaha  * @user_ctx: User context value provided in the frame descriptor of each
935*a2a55e51SPrabhakar Kushwaha  *	dequeued frame
936*a2a55e51SPrabhakar Kushwaha  * @dest_cfg: Queue destination configuration
937*a2a55e51SPrabhakar Kushwaha  * @fqid: Virtual fqid value to be used for dequeue operations
938*a2a55e51SPrabhakar Kushwaha  */
939*a2a55e51SPrabhakar Kushwaha struct dpni_queue_attr {
940*a2a55e51SPrabhakar Kushwaha 	uint64_t user_ctx;
941*a2a55e51SPrabhakar Kushwaha 	struct dpni_dest_cfg dest_cfg;
942*a2a55e51SPrabhakar Kushwaha 	uint32_t fqid;
943*a2a55e51SPrabhakar Kushwaha };
944*a2a55e51SPrabhakar Kushwaha 
945*a2a55e51SPrabhakar Kushwaha /* DPNI Tx flow modification options */
946*a2a55e51SPrabhakar Kushwaha 
947*a2a55e51SPrabhakar Kushwaha /* Select to modify the settings for dedicate Tx confirmation/error */
948*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_TX_CONF_ERROR	0x00000001
949*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the Tx confirmation and/or error setting */
950*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_ONLY_TX_ERROR	0x00000002
951*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the queue configuration */
952*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_QUEUE		0x00000004
953*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L3 checksum generation setting */
954*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN	0x00000010
955*a2a55e51SPrabhakar Kushwaha /*!< Select to modify the L4 checksum generation setting */
956*a2a55e51SPrabhakar Kushwaha #define DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN	0x00000020
957*a2a55e51SPrabhakar Kushwaha 
958*a2a55e51SPrabhakar Kushwaha /**
959*a2a55e51SPrabhakar Kushwaha  * struct dpni_tx_flow_cfg - Structure representing Tx flow configuration
960*a2a55e51SPrabhakar Kushwaha  * @options: Flags representing the suggested modifications to the Tx flow;
961*a2a55e51SPrabhakar Kushwaha  *		Use any combination 'DPNI_TX_FLOW_OPT_<X>' flags
962*a2a55e51SPrabhakar Kushwaha  * @conf_err_cfg: Tx confirmation and error configuration; these settings are
963*a2a55e51SPrabhakar Kushwaha  *		ignored if 'DPNI_OPT_PRIVATE_TX_CONF_ERROR_DISABLED' was set at
964*a2a55e51SPrabhakar Kushwaha  *		DPNI creation
965*a2a55e51SPrabhakar Kushwaha  * @l3_chksum_gen: Set to '1' to enable L3 checksum generation; '0' to disable;
966*a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_TX_FLOW_OPT_L3_CHKSUM_GEN' is contained in
967*a2a55e51SPrabhakar Kushwaha  *		'options'
968*a2a55e51SPrabhakar Kushwaha  * @l4_chksum_gen: Set to '1' to enable L4 checksum generation; '0' to disable;
969*a2a55e51SPrabhakar Kushwaha  *		valid only if 'DPNI_TX_FLOW_OPT_L4_CHKSUM_GEN' is contained in
970*a2a55e51SPrabhakar Kushwaha  *		'options'
971*a2a55e51SPrabhakar Kushwaha  */
972*a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_cfg {
973*a2a55e51SPrabhakar Kushwaha 	uint32_t options;
974*a2a55e51SPrabhakar Kushwaha 	/**
975*a2a55e51SPrabhakar Kushwaha 	 * struct cnf_err_cfg - Tx confirmation and error configuration
976*a2a55e51SPrabhakar Kushwaha 	 * @use_default_queue: Set to '1' to use the common (default) Tx
977*a2a55e51SPrabhakar Kushwaha 	 *		confirmation and error queue; Set to '0' to use the
978*a2a55e51SPrabhakar Kushwaha 	 *		private Tx confirmation and error queue; valid only if
979*a2a55e51SPrabhakar Kushwaha 	 *		'DPNI_TX_FLOW_OPT_TX_CONF_ERROR' is contained in
980*a2a55e51SPrabhakar Kushwaha 	 *		'options'
981*a2a55e51SPrabhakar Kushwaha 	 * @errors_only: Set to '1' to report back only error frames;
982*a2a55e51SPrabhakar Kushwaha 	 *		Set to '0' to confirm transmission/error for all
983*a2a55e51SPrabhakar Kushwaha 	 *		transmitted frames;
984*a2a55e51SPrabhakar Kushwaha 	 *		valid only if 'DPNI_TX_FLOW_OPT_ONLY_TX_ERROR' is
985*a2a55e51SPrabhakar Kushwaha 	 *		contained in 'options' and 'use_default_queue = 0';
986*a2a55e51SPrabhakar Kushwaha 	 * @queue_cfg: Queue configuration; valid only if
987*a2a55e51SPrabhakar Kushwaha 	 *		'DPNI_TX_FLOW_OPT_QUEUE' is contained in 'options'
988*a2a55e51SPrabhakar Kushwaha 	 */
989*a2a55e51SPrabhakar Kushwaha 	struct {
990*a2a55e51SPrabhakar Kushwaha 		int use_default_queue;
991*a2a55e51SPrabhakar Kushwaha 		int errors_only;
992*a2a55e51SPrabhakar Kushwaha 		struct dpni_queue_cfg queue_cfg;
993*a2a55e51SPrabhakar Kushwaha 	} conf_err_cfg;
994*a2a55e51SPrabhakar Kushwaha 	int l3_chksum_gen;
995*a2a55e51SPrabhakar Kushwaha 	int l4_chksum_gen;
996*a2a55e51SPrabhakar Kushwaha };
997*a2a55e51SPrabhakar Kushwaha 
998*a2a55e51SPrabhakar Kushwaha /**
999*a2a55e51SPrabhakar Kushwaha  * dpni_set_tx_flow() - Set Tx flow configuration
1000*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1001*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1002*a2a55e51SPrabhakar Kushwaha  * @flow_id:	Provides (or returns) the sender's flow ID;
1003*a2a55e51SPrabhakar Kushwaha  *				for each new sender set (*flow_id) to
1004*a2a55e51SPrabhakar Kushwaha  *				'DPNI_NEW_FLOW_ID' to generate a new flow_id;
1005*a2a55e51SPrabhakar Kushwaha  *				this ID should be used as the QDBIN argument
1006*a2a55e51SPrabhakar Kushwaha  *				in enqueue operations
1007*a2a55e51SPrabhakar Kushwaha  * @cfg:	Tx flow configuration
1008*a2a55e51SPrabhakar Kushwaha  *
1009*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1010*a2a55e51SPrabhakar Kushwaha  */
1011*a2a55e51SPrabhakar Kushwaha int dpni_set_tx_flow(struct fsl_mc_io			*mc_io,
1012*a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
1013*a2a55e51SPrabhakar Kushwaha 		     uint16_t				*flow_id,
1014*a2a55e51SPrabhakar Kushwaha 		     const struct dpni_tx_flow_cfg	*cfg);
1015*a2a55e51SPrabhakar Kushwaha 
1016*a2a55e51SPrabhakar Kushwaha /**
1017*a2a55e51SPrabhakar Kushwaha  * struct dpni_tx_flow_attr - Structure representing Tx flow attributes
1018*a2a55e51SPrabhakar Kushwaha  * @conf_err_attr: Tx confirmation and error attributes
1019*a2a55e51SPrabhakar Kushwaha  * @l3_chksum_gen: '1' if L3 checksum generation is enabled; '0' if disabled
1020*a2a55e51SPrabhakar Kushwaha  * @l4_chksum_gen: '1' if L4 checksum generation is enabled; '0' if disabled
1021*a2a55e51SPrabhakar Kushwaha  */
1022*a2a55e51SPrabhakar Kushwaha struct dpni_tx_flow_attr {
1023*a2a55e51SPrabhakar Kushwaha 	/**
1024*a2a55e51SPrabhakar Kushwaha 	 * struct conf_err_attr - Tx confirmation and error attributes
1025*a2a55e51SPrabhakar Kushwaha 	 * @use_default_queue: '1' if using common (default) Tx confirmation and
1026*a2a55e51SPrabhakar Kushwaha 	 *			error queue;
1027*a2a55e51SPrabhakar Kushwaha 	 *			'0' if using private Tx confirmation and error
1028*a2a55e51SPrabhakar Kushwaha 	 *			queue
1029*a2a55e51SPrabhakar Kushwaha 	 * @errors_only: '1' if only error frames are reported back; '0' if all
1030*a2a55e51SPrabhakar Kushwaha 	 *		transmitted frames are confirmed
1031*a2a55e51SPrabhakar Kushwaha 	 * @queue_attr: Queue attributes
1032*a2a55e51SPrabhakar Kushwaha 	 */
1033*a2a55e51SPrabhakar Kushwaha 	struct {
1034*a2a55e51SPrabhakar Kushwaha 		int use_default_queue;
1035*a2a55e51SPrabhakar Kushwaha 		int errors_only;
1036*a2a55e51SPrabhakar Kushwaha 		struct dpni_queue_attr queue_attr;
1037*a2a55e51SPrabhakar Kushwaha 	} conf_err_attr;
1038*a2a55e51SPrabhakar Kushwaha 	int l3_chksum_gen;
1039*a2a55e51SPrabhakar Kushwaha 	int l4_chksum_gen;
1040*a2a55e51SPrabhakar Kushwaha };
1041*a2a55e51SPrabhakar Kushwaha 
1042*a2a55e51SPrabhakar Kushwaha /**
1043*a2a55e51SPrabhakar Kushwaha  * dpni_get_tx_flow() - Get Tx flow attributes
1044*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1045*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1046*a2a55e51SPrabhakar Kushwaha  * @flow_id:	The sender's flow ID, as returned by the
1047*a2a55e51SPrabhakar Kushwaha  *			dpni_set_tx_flow() function
1048*a2a55e51SPrabhakar Kushwaha  * @attr:	Returned Tx flow attributes
1049*a2a55e51SPrabhakar Kushwaha  *
1050*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1051*a2a55e51SPrabhakar Kushwaha  */
1052*a2a55e51SPrabhakar Kushwaha int dpni_get_tx_flow(struct fsl_mc_io		*mc_io,
1053*a2a55e51SPrabhakar Kushwaha 		     uint16_t			token,
1054*a2a55e51SPrabhakar Kushwaha 		     uint16_t			flow_id,
1055*a2a55e51SPrabhakar Kushwaha 		     struct dpni_tx_flow_attr	*attr);
1056*a2a55e51SPrabhakar Kushwaha 
1057*a2a55e51SPrabhakar Kushwaha /**
1058*a2a55e51SPrabhakar Kushwaha  * dpni_set_rx_flow() - Set Rx flow configuration
1059*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1060*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1061*a2a55e51SPrabhakar Kushwaha  * @tc_id:	Traffic class selection (0-7);
1062*a2a55e51SPrabhakar Kushwaha  *			use 'DPNI_ALL_TCS' to set all TCs and all flows
1063*a2a55e51SPrabhakar Kushwaha  * @flow_id	Rx flow id within the traffic class; use
1064*a2a55e51SPrabhakar Kushwaha  *			'DPNI_ALL_TC_FLOWS' to set all flows within
1065*a2a55e51SPrabhakar Kushwaha  *			this tc_id; ignored if tc_id is set to
1066*a2a55e51SPrabhakar Kushwaha  *			'DPNI_ALL_TCS';
1067*a2a55e51SPrabhakar Kushwaha  * @cfg:	Rx flow configuration
1068*a2a55e51SPrabhakar Kushwaha  *
1069*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1070*a2a55e51SPrabhakar Kushwaha  */
1071*a2a55e51SPrabhakar Kushwaha int dpni_set_rx_flow(struct fsl_mc_io			*mc_io,
1072*a2a55e51SPrabhakar Kushwaha 		     uint16_t				token,
1073*a2a55e51SPrabhakar Kushwaha 		     uint8_t				tc_id,
1074*a2a55e51SPrabhakar Kushwaha 		     uint16_t				flow_id,
1075*a2a55e51SPrabhakar Kushwaha 		     const struct dpni_queue_cfg	*cfg);
1076*a2a55e51SPrabhakar Kushwaha 
1077*a2a55e51SPrabhakar Kushwaha /**
1078*a2a55e51SPrabhakar Kushwaha  * dpni_get_rx_flow() -	Get Rx flow attributes
1079*a2a55e51SPrabhakar Kushwaha  * @mc_io:	Pointer to MC portal's I/O object
1080*a2a55e51SPrabhakar Kushwaha  * @token:	Token of DPNI object
1081*a2a55e51SPrabhakar Kushwaha  * @tc_id:	Traffic class selection (0-7)
1082*a2a55e51SPrabhakar Kushwaha  * @flow_id:	Rx flow id within the traffic class
1083*a2a55e51SPrabhakar Kushwaha  * @attr:	Returned Rx flow attributes
1084*a2a55e51SPrabhakar Kushwaha  *
1085*a2a55e51SPrabhakar Kushwaha  * Return:	'0' on Success; Error code otherwise.
1086*a2a55e51SPrabhakar Kushwaha  */
1087*a2a55e51SPrabhakar Kushwaha int dpni_get_rx_flow(struct fsl_mc_io		*mc_io,
1088*a2a55e51SPrabhakar Kushwaha 		     uint16_t			token,
1089*a2a55e51SPrabhakar Kushwaha 		     uint8_t			tc_id,
1090*a2a55e51SPrabhakar Kushwaha 		     uint16_t			flow_id,
1091*a2a55e51SPrabhakar Kushwaha 		     struct dpni_queue_attr	*attr);
1092*a2a55e51SPrabhakar Kushwaha 
1093*a2a55e51SPrabhakar Kushwaha #endif /* _FSL_DPNI_H */
1094