xref: /dpdk/drivers/net/hinic/hinic_pmd_ethdev.h (revision 7be78d027918dbc846e502780faf94d5acdf5f75)
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