1
2
3
4
5#ifndef _ICE_ETHDEV_H_
6#define _ICE_ETHDEV_H_
7
8#include <rte_kvargs.h>
9#include <rte_time.h>
10
11#include <ethdev_driver.h>
12#include <rte_tm_driver.h>
13
14#include "base/ice_common.h"
15#include "base/ice_adminq_cmd.h"
16#include "base/ice_flow.h"
17#include "base/ice_sched.h"
18
19#define ICE_ADMINQ_LEN 32
20#define ICE_SBIOQ_LEN 32
21#define ICE_MAILBOXQ_LEN 32
22#define ICE_SBQ_LEN 64
23#define ICE_ADMINQ_BUF_SZ 4096
24#define ICE_SBIOQ_BUF_SZ 4096
25#define ICE_MAILBOXQ_BUF_SZ 4096
26
27#define ICE_MAX_Q_PER_TC 256
28#define ICE_NUM_DESC_DEFAULT 512
29#define ICE_BUF_SIZE_MIN 1024
30#define ICE_FRAME_SIZE_MAX 9728
31#define ICE_QUEUE_BASE_ADDR_UNIT 128
32
33#define ICE_MAX_QP_NUM_PER_VF 16
34#define ICE_DEFAULT_QP_NUM_FDIR 1
35#define ICE_UINT32_BIT_SIZE (CHAR_BIT * sizeof(uint32_t))
36#define ICE_VFTA_SIZE (4096 / ICE_UINT32_BIT_SIZE)
37
38#define ICE_NUM_MACADDR_MAX 64
39
40#define ICE_MAX_VF 128
41#define ICE_MAX_INTR_QUEUE_NUM 256
42
43#define ICE_MISC_VEC_ID RTE_INTR_VEC_ZERO_OFFSET
44#define ICE_RX_VEC_ID RTE_INTR_VEC_RXTX_OFFSET
45
46#define ICE_MAX_PKT_TYPE 1024
47
48
49#define ICE_PKG_FILE_DEFAULT "/lib/firmware/intel/ice/ddp/ice.pkg"
50#define ICE_PKG_FILE_UPDATES "/lib/firmware/updates/intel/ice/ddp/ice.pkg"
51#define ICE_PKG_FILE_SEARCH_PATH_DEFAULT "/lib/firmware/intel/ice/ddp/"
52#define ICE_PKG_FILE_SEARCH_PATH_UPDATES "/lib/firmware/updates/intel/ice/ddp/"
53#define ICE_MAX_PKG_FILENAME_SIZE 256
54
55#define MAX_ACL_NORMAL_ENTRIES 256
56
57
58
59
60
61
62
63#define ICE_VFTA_BIT(vlan_id) (1 << ((vlan_id) & 0x1F))
64#define ICE_VFTA_IDX(vlan_id) ((vlan_id) >> 5)
65
66
67#define ICE_DEFAULT_TCMAP 0x1
68#define ICE_FDIR_QUEUE_ID 0
69
70
71#define ICE_VMDQ_POOL_BASE 1
72
73#define ICE_DEFAULT_RX_FREE_THRESH 32
74#define ICE_DEFAULT_RX_PTHRESH 8
75#define ICE_DEFAULT_RX_HTHRESH 8
76#define ICE_DEFAULT_RX_WTHRESH 0
77
78#define ICE_DEFAULT_TX_FREE_THRESH 32
79#define ICE_DEFAULT_TX_PTHRESH 32
80#define ICE_DEFAULT_TX_HTHRESH 0
81#define ICE_DEFAULT_TX_WTHRESH 0
82#define ICE_DEFAULT_TX_RSBIT_THRESH 32
83
84
85#define ICE_4_BIT_WIDTH (CHAR_BIT / 2)
86#define ICE_4_BIT_MASK RTE_LEN2MASK(ICE_4_BIT_WIDTH, uint8_t)
87#define ICE_8_BIT_WIDTH CHAR_BIT
88#define ICE_8_BIT_MASK UINT8_MAX
89#define ICE_16_BIT_WIDTH (CHAR_BIT * 2)
90#define ICE_16_BIT_MASK UINT16_MAX
91#define ICE_32_BIT_WIDTH (CHAR_BIT * 4)
92#define ICE_32_BIT_MASK UINT32_MAX
93#define ICE_40_BIT_WIDTH (CHAR_BIT * 5)
94#define ICE_40_BIT_MASK RTE_LEN2MASK(ICE_40_BIT_WIDTH, uint64_t)
95#define ICE_48_BIT_WIDTH (CHAR_BIT * 6)
96#define ICE_48_BIT_MASK RTE_LEN2MASK(ICE_48_BIT_WIDTH, uint64_t)
97
98#define ICE_FLAG_RSS BIT_ULL(0)
99#define ICE_FLAG_DCB BIT_ULL(1)
100#define ICE_FLAG_VMDQ BIT_ULL(2)
101#define ICE_FLAG_SRIOV BIT_ULL(3)
102#define ICE_FLAG_HEADER_SPLIT_DISABLED BIT_ULL(4)
103#define ICE_FLAG_HEADER_SPLIT_ENABLED BIT_ULL(5)
104#define ICE_FLAG_FDIR BIT_ULL(6)
105#define ICE_FLAG_VXLAN BIT_ULL(7)
106#define ICE_FLAG_RSS_AQ_CAPABLE BIT_ULL(8)
107#define ICE_FLAG_VF_MAC_BY_PF BIT_ULL(9)
108#define ICE_FLAG_ALL (ICE_FLAG_RSS | \
109 ICE_FLAG_DCB | \
110 ICE_FLAG_VMDQ | \
111 ICE_FLAG_SRIOV | \
112 ICE_FLAG_HEADER_SPLIT_DISABLED | \
113 ICE_FLAG_HEADER_SPLIT_ENABLED | \
114 ICE_FLAG_FDIR | \
115 ICE_FLAG_VXLAN | \
116 ICE_FLAG_RSS_AQ_CAPABLE | \
117 ICE_FLAG_VF_MAC_BY_PF)
118
119#define ICE_RSS_OFFLOAD_ALL ( \
120 RTE_ETH_RSS_IPV4 | \
121 RTE_ETH_RSS_FRAG_IPV4 | \
122 RTE_ETH_RSS_NONFRAG_IPV4_TCP | \
123 RTE_ETH_RSS_NONFRAG_IPV4_UDP | \
124 RTE_ETH_RSS_NONFRAG_IPV4_SCTP | \
125 RTE_ETH_RSS_NONFRAG_IPV4_OTHER | \
126 RTE_ETH_RSS_IPV6 | \
127 RTE_ETH_RSS_FRAG_IPV6 | \
128 RTE_ETH_RSS_NONFRAG_IPV6_TCP | \
129 RTE_ETH_RSS_NONFRAG_IPV6_UDP | \
130 RTE_ETH_RSS_NONFRAG_IPV6_SCTP | \
131 RTE_ETH_RSS_NONFRAG_IPV6_OTHER | \
132 RTE_ETH_RSS_L2_PAYLOAD)
133
134
135
136
137
138#define ICE_ETH_OVERHEAD \
139 (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + RTE_VLAN_HLEN * 2)
140#define ICE_ETH_MAX_LEN (RTE_ETHER_MTU + ICE_ETH_OVERHEAD)
141
142#define ICE_RXTX_BYTES_HIGH(bytes) ((bytes) & ~ICE_40_BIT_MASK)
143#define ICE_RXTX_BYTES_LOW(bytes) ((bytes) & ICE_40_BIT_MASK)
144
145
146#define ICE_FLEX_DESC_RXDID_MAX_NUM 64
147
148#define ICE_I2C_EEPROM_DEV_ADDR 0xA0
149#define ICE_I2C_EEPROM_DEV_ADDR2 0xA2
150#define ICE_MODULE_TYPE_SFP 0x03
151#define ICE_MODULE_TYPE_QSFP_PLUS 0x0D
152#define ICE_MODULE_TYPE_QSFP28 0x11
153#define ICE_MODULE_SFF_ADDR_MODE 0x04
154#define ICE_MODULE_SFF_DIAG_CAPAB 0x40
155#define ICE_MODULE_REVISION_ADDR 0x01
156#define ICE_MODULE_SFF_8472_COMP 0x5E
157#define ICE_MODULE_SFF_8472_SWAP 0x5C
158#define ICE_MODULE_QSFP_MAX_LEN 640
159
160
161#define ICE_MODULE_SFF_8079 0x1
162#define ICE_MODULE_SFF_8079_LEN 256
163#define ICE_MODULE_SFF_8472 0x2
164#define ICE_MODULE_SFF_8472_LEN 512
165#define ICE_MODULE_SFF_8636 0x3
166#define ICE_MODULE_SFF_8636_LEN 256
167#define ICE_MODULE_SFF_8636_MAX_LEN 640
168#define ICE_MODULE_SFF_8436 0x4
169#define ICE_MODULE_SFF_8436_LEN 256
170#define ICE_MODULE_SFF_8436_MAX_LEN 640
171
172
173
174#define GLTSYN_AUX_OUT(_chan, _idx) (GLTSYN_AUX_OUT_0(_idx) + ((_chan) * 8))
175#define GLTSYN_CLKO(_chan, _idx) (GLTSYN_CLKO_0(_idx) + ((_chan) * 8))
176#define GLTSYN_TGT_L(_chan, _idx) (GLTSYN_TGT_L_0(_idx) + ((_chan) * 16))
177#define GLTSYN_TGT_H(_chan, _idx) (GLTSYN_TGT_H_0(_idx) + ((_chan) * 16))
178
179
180enum ice_pkg_type {
181 ICE_PKG_TYPE_UNKNOWN,
182 ICE_PKG_TYPE_OS_DEFAULT,
183 ICE_PKG_TYPE_COMMS,
184};
185
186enum pps_type {
187 PPS_NONE,
188 PPS_PIN,
189 PPS_MAX,
190};
191
192struct ice_adapter;
193
194
195
196
197struct ice_mac_filter_info {
198 struct rte_ether_addr mac_addr;
199};
200
201TAILQ_HEAD(ice_mac_filter_list, ice_mac_filter);
202
203
204struct ice_mac_filter {
205 TAILQ_ENTRY(ice_mac_filter) next;
206 struct ice_mac_filter_info mac_info;
207};
208
209struct ice_vlan {
210 uint16_t tpid;
211 uint16_t vid;
212};
213
214#define ICE_VLAN(tpid, vid) \
215 ((struct ice_vlan){ tpid, vid })
216
217
218
219
220struct ice_vlan_filter_info {
221 struct ice_vlan vlan;
222};
223
224TAILQ_HEAD(ice_vlan_filter_list, ice_vlan_filter);
225
226
227struct ice_vlan_filter {
228 TAILQ_ENTRY(ice_vlan_filter) next;
229 struct ice_vlan_filter_info vlan_info;
230};
231
232struct pool_entry {
233 LIST_ENTRY(pool_entry) next;
234 uint16_t base;
235 uint16_t len;
236};
237
238LIST_HEAD(res_list, pool_entry);
239
240struct ice_res_pool_info {
241 uint32_t base;
242 uint32_t num_alloc;
243 uint32_t num_free;
244 struct res_list alloc_list;
245 struct res_list free_list;
246};
247
248TAILQ_HEAD(ice_vsi_list_head, ice_vsi_list);
249
250struct ice_vsi;
251
252
253struct ice_vsi_list {
254 TAILQ_ENTRY(ice_vsi_list) list;
255 struct ice_vsi *vsi;
256};
257
258struct ice_rx_queue;
259struct ice_tx_queue;
260
261
262
263
264struct ice_vsi {
265 struct ice_adapter *adapter;
266 struct ice_aqc_vsi_props info;
267
268
269
270
271
272
273
274
275
276
277
278
279
280 struct ice_vsi_list sib_vsi_list;
281 struct ice_vsi *parent_vsi;
282 enum ice_vsi_type type;
283 uint16_t vlan_num;
284 uint16_t mac_num;
285 struct ice_mac_filter_list mac_list;
286 struct ice_vlan_filter_list vlan_list;
287 uint16_t nb_qps;
288 uint16_t nb_used_qps;
289 uint16_t max_macaddrs;
290 uint16_t base_queue;
291 uint16_t vsi_id;
292 uint16_t idx;
293
294 uint8_t vf_num;
295 uint16_t msix_intr;
296 uint16_t nb_msix;
297 uint8_t enabled_tc;
298 uint8_t vlan_anti_spoof_on;
299 uint8_t vlan_filter_on;
300
301 u32 rss_key_size;
302 u32 rss_lut_size;
303 uint8_t *rss_lut;
304 uint8_t *rss_key;
305 struct ice_eth_stats eth_stats_offset;
306 struct ice_eth_stats eth_stats;
307 bool offset_loaded;
308 uint64_t old_rx_bytes;
309 uint64_t old_tx_bytes;
310};
311
312enum proto_xtr_type {
313 PROTO_XTR_NONE,
314 PROTO_XTR_VLAN,
315 PROTO_XTR_IPV4,
316 PROTO_XTR_IPV6,
317 PROTO_XTR_IPV6_FLOW,
318 PROTO_XTR_TCP,
319 PROTO_XTR_IP_OFFSET,
320 PROTO_XTR_MAX
321};
322
323enum ice_fdir_tunnel_type {
324 ICE_FDIR_TUNNEL_TYPE_NONE = 0,
325 ICE_FDIR_TUNNEL_TYPE_VXLAN,
326 ICE_FDIR_TUNNEL_TYPE_GTPU,
327 ICE_FDIR_TUNNEL_TYPE_GTPU_EH,
328};
329
330struct rte_flow;
331TAILQ_HEAD(ice_flow_list, rte_flow);
332
333struct ice_flow_parser_node;
334TAILQ_HEAD(ice_parser_list, ice_flow_parser_node);
335
336struct ice_fdir_filter_conf {
337 struct ice_fdir_fltr input;
338 enum ice_fdir_tunnel_type tunnel_type;
339
340 struct ice_fdir_counter *counter;
341 struct rte_flow_action_count act_count;
342
343 uint64_t input_set_o;
344 uint64_t input_set_i;
345 uint32_t mark_flag;
346
347 struct ice_parser_profile *prof;
348 bool parser_ena;
349 u8 *pkt_buf;
350 u8 pkt_len;
351};
352
353#define ICE_MAX_FDIR_FILTER_NUM (1024 * 16)
354
355struct ice_fdir_fltr_pattern {
356 enum ice_fltr_ptype flow_type;
357
358 union {
359 struct ice_fdir_v4 v4;
360 struct ice_fdir_v6 v6;
361 } ip, mask;
362
363 struct ice_fdir_udp_gtp gtpu_data;
364 struct ice_fdir_udp_gtp gtpu_mask;
365
366 struct ice_fdir_extra ext_data;
367 struct ice_fdir_extra ext_mask;
368
369 enum ice_fdir_tunnel_type tunnel_type;
370};
371
372#define ICE_FDIR_COUNTER_DEFAULT_POOL_SIZE 1
373#define ICE_FDIR_COUNTER_MAX_POOL_SIZE 32
374#define ICE_FDIR_COUNTERS_PER_BLOCK 256
375#define ICE_FDIR_COUNTER_INDEX(base_idx) \
376 ((base_idx) * ICE_FDIR_COUNTERS_PER_BLOCK)
377struct ice_fdir_counter_pool;
378
379struct ice_fdir_counter {
380 TAILQ_ENTRY(ice_fdir_counter) next;
381 struct ice_fdir_counter_pool *pool;
382 uint8_t shared;
383 uint32_t ref_cnt;
384 uint32_t id;
385 uint64_t hits;
386 uint64_t bytes;
387 uint32_t hw_index;
388};
389
390TAILQ_HEAD(ice_fdir_counter_list, ice_fdir_counter);
391
392struct ice_fdir_counter_pool {
393 TAILQ_ENTRY(ice_fdir_counter_pool) next;
394 struct ice_fdir_counter_list counter_list;
395 struct ice_fdir_counter counters[0];
396};
397
398TAILQ_HEAD(ice_fdir_counter_pool_list, ice_fdir_counter_pool);
399
400struct ice_fdir_counter_pool_container {
401 struct ice_fdir_counter_pool_list pool_list;
402 struct ice_fdir_counter_pool *pools[ICE_FDIR_COUNTER_MAX_POOL_SIZE];
403 uint8_t index_free;
404};
405
406
407
408
409struct ice_fdir_info {
410 struct ice_vsi *fdir_vsi;
411 struct ice_tx_queue *txq;
412 struct ice_rx_queue *rxq;
413 void *prg_pkt;
414 uint64_t dma_addr;
415 const struct rte_memzone *mz;
416 struct ice_fdir_filter_conf conf;
417
418 struct ice_fdir_filter_conf **hash_map;
419 struct rte_hash *hash_table;
420
421 struct ice_fdir_counter_pool_container counter;
422};
423
424#define ICE_HASH_GTPU_CTX_EH_IP 0
425#define ICE_HASH_GTPU_CTX_EH_IP_UDP 1
426#define ICE_HASH_GTPU_CTX_EH_IP_TCP 2
427#define ICE_HASH_GTPU_CTX_UP_IP 3
428#define ICE_HASH_GTPU_CTX_UP_IP_UDP 4
429#define ICE_HASH_GTPU_CTX_UP_IP_TCP 5
430#define ICE_HASH_GTPU_CTX_DW_IP 6
431#define ICE_HASH_GTPU_CTX_DW_IP_UDP 7
432#define ICE_HASH_GTPU_CTX_DW_IP_TCP 8
433#define ICE_HASH_GTPU_CTX_MAX 9
434
435struct ice_hash_gtpu_ctx {
436 struct ice_rss_hash_cfg ctx[ICE_HASH_GTPU_CTX_MAX];
437};
438
439struct ice_hash_ctx {
440 struct ice_hash_gtpu_ctx gtpu4;
441 struct ice_hash_gtpu_ctx gtpu6;
442};
443
444struct ice_acl_conf {
445 struct ice_fdir_fltr input;
446 uint64_t input_set;
447};
448
449
450
451
452struct ice_acl_info {
453 struct ice_acl_conf conf;
454 struct rte_bitmap *slots;
455 uint64_t hw_entry_id[MAX_ACL_NORMAL_ENTRIES];
456};
457
458TAILQ_HEAD(ice_shaper_profile_list, ice_tm_shaper_profile);
459TAILQ_HEAD(ice_tm_node_list, ice_tm_node);
460
461struct ice_tm_shaper_profile {
462 TAILQ_ENTRY(ice_tm_shaper_profile) node;
463 uint32_t shaper_profile_id;
464 uint32_t reference_count;
465 struct rte_tm_shaper_params profile;
466};
467
468
469struct ice_tm_node {
470 TAILQ_ENTRY(ice_tm_node) node;
471 uint32_t id;
472 uint32_t tc;
473 uint32_t priority;
474 uint32_t weight;
475 uint32_t reference_count;
476 struct ice_tm_node *parent;
477 struct ice_tm_node **children;
478 struct ice_tm_shaper_profile *shaper_profile;
479 struct rte_tm_node_params params;
480};
481
482
483enum ice_tm_node_type {
484 ICE_TM_NODE_TYPE_PORT,
485 ICE_TM_NODE_TYPE_TC,
486 ICE_TM_NODE_TYPE_VSI,
487 ICE_TM_NODE_TYPE_QGROUP,
488 ICE_TM_NODE_TYPE_QUEUE,
489 ICE_TM_NODE_TYPE_MAX,
490};
491
492
493struct ice_tm_conf {
494 struct ice_shaper_profile_list shaper_profile_list;
495 struct ice_tm_node *root;
496 struct ice_tm_node_list tc_list;
497 struct ice_tm_node_list vsi_list;
498 struct ice_tm_node_list qgroup_list;
499 struct ice_tm_node_list queue_list;
500 uint32_t nb_tc_node;
501 uint32_t nb_vsi_node;
502 uint32_t nb_qgroup_node;
503 uint32_t nb_queue_node;
504 bool committed;
505};
506
507struct ice_pf {
508 struct ice_adapter *adapter;
509 struct ice_vsi *main_vsi;
510
511
512
513
514 uint16_t next_vsi_idx;
515 uint16_t vsis_allocated;
516 uint16_t vsis_unallocated;
517 struct ice_res_pool_info qp_pool;
518 struct ice_res_pool_info msix_pool;
519 struct rte_eth_dev_data *dev_data;
520 struct rte_ether_addr dev_addr;
521 uint64_t flags;
522 uint16_t hash_lut_size;
523 uint16_t lan_nb_qp_max;
524 uint16_t lan_nb_qps;
525 uint16_t base_queue;
526 uint8_t *proto_xtr;
527 uint16_t fdir_nb_qps;
528 uint16_t fdir_qp_offset;
529 struct ice_fdir_info fdir;
530 struct ice_acl_info acl;
531 struct ice_hash_ctx hash_ctx;
532 uint16_t hw_prof_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX];
533 uint16_t fdir_fltr_cnt[ICE_FLTR_PTYPE_MAX][ICE_FD_HW_SEG_MAX];
534 struct ice_hw_port_stats stats_offset;
535 struct ice_hw_port_stats stats;
536
537 struct ice_eth_stats internal_stats_offset;
538 struct ice_eth_stats internal_stats;
539 bool offset_loaded;
540 bool adapter_stopped;
541 struct ice_flow_list flow_list;
542 rte_spinlock_t flow_ops_lock;
543 struct ice_parser_list rss_parser_list;
544 struct ice_parser_list perm_parser_list;
545 struct ice_parser_list dist_parser_list;
546 bool init_link_up;
547 uint64_t old_rx_bytes;
548 uint64_t old_tx_bytes;
549 uint64_t supported_rxdid;
550 uint64_t rss_hf;
551 struct ice_tm_conf tm_conf;
552};
553
554#define ICE_MAX_QUEUE_NUM 2048
555#define ICE_MAX_PIN_NUM 4
556
557
558
559
560struct ice_devargs {
561 int rx_low_latency;
562 int safe_mode_support;
563 uint8_t proto_xtr_dflt;
564 int pipe_mode_support;
565 uint8_t proto_xtr[ICE_MAX_QUEUE_NUM];
566 uint8_t pin_idx;
567 uint8_t pps_out_ena;
568};
569
570
571
572
573struct ice_fdir_prof_info {
574 struct ice_parser_profile prof;
575 u64 fdir_actived_cnt;
576};
577
578
579
580
581struct ice_rss_prof_info {
582 struct ice_parser_profile prof;
583 bool symm;
584};
585
586
587
588
589struct ice_adapter {
590
591 struct ice_hw hw;
592 struct ice_pf pf;
593 bool rx_bulk_alloc_allowed;
594 bool rx_vec_allowed;
595 bool tx_vec_allowed;
596 bool tx_simple_allowed;
597
598 uint32_t ptype_tbl[ICE_MAX_PKT_TYPE] __rte_cache_min_aligned;
599 bool is_safe_mode;
600 struct ice_devargs devargs;
601 enum ice_pkg_type active_pkg_type;
602 uint16_t fdir_ref_cnt;
603
604 struct rte_timecounter systime_tc;
605 struct rte_timecounter rx_tstamp_tc;
606 struct rte_timecounter tx_tstamp_tc;
607 bool ptp_ena;
608 uint64_t time_hw;
609 struct ice_fdir_prof_info fdir_prof_info[ICE_MAX_PTGS];
610 struct ice_rss_prof_info rss_prof_info[ICE_MAX_PTGS];
611
612 bool dcf_state_on;
613 struct ice_parser *psr;
614#ifdef RTE_ARCH_X86
615 bool rx_use_avx2;
616 bool rx_use_avx512;
617 bool tx_use_avx2;
618 bool tx_use_avx512;
619 bool rx_vec_offload_support;
620#endif
621};
622
623struct ice_vsi_vlan_pvid_info {
624 uint16_t on;
625 union {
626 uint16_t pvid;
627 struct {
628
629
630
631
632 uint8_t tagged;
633 uint8_t untagged;
634 } reject;
635 } config;
636};
637
638#define ICE_DEV_TO_PCI(eth_dev) \
639 RTE_DEV_TO_PCI((eth_dev)->device)
640
641
642#define ICE_DEV_PRIVATE_TO_PF(adapter) \
643 (&((struct ice_adapter *)adapter)->pf)
644#define ICE_DEV_PRIVATE_TO_HW(adapter) \
645 (&((struct ice_adapter *)adapter)->hw)
646#define ICE_DEV_PRIVATE_TO_ADAPTER(adapter) \
647 ((struct ice_adapter *)adapter)
648
649
650#define ICE_VSI_TO_HW(vsi) \
651 (&(((struct ice_vsi *)vsi)->adapter->hw))
652#define ICE_VSI_TO_PF(vsi) \
653 (&(((struct ice_vsi *)vsi)->adapter->pf))
654
655
656#define ICE_PF_TO_HW(pf) \
657 (&(((struct ice_pf *)pf)->adapter->hw))
658#define ICE_PF_TO_ADAPTER(pf) \
659 ((struct ice_adapter *)(pf)->adapter)
660#define ICE_PF_TO_ETH_DEV(pf) \
661 (((struct ice_pf *)pf)->adapter->eth_dev)
662
663bool is_ice_supported(struct rte_eth_dev *dev);
664int
665ice_load_pkg(struct ice_adapter *adapter, bool use_dsn, uint64_t dsn);
666struct ice_vsi *
667ice_setup_vsi(struct ice_pf *pf, enum ice_vsi_type type);
668int
669ice_release_vsi(struct ice_vsi *vsi);
670void ice_vsi_enable_queues_intr(struct ice_vsi *vsi);
671void ice_vsi_disable_queues_intr(struct ice_vsi *vsi);
672void ice_vsi_queues_bind_intr(struct ice_vsi *vsi);
673int ice_add_rss_cfg_wrap(struct ice_pf *pf, uint16_t vsi_id,
674 struct ice_rss_hash_cfg *cfg);
675int ice_rem_rss_cfg_wrap(struct ice_pf *pf, uint16_t vsi_id,
676 struct ice_rss_hash_cfg *cfg);
677void ice_tm_conf_init(struct rte_eth_dev *dev);
678void ice_tm_conf_uninit(struct rte_eth_dev *dev);
679extern const struct rte_tm_ops ice_tm_ops;
680
681static inline int
682ice_align_floor(int n)
683{
684 if (n == 0)
685 return 0;
686 return 1 << (sizeof(n) * CHAR_BIT - 1 - __builtin_clz(n));
687}
688
689#define ICE_PHY_TYPE_SUPPORT_50G(phy_type) \
690 (((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_CR2) || \
691 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_SR2) || \
692 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_LR2) || \
693 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_KR2) || \
694 ((phy_type) & ICE_PHY_TYPE_LOW_50G_LAUI2_AOC_ACC) || \
695 ((phy_type) & ICE_PHY_TYPE_LOW_50G_LAUI2) || \
696 ((phy_type) & ICE_PHY_TYPE_LOW_50G_AUI2_AOC_ACC) || \
697 ((phy_type) & ICE_PHY_TYPE_LOW_50G_AUI2) || \
698 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_CP) || \
699 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_SR) || \
700 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_FR) || \
701 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_LR) || \
702 ((phy_type) & ICE_PHY_TYPE_LOW_50GBASE_KR_PAM4) || \
703 ((phy_type) & ICE_PHY_TYPE_LOW_50G_AUI1_AOC_ACC) || \
704 ((phy_type) & ICE_PHY_TYPE_LOW_50G_AUI1))
705
706#define ICE_PHY_TYPE_SUPPORT_100G_LOW(phy_type) \
707 (((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_CR4) || \
708 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_SR4) || \
709 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_LR4) || \
710 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_KR4) || \
711 ((phy_type) & ICE_PHY_TYPE_LOW_100G_CAUI4_AOC_ACC) || \
712 ((phy_type) & ICE_PHY_TYPE_LOW_100G_CAUI4) || \
713 ((phy_type) & ICE_PHY_TYPE_LOW_100G_AUI4_AOC_ACC) || \
714 ((phy_type) & ICE_PHY_TYPE_LOW_100G_AUI4) || \
715 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_CR_PAM4) || \
716 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_KR_PAM4) || \
717 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_CP2) || \
718 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_SR2) || \
719 ((phy_type) & ICE_PHY_TYPE_LOW_100GBASE_DR))
720
721#define ICE_PHY_TYPE_SUPPORT_100G_HIGH(phy_type) \
722 (((phy_type) & ICE_PHY_TYPE_HIGH_100GBASE_KR2_PAM4) || \
723 ((phy_type) & ICE_PHY_TYPE_HIGH_100G_CAUI2_AOC_ACC) || \
724 ((phy_type) & ICE_PHY_TYPE_HIGH_100G_CAUI2) || \
725 ((phy_type) & ICE_PHY_TYPE_HIGH_100G_AUI2_AOC_ACC) || \
726 ((phy_type) & ICE_PHY_TYPE_HIGH_100G_AUI2))
727
728#endif
729