1
2
3
4
5
6
7#ifndef __ECORE_L2_API_H__
8#define __ECORE_L2_API_H__
9
10#include "ecore_status.h"
11#include "ecore_sp_api.h"
12#include "ecore_int_api.h"
13
14#ifndef __EXTRACT__LINUX__
15enum ecore_rss_caps {
16 ECORE_RSS_IPV4 = 0x1,
17 ECORE_RSS_IPV6 = 0x2,
18 ECORE_RSS_IPV4_TCP = 0x4,
19 ECORE_RSS_IPV6_TCP = 0x8,
20 ECORE_RSS_IPV4_UDP = 0x10,
21 ECORE_RSS_IPV6_UDP = 0x20,
22};
23
24
25#define ECORE_RSS_IND_TABLE_SIZE 128
26#define ECORE_RSS_KEY_SIZE 10
27#endif
28
29struct ecore_queue_start_common_params {
30
31 u8 vport_id;
32 u16 queue_id;
33
34
35 u8 stats_id;
36
37 struct ecore_sb_info *p_sb;
38 u8 sb_idx;
39};
40
41struct ecore_rxq_start_ret_params {
42 void OSAL_IOMEM *p_prod;
43 void *p_handle;
44};
45
46struct ecore_txq_start_ret_params {
47 void OSAL_IOMEM *p_doorbell;
48 void *p_handle;
49};
50
51struct ecore_rss_params {
52 u8 update_rss_config;
53 u8 rss_enable;
54 u8 rss_eng_id;
55 u8 update_rss_capabilities;
56 u8 update_rss_ind_table;
57 u8 update_rss_key;
58 u8 rss_caps;
59 u8 rss_table_size_log;
60
61
62 void *rss_ind_table[ECORE_RSS_IND_TABLE_SIZE];
63 u32 rss_key[ECORE_RSS_KEY_SIZE];
64};
65
66struct ecore_sge_tpa_params {
67 u8 max_buffers_per_cqe;
68
69 u8 update_tpa_en_flg;
70 u8 tpa_ipv4_en_flg;
71 u8 tpa_ipv6_en_flg;
72 u8 tpa_ipv4_tunn_en_flg;
73 u8 tpa_ipv6_tunn_en_flg;
74
75 u8 update_tpa_param_flg;
76 u8 tpa_pkt_split_flg;
77 u8 tpa_hdr_data_split_flg;
78 u8 tpa_gro_consistent_flg;
79 u8 tpa_max_aggs_num;
80 u16 tpa_max_size;
81 u16 tpa_min_size_to_start;
82 u16 tpa_min_size_to_cont;
83};
84
85enum ecore_filter_opcode {
86 ECORE_FILTER_ADD,
87 ECORE_FILTER_REMOVE,
88 ECORE_FILTER_MOVE,
89 ECORE_FILTER_REPLACE,
90 ECORE_FILTER_FLUSH,
91};
92
93enum ecore_filter_ucast_type {
94 ECORE_FILTER_MAC,
95 ECORE_FILTER_VLAN,
96 ECORE_FILTER_MAC_VLAN,
97 ECORE_FILTER_INNER_MAC,
98 ECORE_FILTER_INNER_VLAN,
99 ECORE_FILTER_INNER_PAIR,
100 ECORE_FILTER_INNER_MAC_VNI_PAIR,
101 ECORE_FILTER_MAC_VNI_PAIR,
102 ECORE_FILTER_VNI,
103 ECORE_FILTER_UNUSED,
104};
105
106struct ecore_filter_ucast {
107 enum ecore_filter_opcode opcode;
108 enum ecore_filter_ucast_type type;
109 u8 is_rx_filter;
110 u8 is_tx_filter;
111 u8 vport_to_add_to;
112 u8 vport_to_remove_from;
113 unsigned char mac[ETH_ALEN];
114 u8 assert_on_error;
115 u16 vlan;
116 u32 vni;
117};
118
119struct ecore_filter_mcast {
120
121 enum ecore_filter_opcode opcode;
122 u8 vport_to_add_to;
123 u8 vport_to_remove_from;
124 u8 num_mc_addrs;
125#define ECORE_MAX_MC_ADDRS 64
126 unsigned char mac[ECORE_MAX_MC_ADDRS][ETH_ALEN];
127};
128
129struct ecore_filter_accept_flags {
130 u8 update_rx_mode_config;
131 u8 update_tx_mode_config;
132 u8 rx_accept_filter;
133 u8 tx_accept_filter;
134#define ECORE_ACCEPT_NONE 0x01
135#define ECORE_ACCEPT_UCAST_MATCHED 0x02
136#define ECORE_ACCEPT_UCAST_UNMATCHED 0x04
137#define ECORE_ACCEPT_MCAST_MATCHED 0x08
138#define ECORE_ACCEPT_MCAST_UNMATCHED 0x10
139#define ECORE_ACCEPT_BCAST 0x20
140#define ECORE_ACCEPT_ANY_VNI 0x40
141};
142
143enum ecore_filter_config_mode {
144 ECORE_FILTER_CONFIG_MODE_DISABLE,
145 ECORE_FILTER_CONFIG_MODE_5_TUPLE,
146 ECORE_FILTER_CONFIG_MODE_L4_PORT,
147 ECORE_FILTER_CONFIG_MODE_IP_DEST,
148 ECORE_FILTER_CONFIG_MODE_TUNN_TYPE,
149 ECORE_FILTER_CONFIG_MODE_IP_SRC,
150};
151
152struct ecore_arfs_config_params {
153 bool tcp;
154 bool udp;
155 bool ipv4;
156 bool ipv6;
157 enum ecore_filter_config_mode mode;
158};
159
160
161
162
163
164
165
166
167enum _ecore_status_t
168ecore_filter_ucast_cmd(struct ecore_dev *p_dev,
169 struct ecore_filter_ucast *p_filter_cmd,
170 enum spq_mode comp_mode,
171 struct ecore_spq_comp_cb *p_comp_data);
172
173
174enum _ecore_status_t
175ecore_filter_mcast_cmd(struct ecore_dev *p_dev,
176 struct ecore_filter_mcast *p_filter_cmd,
177 enum spq_mode comp_mode,
178 struct ecore_spq_comp_cb *p_comp_data);
179
180
181enum _ecore_status_t
182ecore_filter_accept_cmd(
183 struct ecore_dev *p_dev,
184 u8 vport,
185 struct ecore_filter_accept_flags accept_flags,
186 u8 update_accept_any_vlan,
187 u8 accept_any_vlan,
188 enum spq_mode comp_mode,
189 struct ecore_spq_comp_cb *p_comp_data);
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208enum _ecore_status_t
209ecore_eth_rx_queue_start(struct ecore_hwfn *p_hwfn,
210 u16 opaque_fid,
211 struct ecore_queue_start_common_params *p_params,
212 u16 bd_max_bytes,
213 dma_addr_t bd_chain_phys_addr,
214 dma_addr_t cqe_pbl_addr,
215 u16 cqe_pbl_size,
216 struct ecore_rxq_start_ret_params *p_ret_params);
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232enum _ecore_status_t
233ecore_eth_rx_queue_stop(struct ecore_hwfn *p_hwfn,
234 void *p_rxq,
235 bool eq_completion_only,
236 bool cqe_completion);
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254enum _ecore_status_t
255ecore_eth_tx_queue_start(struct ecore_hwfn *p_hwfn,
256 u16 opaque_fid,
257 struct ecore_queue_start_common_params *p_params,
258 u8 tc,
259 dma_addr_t pbl_addr,
260 u16 pbl_size,
261 struct ecore_txq_start_ret_params *p_ret_params);
262
263
264
265
266
267
268
269
270
271enum _ecore_status_t ecore_eth_tx_queue_stop(struct ecore_hwfn *p_hwfn,
272 void *p_txq);
273
274enum ecore_tpa_mode {
275 ECORE_TPA_MODE_NONE,
276 ECORE_TPA_MODE_RSC,
277 ECORE_TPA_MODE_GRO,
278 ECORE_TPA_MODE_MAX
279};
280
281struct ecore_sp_vport_start_params {
282 enum ecore_tpa_mode tpa_mode;
283 bool remove_inner_vlan;
284 bool tx_switching;
285 bool handle_ptp_pkts;
286 bool only_untagged;
287 bool drop_ttl0;
288 u8 max_buffers_per_cqe;
289 u32 concrete_fid;
290 u16 opaque_fid;
291 u8 vport_id;
292 u16 mtu;
293 bool zero_placement_offset;
294 bool check_mac;
295 bool check_ethtype;
296
297
298 bool b_err_illegal_vlan_mode;
299 bool b_err_illegal_inband_mode;
300 bool b_err_vlan_insert_with_inband;
301 bool b_err_small_pkt;
302 bool b_err_big_pkt;
303 bool b_err_anti_spoof;
304 bool b_err_ctrl_frame;
305 bool b_en_rgfs;
306 bool b_en_tgfs;
307};
308
309
310
311
312
313
314
315
316
317
318
319
320enum _ecore_status_t
321ecore_sp_vport_start(struct ecore_hwfn *p_hwfn,
322 struct ecore_sp_vport_start_params *p_params);
323
324struct ecore_sp_vport_update_params {
325 u16 opaque_fid;
326 u8 vport_id;
327 u8 update_vport_active_rx_flg;
328 u8 vport_active_rx_flg;
329 u8 update_vport_active_tx_flg;
330 u8 vport_active_tx_flg;
331 u8 update_inner_vlan_removal_flg;
332 u8 inner_vlan_removal_flg;
333 u8 silent_vlan_removal_flg;
334 u8 update_default_vlan_enable_flg;
335 u8 default_vlan_enable_flg;
336 u8 update_default_vlan_flg;
337 u16 default_vlan;
338 u8 update_tx_switching_flg;
339 u8 tx_switching_flg;
340 u8 update_approx_mcast_flg;
341 u8 update_anti_spoofing_en_flg;
342 u8 anti_spoofing_en;
343 u8 update_accept_any_vlan_flg;
344 u8 accept_any_vlan;
345 u32 bins[8];
346 struct ecore_rss_params *rss_params;
347 struct ecore_filter_accept_flags accept_flags;
348 struct ecore_sge_tpa_params *sge_tpa_params;
349
350
351
352 u16 mtu;
353 u8 update_ctl_frame_check;
354 u8 mac_chk_en;
355 u8 ethtype_chk_en;
356};
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372enum _ecore_status_t
373ecore_sp_vport_update(struct ecore_hwfn *p_hwfn,
374 struct ecore_sp_vport_update_params *p_params,
375 enum spq_mode comp_mode,
376 struct ecore_spq_comp_cb *p_comp_data);
377
378
379
380
381
382
383
384
385
386
387
388
389enum _ecore_status_t ecore_sp_vport_stop(struct ecore_hwfn *p_hwfn,
390 u16 opaque_fid,
391 u8 vport_id);
392
393enum _ecore_status_t
394ecore_sp_eth_filter_ucast(struct ecore_hwfn *p_hwfn,
395 u16 opaque_fid,
396 struct ecore_filter_ucast *p_filter_cmd,
397 enum spq_mode comp_mode,
398 struct ecore_spq_comp_cb *p_comp_data);
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419enum _ecore_status_t
420ecore_sp_eth_rx_queues_update(struct ecore_hwfn *p_hwfn,
421 void **pp_rxq_handlers,
422 u8 num_rxqs,
423 u8 complete_cqe_flg,
424 u8 complete_event_flg,
425 enum spq_mode comp_mode,
426 struct ecore_spq_comp_cb *p_comp_data);
427
428void __ecore_get_vport_stats(struct ecore_hwfn *p_hwfn,
429 struct ecore_ptt *p_ptt,
430 struct ecore_eth_stats *stats,
431 u16 statistics_bin, bool b_get_port_stats);
432
433void ecore_get_vport_stats(struct ecore_dev *p_dev,
434 struct ecore_eth_stats *stats);
435
436void ecore_reset_vport_stats(struct ecore_dev *p_dev);
437
438
439
440
441
442
443
444
445
446
447
448
449void ecore_arfs_mode_configure(struct ecore_hwfn *p_hwfn,
450 struct ecore_ptt *p_ptt,
451 struct ecore_arfs_config_params *p_cfg_params);
452
453struct ecore_ntuple_filter_params {
454
455
456
457 dma_addr_t addr;
458
459
460 u16 length;
461
462
463 #define ECORE_RFS_NTUPLE_QID_RSS ((u16)-1)
464 u16 qid;
465
466
467 bool b_is_vf;
468 u8 vport_id;
469 u8 vf_id;
470
471
472 bool b_is_add;
473
474
475 bool b_is_drop;
476};
477
478
479
480
481
482
483
484
485
486
487
488
489enum _ecore_status_t
490ecore_configure_rfs_ntuple_filter(struct ecore_hwfn *p_hwfn,
491 struct ecore_spq_comp_cb *p_cb,
492 struct ecore_ntuple_filter_params *p_params);
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512enum _ecore_status_t
513ecore_update_eth_rss_ind_table_entry(struct ecore_hwfn *p_hwfn,
514 u8 vport_id,
515 u8 ind_table_index,
516 u16 ind_table_value);
517#endif
518