11d09792aSZiyang Xuan /* SPDX-License-Identifier: BSD-3-Clause 21d09792aSZiyang Xuan * Copyright(c) 2017 Huawei Technologies Co., Ltd 31d09792aSZiyang Xuan */ 41d09792aSZiyang Xuan 51d09792aSZiyang Xuan #ifndef _HINIC_PMD_ETHDEV_H_ 61d09792aSZiyang Xuan #define _HINIC_PMD_ETHDEV_H_ 71d09792aSZiyang Xuan 81d09792aSZiyang Xuan #include <rte_ethdev.h> 91d09792aSZiyang Xuan #include <rte_ethdev_core.h> 10df96fd0dSBruce Richardson #include <ethdev_driver.h> 111d09792aSZiyang Xuan 121d09792aSZiyang Xuan #include "base/hinic_compat.h" 131d09792aSZiyang Xuan #include "base/hinic_pmd_cfg.h" 141d09792aSZiyang Xuan 15fdba3bf1SXiaoyun Wang #define HINIC_DEV_NAME_LEN 32 16fdba3bf1SXiaoyun Wang #define HINIC_MAX_RX_QUEUES 64 171d09792aSZiyang Xuan 181d09792aSZiyang Xuan /* mbuf pool for copy invalid mbuf segs */ 19fdba3bf1SXiaoyun Wang #define HINIC_COPY_MEMPOOL_DEPTH 128 20fdba3bf1SXiaoyun Wang #define HINIC_COPY_MBUF_SIZE 4096 211d09792aSZiyang Xuan 221d09792aSZiyang Xuan #define SIZE_8BYTES(size) (ALIGN((u32)(size), 8) >> 3) 231d09792aSZiyang Xuan 241d09792aSZiyang Xuan #define HINIC_ETH_DEV_TO_PRIVATE_NIC_DEV(dev) \ 251d09792aSZiyang Xuan ((struct hinic_nic_dev *)(dev)->data->dev_private) 261d09792aSZiyang Xuan 271d09792aSZiyang Xuan #define HINIC_MAX_QUEUE_DEPTH 4096 281d09792aSZiyang Xuan #define HINIC_MIN_QUEUE_DEPTH 128 291d09792aSZiyang Xuan #define HINIC_TXD_ALIGN 1 301d09792aSZiyang Xuan #define HINIC_RXD_ALIGN 1 311d09792aSZiyang Xuan 32fdba3bf1SXiaoyun Wang #define HINIC_UINT32_BIT_SIZE (CHAR_BIT * sizeof(uint32_t)) 33fdba3bf1SXiaoyun Wang #define HINIC_VFTA_SIZE (4096 / HINIC_UINT32_BIT_SIZE) 34fdba3bf1SXiaoyun Wang 353596d7b6SGuoyang Zhou #define HINIC_MAX_MTU_SIZE 9600 363596d7b6SGuoyang Zhou #define HINIC_MIN_MTU_SIZE 256 373596d7b6SGuoyang Zhou 383596d7b6SGuoyang Zhou #define HINIC_ETH_OVERHEAD \ 3925cf2630SFerruh Yigit (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + RTE_VLAN_HLEN * 2) 403596d7b6SGuoyang Zhou 413596d7b6SGuoyang Zhou #define HINIC_MIN_FRAME_SIZE (HINIC_MIN_MTU_SIZE + HINIC_ETH_OVERHEAD) 423596d7b6SGuoyang Zhou #define HINIC_MAX_JUMBO_FRAME_SIZE (HINIC_MAX_MTU_SIZE + HINIC_ETH_OVERHEAD) 433596d7b6SGuoyang Zhou 443596d7b6SGuoyang Zhou #define HINIC_MTU_TO_PKTLEN(mtu) ((mtu) + HINIC_ETH_OVERHEAD) 453596d7b6SGuoyang Zhou 463596d7b6SGuoyang Zhou #define HINIC_PKTLEN_TO_MTU(pktlen) ((pktlen) - HINIC_ETH_OVERHEAD) 473596d7b6SGuoyang Zhou 483596d7b6SGuoyang Zhou /* The max frame size with default MTU */ 493596d7b6SGuoyang Zhou #define HINIC_ETH_MAX_LEN (RTE_ETHER_MTU + HINIC_ETH_OVERHEAD) 503596d7b6SGuoyang Zhou 511d09792aSZiyang Xuan enum hinic_dev_status { 521d09792aSZiyang Xuan HINIC_DEV_INIT, 531d09792aSZiyang Xuan HINIC_DEV_CLOSE, 541d09792aSZiyang Xuan HINIC_DEV_START, 551d09792aSZiyang Xuan HINIC_DEV_INTR_EN, 561d09792aSZiyang Xuan }; 571d09792aSZiyang Xuan 58a3920be3SXiaoyun Wang #define HINIC_MAX_Q_FILTERS 64 /* hinic just support 64 filter types */ 59a3920be3SXiaoyun Wang #define HINIC_PKT_TYPE_FIND_ID(pkt_type) ((pkt_type) - HINIC_MAX_Q_FILTERS) 60a3920be3SXiaoyun Wang 61a3920be3SXiaoyun Wang /* 5tuple filter info */ 62a3920be3SXiaoyun Wang struct hinic_5tuple_filter_info { 63a3920be3SXiaoyun Wang uint32_t dst_ip; 64a3920be3SXiaoyun Wang uint32_t src_ip; 65a3920be3SXiaoyun Wang uint16_t dst_port; 66a3920be3SXiaoyun Wang uint16_t src_port; 67a3920be3SXiaoyun Wang uint8_t proto; /* l4 protocol. */ 68a3920be3SXiaoyun Wang /* 69a3920be3SXiaoyun Wang * seven levels (001b-111b), 111b is highest, 70a3920be3SXiaoyun Wang * used when more than one filter matches. 71a3920be3SXiaoyun Wang */ 72a3920be3SXiaoyun Wang uint8_t priority; 73f372a65fSXiaoyun Wang 74f372a65fSXiaoyun Wang /* if mask is 1b, do not compare the response bit domain */ 75f372a65fSXiaoyun Wang uint8_t dst_ip_mask:1, 76f372a65fSXiaoyun Wang src_ip_mask:1, 77f372a65fSXiaoyun Wang dst_port_mask:1, 78f372a65fSXiaoyun Wang src_port_mask:1, 79f372a65fSXiaoyun Wang proto_mask:1; 80a3920be3SXiaoyun Wang }; 81a3920be3SXiaoyun Wang 82a3920be3SXiaoyun Wang /* 5tuple filter structure */ 83a3920be3SXiaoyun Wang struct hinic_5tuple_filter { 84a3920be3SXiaoyun Wang TAILQ_ENTRY(hinic_5tuple_filter) entries; 85a3920be3SXiaoyun Wang uint16_t index; /* the index of 5tuple filter */ 86a3920be3SXiaoyun Wang struct hinic_5tuple_filter_info filter_info; 87a3920be3SXiaoyun Wang uint16_t queue; /* rx queue assigned to */ 88a3920be3SXiaoyun Wang }; 89a3920be3SXiaoyun Wang 90a3920be3SXiaoyun Wang TAILQ_HEAD(hinic_5tuple_filter_list, hinic_5tuple_filter); 91a3920be3SXiaoyun Wang 92a3920be3SXiaoyun Wang /* 93a3920be3SXiaoyun Wang * If this filter is added by configuration, 94a3920be3SXiaoyun Wang * it should not be removed. 95a3920be3SXiaoyun Wang */ 96a3920be3SXiaoyun Wang struct hinic_pkt_filter { 97a3920be3SXiaoyun Wang uint16_t pkt_proto; 98a3920be3SXiaoyun Wang uint8_t qid; 99a3920be3SXiaoyun Wang bool enable; 100a3920be3SXiaoyun Wang }; 101a3920be3SXiaoyun Wang 102a3920be3SXiaoyun Wang /* Structure to store filters' info. */ 103a3920be3SXiaoyun Wang struct hinic_filter_info { 104a3920be3SXiaoyun Wang uint8_t pkt_type; 105a3920be3SXiaoyun Wang uint8_t qid; 106a3920be3SXiaoyun Wang uint64_t type_mask; /* Bit mask for every used filter */ 107a3920be3SXiaoyun Wang struct hinic_5tuple_filter_list fivetuple_list; 108a3920be3SXiaoyun Wang struct hinic_pkt_filter pkt_filters[HINIC_MAX_Q_FILTERS]; 109a3920be3SXiaoyun Wang }; 110a3920be3SXiaoyun Wang 11173122b52SXiaoyun Wang /* Information about the fdir mode. */ 11273122b52SXiaoyun Wang struct hinic_hw_fdir_mask { 11373122b52SXiaoyun Wang uint32_t src_ipv4_mask; 11473122b52SXiaoyun Wang uint32_t dst_ipv4_mask; 11573122b52SXiaoyun Wang uint16_t src_port_mask; 11673122b52SXiaoyun Wang uint16_t dst_port_mask; 1171fe89aa3SXiaoyun Wang uint16_t proto_mask; 1181fe89aa3SXiaoyun Wang uint16_t tunnel_flag; 1191fe89aa3SXiaoyun Wang uint16_t tunnel_inner_src_port_mask; 1201fe89aa3SXiaoyun Wang uint16_t tunnel_inner_dst_port_mask; 1219d441c45SXiaoyun Wang uint16_t dst_ipv6_mask; 12273122b52SXiaoyun Wang }; 12373122b52SXiaoyun Wang 12473122b52SXiaoyun Wang /* Flow Director attribute */ 12573122b52SXiaoyun Wang struct hinic_atr_input { 1261fe89aa3SXiaoyun Wang uint32_t dst_ip; 1271fe89aa3SXiaoyun Wang uint32_t src_ip; 1281fe89aa3SXiaoyun Wang uint16_t src_port; 1291fe89aa3SXiaoyun Wang uint16_t dst_port; 1301fe89aa3SXiaoyun Wang uint16_t proto; 1311fe89aa3SXiaoyun Wang uint16_t tunnel_flag; 1321fe89aa3SXiaoyun Wang uint16_t tunnel_inner_src_port; 1331fe89aa3SXiaoyun Wang uint16_t tunnel_inner_dst_port; 1349d441c45SXiaoyun Wang uint8_t dst_ipv6[16]; 1351fe89aa3SXiaoyun Wang }; 1361fe89aa3SXiaoyun Wang 1371fe89aa3SXiaoyun Wang enum hinic_fdir_mode { 1381fe89aa3SXiaoyun Wang HINIC_FDIR_MODE_NORMAL = 0, 1391fe89aa3SXiaoyun Wang HINIC_FDIR_MODE_TCAM = 1, 1401fe89aa3SXiaoyun Wang }; 1411fe89aa3SXiaoyun Wang 1421fe89aa3SXiaoyun Wang #define HINIC_PF_MAX_TCAM_FILTERS 1024 1431fe89aa3SXiaoyun Wang #define HINIC_VF_MAX_TCAM_FILTERS 128 1441fe89aa3SXiaoyun Wang #define HINIC_SUPPORT_PF_MAX_NUM 4 1451fe89aa3SXiaoyun Wang #define HINIC_TOTAL_PF_MAX_NUM 16 1461fe89aa3SXiaoyun Wang #define HINIC_SUPPORT_VF_MAX_NUM 32 1471fe89aa3SXiaoyun Wang #define HINIC_TCAM_BLOCK_TYPE_PF 0 /* 1024 tcam index of a block */ 1481fe89aa3SXiaoyun Wang #define HINIC_TCAM_BLOCK_TYPE_VF 1 /* 128 tcam index of a block */ 1491fe89aa3SXiaoyun Wang 1501fe89aa3SXiaoyun Wang #define HINIC_PKT_VF_TCAM_INDEX_START(block_index) \ 1511fe89aa3SXiaoyun Wang (HINIC_PF_MAX_TCAM_FILTERS * HINIC_SUPPORT_PF_MAX_NUM + \ 1521fe89aa3SXiaoyun Wang HINIC_VF_MAX_TCAM_FILTERS * (block_index)) 1531fe89aa3SXiaoyun Wang 1541fe89aa3SXiaoyun Wang TAILQ_HEAD(hinic_tcam_filter_list, hinic_tcam_filter); 1551fe89aa3SXiaoyun Wang 1561fe89aa3SXiaoyun Wang struct hinic_tcam_info { 1571fe89aa3SXiaoyun Wang struct hinic_tcam_filter_list tcam_list; 1581fe89aa3SXiaoyun Wang u8 tcam_index_array[HINIC_PF_MAX_TCAM_FILTERS]; 1591fe89aa3SXiaoyun Wang u16 tcam_block_index; 1601fe89aa3SXiaoyun Wang u16 tcam_rule_nums; 1611fe89aa3SXiaoyun Wang }; 1621fe89aa3SXiaoyun Wang 1631fe89aa3SXiaoyun Wang struct tag_tcam_key_mem { 1641fe89aa3SXiaoyun Wang #if (RTE_BYTE_ORDER == RTE_BIG_ENDIAN) 1651fe89aa3SXiaoyun Wang 1661fe89aa3SXiaoyun Wang u32 rsvd0:16; 1671fe89aa3SXiaoyun Wang u32 function_id:16; 1681fe89aa3SXiaoyun Wang 1691fe89aa3SXiaoyun Wang u32 protocol:8; 1701fe89aa3SXiaoyun Wang /* 1711fe89aa3SXiaoyun Wang * tunnel packet, mask must be 0xff, spec value is 1; 1721fe89aa3SXiaoyun Wang * normal packet, mask must be 0, spec value is 0; 173*7be78d02SJosh Soref * if tunnel packet, ucode use 1741fe89aa3SXiaoyun Wang * sip/dip/protocol/src_port/dst_dport from inner packet 1751fe89aa3SXiaoyun Wang */ 1761fe89aa3SXiaoyun Wang u32 tunnel_flag:8; 1771fe89aa3SXiaoyun Wang u32 sip_h:16; 1781fe89aa3SXiaoyun Wang 1791fe89aa3SXiaoyun Wang u32 sip_l:16; 1801fe89aa3SXiaoyun Wang u32 dip_h:16; 1811fe89aa3SXiaoyun Wang 1821fe89aa3SXiaoyun Wang u32 dip_l:16; 1831fe89aa3SXiaoyun Wang u32 src_port:16; 1841fe89aa3SXiaoyun Wang 1851fe89aa3SXiaoyun Wang u32 dst_port:16; 1861fe89aa3SXiaoyun Wang /* 1871fe89aa3SXiaoyun Wang * tunnel packet and normal packet, 1881fe89aa3SXiaoyun Wang * ext_dip mask must be 0xffffffff 1891fe89aa3SXiaoyun Wang */ 1901fe89aa3SXiaoyun Wang u32 ext_dip_h:16; 1911fe89aa3SXiaoyun Wang u32 ext_dip_l:16; 1921fe89aa3SXiaoyun Wang u32 rsvd2:16; 1931fe89aa3SXiaoyun Wang #else 1941fe89aa3SXiaoyun Wang u32 function_id:16; 1951fe89aa3SXiaoyun Wang u32 rsvd0:16; 1961fe89aa3SXiaoyun Wang 1971fe89aa3SXiaoyun Wang u32 sip_h:16; 1981fe89aa3SXiaoyun Wang u32 tunnel_flag:8; 1991fe89aa3SXiaoyun Wang u32 protocol:8; 2001fe89aa3SXiaoyun Wang 2011fe89aa3SXiaoyun Wang u32 dip_h:16; 2021fe89aa3SXiaoyun Wang u32 sip_l:16; 2031fe89aa3SXiaoyun Wang 2041fe89aa3SXiaoyun Wang u32 src_port:16; 2051fe89aa3SXiaoyun Wang u32 dip_l:16; 2061fe89aa3SXiaoyun Wang 2071fe89aa3SXiaoyun Wang u32 ext_dip_h:16; 2081fe89aa3SXiaoyun Wang u32 dst_port:16; 2091fe89aa3SXiaoyun Wang 2101fe89aa3SXiaoyun Wang u32 rsvd2:16; 2111fe89aa3SXiaoyun Wang u32 ext_dip_l:16; 2121fe89aa3SXiaoyun Wang #endif 2131fe89aa3SXiaoyun Wang }; 2141fe89aa3SXiaoyun Wang 2159d441c45SXiaoyun Wang struct tag_tcam_key_ipv6_mem { 2169d441c45SXiaoyun Wang #if (RTE_BYTE_ORDER == RTE_BIG_ENDIAN) 2179d441c45SXiaoyun Wang u32 rsvd0:16; 2189d441c45SXiaoyun Wang u32 ipv6_flag:1; 2199d441c45SXiaoyun Wang u32 protocol:7; 2209d441c45SXiaoyun Wang u32 function_id:8; 2219d441c45SXiaoyun Wang 2229d441c45SXiaoyun Wang u32 dst_port:16; 2239d441c45SXiaoyun Wang u32 ipv6_key0:16; 2249d441c45SXiaoyun Wang 2259d441c45SXiaoyun Wang u32 ipv6_key1:16; 2269d441c45SXiaoyun Wang u32 ipv6_key2:16; 2279d441c45SXiaoyun Wang 2289d441c45SXiaoyun Wang u32 ipv6_key3:16; 2299d441c45SXiaoyun Wang u32 ipv6_key4:16; 2309d441c45SXiaoyun Wang 2319d441c45SXiaoyun Wang u32 ipv6_key5:16; 2329d441c45SXiaoyun Wang u32 ipv6_key6:16; 2339d441c45SXiaoyun Wang 2349d441c45SXiaoyun Wang u32 ipv6_key7:16; 2359d441c45SXiaoyun Wang u32 rsvd2:16; 2369d441c45SXiaoyun Wang #else 2379d441c45SXiaoyun Wang u32 function_id:8; 2389d441c45SXiaoyun Wang u32 protocol:7; 2399d441c45SXiaoyun Wang u32 ipv6_flag:1; 2409d441c45SXiaoyun Wang u32 rsvd0:16; 2419d441c45SXiaoyun Wang 2429d441c45SXiaoyun Wang u32 ipv6_key0:16; 2439d441c45SXiaoyun Wang u32 dst_port:16; 2449d441c45SXiaoyun Wang 2459d441c45SXiaoyun Wang u32 ipv6_key2:16; 2469d441c45SXiaoyun Wang u32 ipv6_key1:16; 2479d441c45SXiaoyun Wang 2489d441c45SXiaoyun Wang u32 ipv6_key4:16; 2499d441c45SXiaoyun Wang u32 ipv6_key3:16; 2509d441c45SXiaoyun Wang 2519d441c45SXiaoyun Wang u32 ipv6_key6:16; 2529d441c45SXiaoyun Wang u32 ipv6_key5:16; 2539d441c45SXiaoyun Wang 2549d441c45SXiaoyun Wang u32 rsvd2:16; 2559d441c45SXiaoyun Wang u32 ipv6_key7:16; 2569d441c45SXiaoyun Wang #endif 2579d441c45SXiaoyun Wang }; 2589d441c45SXiaoyun Wang 2591fe89aa3SXiaoyun Wang struct tag_tcam_key { 2609d441c45SXiaoyun Wang union { 2611fe89aa3SXiaoyun Wang struct tag_tcam_key_mem key_info; 2629d441c45SXiaoyun Wang struct tag_tcam_key_ipv6_mem key_info_ipv6; 2639d441c45SXiaoyun Wang }; 2649d441c45SXiaoyun Wang 2659d441c45SXiaoyun Wang union { 2661fe89aa3SXiaoyun Wang struct tag_tcam_key_mem key_mask; 2679d441c45SXiaoyun Wang struct tag_tcam_key_ipv6_mem key_mask_ipv6; 2689d441c45SXiaoyun Wang }; 26973122b52SXiaoyun Wang }; 27073122b52SXiaoyun Wang 27173122b52SXiaoyun Wang struct hinic_fdir_rule { 27273122b52SXiaoyun Wang struct hinic_hw_fdir_mask mask; 27373122b52SXiaoyun Wang struct hinic_atr_input hinic_fdir; /* key of fdir filter */ 27473122b52SXiaoyun Wang uint8_t queue; /* queue assigned when matched */ 2751fe89aa3SXiaoyun Wang enum hinic_fdir_mode mode; /* fdir type */ 2761fe89aa3SXiaoyun Wang u16 tcam_index; 27773122b52SXiaoyun Wang }; 27873122b52SXiaoyun Wang 279a3920be3SXiaoyun Wang /* ntuple filter list structure */ 280a3920be3SXiaoyun Wang struct hinic_ntuple_filter_ele { 281a3920be3SXiaoyun Wang TAILQ_ENTRY(hinic_ntuple_filter_ele) entries; 282a3920be3SXiaoyun Wang struct rte_eth_ntuple_filter filter_info; 283a3920be3SXiaoyun Wang }; 284a3920be3SXiaoyun Wang 285f4ca3fd5SXiaoyun Wang /* ethertype filter list structure */ 286f4ca3fd5SXiaoyun Wang struct hinic_ethertype_filter_ele { 287f4ca3fd5SXiaoyun Wang TAILQ_ENTRY(hinic_ethertype_filter_ele) entries; 288f4ca3fd5SXiaoyun Wang struct rte_eth_ethertype_filter filter_info; 289f4ca3fd5SXiaoyun Wang }; 290f4ca3fd5SXiaoyun Wang 291f4ca3fd5SXiaoyun Wang /* fdir filter list structure */ 292f4ca3fd5SXiaoyun Wang struct hinic_fdir_rule_ele { 293f4ca3fd5SXiaoyun Wang TAILQ_ENTRY(hinic_fdir_rule_ele) entries; 294f4ca3fd5SXiaoyun Wang struct hinic_fdir_rule filter_info; 295f4ca3fd5SXiaoyun Wang }; 296f4ca3fd5SXiaoyun Wang 2971fe89aa3SXiaoyun Wang struct hinic_tcam_filter { 2981fe89aa3SXiaoyun Wang TAILQ_ENTRY(hinic_tcam_filter) entries; 2991fe89aa3SXiaoyun Wang uint16_t index; /* tcam index */ 3001fe89aa3SXiaoyun Wang struct tag_tcam_key tcam_key; 3011fe89aa3SXiaoyun Wang uint16_t queue; /* rx queue assigned to */ 3021fe89aa3SXiaoyun Wang }; 3031fe89aa3SXiaoyun Wang 304a3920be3SXiaoyun Wang struct rte_flow { 305a3920be3SXiaoyun Wang enum rte_filter_type filter_type; 306a3920be3SXiaoyun Wang void *rule; 307a3920be3SXiaoyun Wang }; 308a3920be3SXiaoyun Wang 309a3920be3SXiaoyun Wang /* hinic_flow memory list structure */ 310a3920be3SXiaoyun Wang struct hinic_flow_mem { 311a3920be3SXiaoyun Wang TAILQ_ENTRY(hinic_flow_mem) entries; 312a3920be3SXiaoyun Wang struct rte_flow *flow; 313a3920be3SXiaoyun Wang }; 314a3920be3SXiaoyun Wang 315a3920be3SXiaoyun Wang TAILQ_HEAD(hinic_ntuple_filter_list, hinic_ntuple_filter_ele); 316f4ca3fd5SXiaoyun Wang TAILQ_HEAD(hinic_ethertype_filter_list, hinic_ethertype_filter_ele); 317f4ca3fd5SXiaoyun Wang TAILQ_HEAD(hinic_fdir_rule_filter_list, hinic_fdir_rule_ele); 318a3920be3SXiaoyun Wang TAILQ_HEAD(hinic_flow_mem_list, hinic_flow_mem); 319a3920be3SXiaoyun Wang 32073122b52SXiaoyun Wang extern const struct rte_flow_ops hinic_flow_ops; 32173122b52SXiaoyun Wang 3221d09792aSZiyang Xuan /* hinic nic_device */ 3231d09792aSZiyang Xuan struct hinic_nic_dev { 3241d09792aSZiyang Xuan /* hardware device */ 3251d09792aSZiyang Xuan struct hinic_hwdev *hwdev; 3261d09792aSZiyang Xuan struct hinic_txq **txqs; 3271d09792aSZiyang Xuan struct hinic_rxq **rxqs; 3281d09792aSZiyang Xuan struct rte_mempool *cpy_mpool; 3291d09792aSZiyang Xuan u16 num_qps; 3301d09792aSZiyang Xuan u16 num_sq; 3311d09792aSZiyang Xuan u16 num_rq; 3321d09792aSZiyang Xuan u16 mtu_size; 3331d09792aSZiyang Xuan u8 rss_tmpl_idx; 3341d09792aSZiyang Xuan u8 rss_indir_flag; 3351d09792aSZiyang Xuan u8 num_rss; 3361d09792aSZiyang Xuan u8 rx_queue_list[HINIC_MAX_RX_QUEUES]; 3371d09792aSZiyang Xuan 338ef6f2f5cSXiaoyun Wang bool pause_set; 339ef6f2f5cSXiaoyun Wang struct nic_pause_config nic_pause; 340ef6f2f5cSXiaoyun Wang 341fdba3bf1SXiaoyun Wang u32 vfta[HINIC_VFTA_SIZE]; /* VLAN bitmap */ 342fdba3bf1SXiaoyun Wang 34300499a22SXiaoyun Wang struct rte_ether_addr default_addr; 34400499a22SXiaoyun Wang struct rte_ether_addr *mc_list; 3451d09792aSZiyang Xuan /* info */ 3461d09792aSZiyang Xuan unsigned int flags; 3471d09792aSZiyang Xuan struct nic_service_cap nic_cap; 348fdba3bf1SXiaoyun Wang u32 rx_mode_status; /* promisc or allmulticast */ 349224cff4bSXiaoyun Wang pthread_mutex_t rx_mode_mutex; 3500371535dSJoyce Kong u32 dev_status; 3511d09792aSZiyang Xuan 3521d09792aSZiyang Xuan char proc_dev_name[HINIC_DEV_NAME_LEN]; 3531d09792aSZiyang Xuan /* PF0->COS4, PF1->COS5, PF2->COS6, PF3->COS7, 3541d09792aSZiyang Xuan * vf: the same with associate pf 3551d09792aSZiyang Xuan */ 3561d09792aSZiyang Xuan u32 default_cos; 357c3ba1f0fSXiaoyun Wang u32 rx_csum_en; 358a3920be3SXiaoyun Wang 359a3920be3SXiaoyun Wang struct hinic_filter_info filter; 3601fe89aa3SXiaoyun Wang struct hinic_tcam_info tcam; 361a3920be3SXiaoyun Wang struct hinic_ntuple_filter_list filter_ntuple_list; 362f4ca3fd5SXiaoyun Wang struct hinic_ethertype_filter_list filter_ethertype_list; 363f4ca3fd5SXiaoyun Wang struct hinic_fdir_rule_filter_list filter_fdir_rule_list; 364a3920be3SXiaoyun Wang struct hinic_flow_mem_list hinic_flow_list; 3651d09792aSZiyang Xuan }; 3661d09792aSZiyang Xuan 3671742421bSXiaoyun Wang void hinic_free_fdir_filter(struct hinic_nic_dev *nic_dev); 3681742421bSXiaoyun Wang 3691fe89aa3SXiaoyun Wang void hinic_destroy_fdir_filter(struct rte_eth_dev *dev); 3701d09792aSZiyang Xuan #endif /* _HINIC_PMD_ETHDEV_H_ */ 371