xref: /dpdk/drivers/net/dpaa2/mc/fsl_dpdmux_cmd.h (revision 591200ef6f32b56adc367ebe3647cc3dbe9362db)
1 /* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
2  *
3  * Copyright 2013-2016 Freescale Semiconductor Inc.
4  * Copyright 2018-2023 NXP
5  *
6  */
7 #ifndef _FSL_DPDMUX_CMD_H
8 #define _FSL_DPDMUX_CMD_H
9 
10 /* DPDMUX Version */
11 #define DPDMUX_VER_MAJOR		6
12 #define DPDMUX_VER_MINOR		10
13 
14 #define DPDMUX_CMD_BASE_VERSION		1
15 #define DPDMUX_CMD_VERSION_2		2
16 #define DPDMUX_CMD_VERSION_3		3
17 #define DPDMUX_CMD_VERSION_4		4
18 #define DPDMUX_CMD_ID_OFFSET		4
19 
20 #define DPDMUX_CMD(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
21 				DPDMUX_CMD_BASE_VERSION)
22 #define DPDMUX_CMD_V2(id) (((id) << DPDMUX_CMD_ID_OFFSET) | \
23 				DPDMUX_CMD_VERSION_2)
24 #define DPDMUX_CMD_V3(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
25 				DPDMUX_CMD_VERSION_3)
26 #define DPDMUX_CMD_V4(id)	(((id) << DPDMUX_CMD_ID_OFFSET) |\
27 				DPDMUX_CMD_VERSION_4)
28 
29 /* Command IDs */
30 #define DPDMUX_CMDID_CLOSE			DPDMUX_CMD(0x800)
31 #define DPDMUX_CMDID_OPEN			DPDMUX_CMD(0x806)
32 #define DPDMUX_CMDID_CREATE			DPDMUX_CMD_V4(0x906)
33 #define DPDMUX_CMDID_DESTROY			DPDMUX_CMD(0x986)
34 #define DPDMUX_CMDID_GET_API_VERSION		DPDMUX_CMD(0xa06)
35 
36 #define DPDMUX_CMDID_ENABLE			DPDMUX_CMD(0x002)
37 #define DPDMUX_CMDID_DISABLE			DPDMUX_CMD(0x003)
38 #define DPDMUX_CMDID_GET_ATTR			DPDMUX_CMD_V3(0x004)
39 #define DPDMUX_CMDID_RESET			DPDMUX_CMD(0x005)
40 #define DPDMUX_CMDID_IS_ENABLED			DPDMUX_CMD(0x006)
41 #define DPDMUX_CMDID_SET_MAX_FRAME_LENGTH	DPDMUX_CMD(0x0a1)
42 #define DPDMUX_CMDID_GET_MAX_FRAME_LENGTH	DPDMUX_CMD(0x0a2)
43 
44 #define DPDMUX_CMDID_UL_RESET_COUNTERS		DPDMUX_CMD(0x0a3)
45 
46 #define DPDMUX_CMDID_IF_SET_ACCEPTED_FRAMES	DPDMUX_CMD(0x0a7)
47 #define DPDMUX_CMDID_IF_GET_ATTR		DPDMUX_CMD(0x0a8)
48 #define DPDMUX_CMDID_IF_ENABLE			DPDMUX_CMD(0x0a9)
49 #define DPDMUX_CMDID_IF_DISABLE			DPDMUX_CMD(0x0aa)
50 
51 #define DPDMUX_CMDID_IF_ADD_L2_RULE		DPDMUX_CMD(0x0b0)
52 #define DPDMUX_CMDID_IF_REMOVE_L2_RULE		DPDMUX_CMD(0x0b1)
53 #define DPDMUX_CMDID_IF_GET_COUNTER		DPDMUX_CMD(0x0b2)
54 #define DPDMUX_CMDID_IF_SET_LINK_CFG		DPDMUX_CMD_V2(0x0b3)
55 #define DPDMUX_CMDID_IF_GET_LINK_STATE		DPDMUX_CMD_V2(0x0b4)
56 
57 #define DPDMUX_CMDID_SET_CUSTOM_KEY		DPDMUX_CMD(0x0b5)
58 #define DPDMUX_CMDID_ADD_CUSTOM_CLS_ENTRY	DPDMUX_CMD_V2(0x0b6)
59 #define DPDMUX_CMDID_REMOVE_CUSTOM_CLS_ENTRY	DPDMUX_CMD(0x0b7)
60 
61 #define DPDMUX_CMDID_IF_SET_DEFAULT		DPDMUX_CMD(0x0b8)
62 #define DPDMUX_CMDID_IF_GET_DEFAULT		DPDMUX_CMD(0x0b9)
63 
64 #define DPDMUX_CMDID_SET_RESETABLE		DPDMUX_CMD(0x0ba)
65 #define DPDMUX_CMDID_GET_RESETABLE		DPDMUX_CMD(0x0bb)
66 
67 #define DPDMUX_CMDID_IF_SET_TAILDROP		DPDMUX_CMD(0x0bc)
68 #define DPDMUX_CMDID_IF_GET_TAILDROP		DPDMUX_CMD(0x0bd)
69 
70 #define DPDMUX_CMDID_DUMP_TABLE           DPDMUX_CMD(0x0be)
71 
72 #define DPDMUX_CMDID_SET_ERRORS_BEHAVIOR	DPDMUX_CMD(0x0bf)
73 
74 #define DPDMUX_CMDID_SET_SP_PROFILE			DPDMUX_CMD(0x0c0)
75 #define DPDMUX_CMDID_SP_ENABLE				DPDMUX_CMD(0x0c1)
76 
77 #define DPDMUX_MASK(field)        \
78 	GENMASK(DPDMUX_##field##_SHIFT + DPDMUX_##field##_SIZE - 1, \
79 		DPDMUX_##field##_SHIFT)
80 #define dpdmux_set_field(var, field, val) \
81 	((var) |= (((val) << DPDMUX_##field##_SHIFT) & DPDMUX_MASK(field)))
82 #define dpdmux_get_field(var, field)      \
83 	(((var) & DPDMUX_MASK(field)) >> DPDMUX_##field##_SHIFT)
84 
85 #pragma pack(push, 1)
86 struct dpdmux_cmd_open {
87 	uint32_t dpdmux_id;
88 };
89 
90 struct dpdmux_cmd_create {
91 	uint8_t method;
92 	uint8_t manip;
93 	uint16_t num_ifs;
94 	uint16_t default_if;
95 	uint16_t pad;
96 
97 	uint16_t adv_max_dmat_entries;
98 	uint16_t adv_max_mc_groups;
99 	uint16_t adv_max_vlan_ids;
100 	uint16_t mem_size;
101 
102 	uint64_t options;
103 };
104 
105 struct dpdmux_cmd_destroy {
106 	uint32_t dpdmux_id;
107 };
108 
109 #define DPDMUX_ENABLE_SHIFT	0
110 #define DPDMUX_ENABLE_SIZE	1
111 #define DPDMUX_IS_DEFAULT_SHIFT		1
112 #define DPDMUX_IS_DEFAULT_SIZE		1
113 
114 struct dpdmux_rsp_is_enabled {
115 	uint8_t en;
116 };
117 
118 struct dpdmux_rsp_get_attr {
119 	uint8_t method;
120 	uint8_t manip;
121 	uint16_t num_ifs;
122 	uint16_t mem_size;
123 	uint16_t default_if;
124 
125 	uint64_t pad1;
126 
127 	uint32_t id;
128 	uint32_t pad2;
129 
130 	uint64_t options;
131 	uint16_t max_dmat_entries;
132 	uint16_t max_mc_groups;
133 	uint16_t max_vlan_ids;
134 };
135 
136 struct dpdmux_cmd_set_max_frame_length {
137 	uint16_t max_frame_length;
138 };
139 
140 struct dpdmux_cmd_get_max_frame_len {
141 	uint16_t if_id;
142 };
143 
144 struct dpdmux_rsp_get_max_frame_len {
145 	uint16_t max_len;
146 };
147 
148 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SHIFT	0
149 #define DPDMUX_ACCEPTED_FRAMES_TYPE_SIZE	4
150 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SHIFT	4
151 #define DPDMUX_UNACCEPTED_FRAMES_ACTION_SIZE	4
152 
153 struct dpdmux_cmd_if_set_accepted_frames {
154 	uint16_t if_id;
155 	uint8_t frames_options;
156 };
157 
158 struct dpdmux_cmd_if {
159 	uint16_t if_id;
160 };
161 
162 struct dpdmux_rsp_if_get_attr {
163 	uint8_t pad[3];
164 	uint8_t enabled;
165 	uint8_t pad1[3];
166 	uint8_t accepted_frames_type;
167 	uint32_t rate;
168 };
169 
170 struct dpdmux_cmd_if_l2_rule {
171 	uint16_t if_id;
172 	uint8_t mac_addr5;
173 	uint8_t mac_addr4;
174 	uint8_t mac_addr3;
175 	uint8_t mac_addr2;
176 	uint8_t mac_addr1;
177 	uint8_t mac_addr0;
178 
179 	uint32_t pad;
180 	uint16_t vlan_id;
181 };
182 
183 struct dpdmux_cmd_if_get_counter {
184 	uint16_t if_id;
185 	uint8_t counter_type;
186 };
187 
188 struct dpdmux_rsp_if_get_counter {
189 	uint64_t pad;
190 	uint64_t counter;
191 };
192 
193 struct dpdmux_cmd_if_set_link_cfg {
194 	uint16_t if_id;
195 	uint16_t pad[3];
196 
197 	uint32_t rate;
198 	uint32_t pad1;
199 
200 	uint64_t options;
201 	uint64_t advertising;
202 };
203 
204 struct dpdmux_cmd_if_get_link_state {
205 	uint16_t if_id;
206 };
207 
208 #define DPDMUX_UP_SHIFT				0
209 #define DPDMUX_UP_SIZE				1
210 #define DPDMUX_STATE_VALID_SHIFT	1
211 #define DPDMUX_STATE_VALID_SIZE		1
212 struct dpdmux_rsp_if_get_link_state {
213 	uint32_t pad;
214 	uint8_t up;
215 	uint8_t pad1[3];
216 
217 	uint32_t rate;
218 	uint32_t pad2;
219 
220 	uint64_t options;
221 	uint64_t supported;
222 	uint64_t advertising;
223 };
224 
225 struct dpdmux_rsp_get_api_version {
226 	uint16_t major;
227 	uint16_t minor;
228 };
229 
230 struct dpdmux_set_custom_key {
231 	uint64_t pad[6];
232 	uint64_t key_cfg_iova;
233 };
234 
235 struct dpdmux_cmd_add_custom_cls_entry {
236 	uint8_t pad[3];
237 	uint8_t key_size;
238 	uint16_t entry_index;
239 	uint16_t dest_if;
240 	uint64_t key_iova;
241 	uint64_t mask_iova;
242 };
243 
244 struct dpdmux_cmd_remove_custom_cls_entry {
245 	uint8_t pad[3];
246 	uint8_t key_size;
247 	uint32_t pad1;
248 	uint64_t key_iova;
249 	uint64_t mask_iova;
250 };
251 
252 #define DPDMUX_SKIP_RESET_FLAGS_SHIFT    0
253 #define DPDMUX_SKIP_RESET_FLAGS_SIZE     4
254 
255 struct dpdmux_cmd_set_skip_reset_flags {
256 	uint8_t skip_reset_flags;
257 };
258 
259 struct dpdmux_rsp_get_skip_reset_flags {
260 	uint8_t skip_reset_flags;
261 };
262 
263 struct dpdmux_cmd_set_taildrop {
264 	uint32_t	pad1;
265 	uint16_t	if_id;
266 	uint16_t	pad2;
267 	uint16_t	oal_en;
268 	uint8_t		units;
269 	uint8_t		pad3;
270 	uint32_t	threshold;
271 };
272 
273 struct dpdmux_cmd_get_taildrop {
274 	uint32_t	pad1;
275 	uint16_t	if_id;
276 };
277 
278 struct dpdmux_rsp_get_taildrop {
279 	uint16_t	pad1;
280 	uint16_t	pad2;
281 	uint16_t	if_id;
282 	uint16_t	pad3;
283 	uint16_t	oal_en;
284 	uint8_t		units;
285 	uint8_t		pad4;
286 	uint32_t	threshold;
287 };
288 
289 struct dpdmux_cmd_dump_table {
290 	uint16_t table_type;
291 	uint16_t table_index;
292 	uint32_t pad0;
293 	uint64_t iova_addr;
294 	uint32_t iova_size;
295 };
296 
297 struct dpdmux_rsp_dump_table {
298 	uint16_t num_entries;
299 };
300 
301 struct dpdmux_dump_table_header {
302 	uint16_t table_type;
303 	uint16_t table_num_entries;
304 	uint16_t table_max_entries;
305 	uint8_t default_action;
306 	uint8_t match_type;
307 	uint8_t reserved[24];
308 };
309 
310 struct dpdmux_dump_table_entry {
311 	uint8_t key[DPDMUX_MAX_KEY_SIZE];
312 	uint8_t mask[DPDMUX_MAX_KEY_SIZE];
313 	uint8_t key_action;
314 	uint16_t result[3];
315 	uint8_t reserved[21];
316 };
317 
318 #define DPDMUX_ERROR_ACTION_SHIFT		0
319 #define DPDMUX_ERROR_ACTION_SIZE		4
320 
321 struct dpdmux_cmd_set_errors_behavior {
322 	uint32_t errors;
323 	uint16_t flags;
324 	uint16_t if_id;
325 };
326 
327 #define MAX_SP_PROFILE_ID_SIZE	8
328 
329 struct dpdmux_cmd_set_sp_profile {
330 	uint8_t sp_profile[MAX_SP_PROFILE_ID_SIZE];
331 	uint8_t type;
332 };
333 
334 struct dpdmux_cmd_sp_enable {
335 	uint16_t if_id;
336 	uint8_t type;
337 	uint8_t en;
338 };
339 
340 #pragma pack(pop)
341 #endif /* _FSL_DPDMUX_CMD_H */
342