xref: /f-stack/dpdk/drivers/net/ixgbe/ixgbe_ethdev.h (revision 2d9fd380)
1d30ea906Sjfb8856606 /* SPDX-License-Identifier: BSD-3-Clause
2d30ea906Sjfb8856606  * Copyright(c) 2010-2016 Intel Corporation
3a9643ea8Slogwang  */
4a9643ea8Slogwang 
5a9643ea8Slogwang #ifndef _IXGBE_ETHDEV_H_
6a9643ea8Slogwang #define _IXGBE_ETHDEV_H_
7d30ea906Sjfb8856606 
8d30ea906Sjfb8856606 #include <stdint.h>
9d30ea906Sjfb8856606 
102bfe3f2eSlogwang #include "base/ixgbe_type.h"
11a9643ea8Slogwang #include "base/ixgbe_dcb.h"
12a9643ea8Slogwang #include "base/ixgbe_dcb_82599.h"
13a9643ea8Slogwang #include "base/ixgbe_dcb_82598.h"
14a9643ea8Slogwang #include "ixgbe_bypass.h"
15*2d9fd380Sjfb8856606 #ifdef RTE_LIB_SECURITY
162bfe3f2eSlogwang #include "ixgbe_ipsec.h"
172bfe3f2eSlogwang #endif
18d30ea906Sjfb8856606 #include <rte_flow.h>
19a9643ea8Slogwang #include <rte_time.h>
202bfe3f2eSlogwang #include <rte_hash.h>
212bfe3f2eSlogwang #include <rte_pci.h>
222bfe3f2eSlogwang #include <rte_bus_pci.h>
232bfe3f2eSlogwang #include <rte_tm_driver.h>
24a9643ea8Slogwang 
25a9643ea8Slogwang /* need update link, bit flag */
26a9643ea8Slogwang #define IXGBE_FLAG_NEED_LINK_UPDATE (uint32_t)(1 << 0)
27a9643ea8Slogwang #define IXGBE_FLAG_MAILBOX          (uint32_t)(1 << 1)
28a9643ea8Slogwang #define IXGBE_FLAG_PHY_INTERRUPT    (uint32_t)(1 << 2)
292bfe3f2eSlogwang #define IXGBE_FLAG_MACSEC           (uint32_t)(1 << 3)
302bfe3f2eSlogwang #define IXGBE_FLAG_NEED_LINK_CONFIG (uint32_t)(1 << 4)
31a9643ea8Slogwang 
32a9643ea8Slogwang /*
33a9643ea8Slogwang  * Defines that were not part of ixgbe_type.h as they are not used by the
34a9643ea8Slogwang  * FreeBSD driver.
35a9643ea8Slogwang  */
36a9643ea8Slogwang #define IXGBE_ADVTXD_MAC_1588       0x00080000 /* IEEE1588 Timestamp packet */
37a9643ea8Slogwang #define IXGBE_RXD_STAT_TMST         0x10000    /* Timestamped Packet indication */
38a9643ea8Slogwang #define IXGBE_ADVTXD_TUCMD_L4T_RSV  0x00001800 /* L4 Packet TYPE, resvd  */
39a9643ea8Slogwang #define IXGBE_RXDADV_ERR_CKSUM_BIT  30
40a9643ea8Slogwang #define IXGBE_RXDADV_ERR_CKSUM_MSK  3
41a9643ea8Slogwang #define IXGBE_ADVTXD_MACLEN_SHIFT   9          /* Bit shift for l2_len */
42a9643ea8Slogwang #define IXGBE_NB_STAT_MAPPING_REGS  32
43a9643ea8Slogwang #define IXGBE_EXTENDED_VLAN	  (uint32_t)(1 << 26) /* EXTENDED VLAN ENABLE */
44a9643ea8Slogwang #define IXGBE_VFTA_SIZE 128
45a9643ea8Slogwang #define IXGBE_VLAN_TAG_SIZE 4
46d30ea906Sjfb8856606 #define IXGBE_HKEY_MAX_INDEX 10
47a9643ea8Slogwang #define IXGBE_MAX_RX_QUEUE_NUM	128
48a9643ea8Slogwang #define IXGBE_MAX_INTR_QUEUE_NUM	15
49a9643ea8Slogwang #define IXGBE_VMDQ_DCB_NB_QUEUES     IXGBE_MAX_RX_QUEUE_NUM
50a9643ea8Slogwang #define IXGBE_DCB_NB_QUEUES          IXGBE_MAX_RX_QUEUE_NUM
51a9643ea8Slogwang #define IXGBE_NONE_MODE_TX_NB_QUEUES 64
52a9643ea8Slogwang 
53a9643ea8Slogwang #ifndef NBBY
54a9643ea8Slogwang #define NBBY	8	/* number of bits in a byte */
55a9643ea8Slogwang #endif
56a9643ea8Slogwang #define IXGBE_HWSTRIP_BITMAP_SIZE (IXGBE_MAX_RX_QUEUE_NUM / (sizeof(uint32_t) * NBBY))
57a9643ea8Slogwang 
582bfe3f2eSlogwang /* EITR Interval is in 2048ns uinits for 1G and 10G link */
59a9643ea8Slogwang #define IXGBE_EITR_INTERVAL_UNIT_NS	2048
60a9643ea8Slogwang #define IXGBE_EITR_ITR_INT_SHIFT       3
61a9643ea8Slogwang #define IXGBE_EITR_INTERVAL_US(us) \
62a9643ea8Slogwang 	(((us) * 1000 / IXGBE_EITR_INTERVAL_UNIT_NS << IXGBE_EITR_ITR_INT_SHIFT) & \
63a9643ea8Slogwang 		IXGBE_EITR_ITR_INT_MASK)
64a9643ea8Slogwang 
65d30ea906Sjfb8856606 #define IXGBE_QUEUE_ITR_INTERVAL_DEFAULT	500 /* 500us */
66a9643ea8Slogwang 
67a9643ea8Slogwang /* Loopback operation modes */
684418919fSjohnjiang #define IXGBE_LPBK_NONE   0x0 /* Default value. Loopback is disabled. */
694418919fSjohnjiang #define IXGBE_LPBK_TX_RX  0x1 /* Tx->Rx loopback operation is enabled. */
704418919fSjohnjiang /* X540-X550 specific loopback operations */
714418919fSjohnjiang #define IXGBE_MII_AUTONEG_ENABLE        0x1000 /* Auto-negociation enable (default = 1) */
72a9643ea8Slogwang 
73a9643ea8Slogwang #define IXGBE_MAX_JUMBO_FRAME_SIZE      0x2600 /* Maximum Jumbo frame size. */
74a9643ea8Slogwang 
75a9643ea8Slogwang #define IXGBE_RTTBCNRC_RF_INT_MASK_BASE 0x000003FF
76a9643ea8Slogwang #define IXGBE_RTTBCNRC_RF_INT_MASK_M \
77a9643ea8Slogwang 	(IXGBE_RTTBCNRC_RF_INT_MASK_BASE << IXGBE_RTTBCNRC_RF_INT_SHIFT)
78a9643ea8Slogwang 
79a9643ea8Slogwang #define IXGBE_MAX_QUEUE_NUM_PER_VF  8
80a9643ea8Slogwang 
81a9643ea8Slogwang #define IXGBE_SYN_FILTER_ENABLE         0x00000001 /* syn filter enable field */
82a9643ea8Slogwang #define IXGBE_SYN_FILTER_QUEUE          0x000000FE /* syn filter queue field */
83a9643ea8Slogwang #define IXGBE_SYN_FILTER_QUEUE_SHIFT    1          /* syn filter queue field shift */
84a9643ea8Slogwang #define IXGBE_SYN_FILTER_SYNQFP         0x80000000 /* syn filter SYNQFP */
85a9643ea8Slogwang 
86a9643ea8Slogwang #define IXGBE_ETQF_UP                   0x00070000 /* ethertype filter priority field */
87a9643ea8Slogwang #define IXGBE_ETQF_SHIFT                16
88a9643ea8Slogwang #define IXGBE_ETQF_UP_EN                0x00080000
89a9643ea8Slogwang #define IXGBE_ETQF_ETHERTYPE            0x0000FFFF /* ethertype filter ethertype field */
90a9643ea8Slogwang #define IXGBE_ETQF_MAX_PRI              7
91a9643ea8Slogwang 
92a9643ea8Slogwang #define IXGBE_SDPQF_DSTPORT             0xFFFF0000 /* dst port field */
93a9643ea8Slogwang #define IXGBE_SDPQF_DSTPORT_SHIFT       16         /* dst port field shift */
94a9643ea8Slogwang #define IXGBE_SDPQF_SRCPORT             0x0000FFFF /* src port field */
95a9643ea8Slogwang 
96a9643ea8Slogwang #define IXGBE_L34T_IMIR_SIZE_BP         0x00001000
97a9643ea8Slogwang #define IXGBE_L34T_IMIR_RESERVE         0x00080000 /* bit 13 to 19 must be set to 1000000b. */
98a9643ea8Slogwang #define IXGBE_L34T_IMIR_LLI             0x00100000
99a9643ea8Slogwang #define IXGBE_L34T_IMIR_QUEUE           0x0FE00000
100a9643ea8Slogwang #define IXGBE_L34T_IMIR_QUEUE_SHIFT     21
101a9643ea8Slogwang #define IXGBE_5TUPLE_MAX_PRI            7
102a9643ea8Slogwang #define IXGBE_5TUPLE_MIN_PRI            1
103a9643ea8Slogwang 
1044418919fSjohnjiang /* The overhead from MTU to max frame size. */
1054418919fSjohnjiang #define IXGBE_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN)
1064418919fSjohnjiang 
107579bf1e2Sjfb8856606 /* bit of VXLAN tunnel type | 7 bits of zeros  | 8 bits of zeros*/
108579bf1e2Sjfb8856606 #define IXGBE_FDIR_VXLAN_TUNNEL_TYPE    0x8000
109579bf1e2Sjfb8856606 /* bit of NVGRE tunnel type | 7 bits of zeros  | 8 bits of zeros*/
110579bf1e2Sjfb8856606 #define IXGBE_FDIR_NVGRE_TUNNEL_TYPE    0x0
111579bf1e2Sjfb8856606 
112a9643ea8Slogwang #define IXGBE_RSS_OFFLOAD_ALL ( \
113a9643ea8Slogwang 	ETH_RSS_IPV4 | \
114a9643ea8Slogwang 	ETH_RSS_NONFRAG_IPV4_TCP | \
115a9643ea8Slogwang 	ETH_RSS_NONFRAG_IPV4_UDP | \
116a9643ea8Slogwang 	ETH_RSS_IPV6 | \
117a9643ea8Slogwang 	ETH_RSS_NONFRAG_IPV6_TCP | \
118a9643ea8Slogwang 	ETH_RSS_NONFRAG_IPV6_UDP | \
119a9643ea8Slogwang 	ETH_RSS_IPV6_EX | \
120a9643ea8Slogwang 	ETH_RSS_IPV6_TCP_EX | \
121a9643ea8Slogwang 	ETH_RSS_IPV6_UDP_EX)
122a9643ea8Slogwang 
123a9643ea8Slogwang #define IXGBE_VF_IRQ_ENABLE_MASK        3          /* vf irq enable mask */
124a9643ea8Slogwang #define IXGBE_VF_MAXMSIVECTOR           1
125a9643ea8Slogwang 
126a9643ea8Slogwang #define IXGBE_MISC_VEC_ID               RTE_INTR_VEC_ZERO_OFFSET
127a9643ea8Slogwang #define IXGBE_RX_VEC_START              RTE_INTR_VEC_RXTX_OFFSET
128a9643ea8Slogwang 
1292bfe3f2eSlogwang #define IXGBE_SECTX_MINSECIFG_MASK      0x0000000F
1302bfe3f2eSlogwang 
1312bfe3f2eSlogwang #define IXGBE_MACSEC_PNTHRSH            0xFFFFFE00
1322bfe3f2eSlogwang 
1332bfe3f2eSlogwang #define IXGBE_MAX_FDIR_FILTER_NUM       (1024 * 32)
1342bfe3f2eSlogwang #define IXGBE_MAX_L2_TN_FILTER_NUM      128
1352bfe3f2eSlogwang 
1362bfe3f2eSlogwang #define MAC_TYPE_FILTER_SUP_EXT(type)    do {\
1372bfe3f2eSlogwang 	if ((type) != ixgbe_mac_82599EB && (type) != ixgbe_mac_X540)\
1382bfe3f2eSlogwang 		return -ENOTSUP;\
1392bfe3f2eSlogwang } while (0)
1402bfe3f2eSlogwang 
1412bfe3f2eSlogwang #define MAC_TYPE_FILTER_SUP(type)    do {\
1422bfe3f2eSlogwang 	if ((type) != ixgbe_mac_82599EB && (type) != ixgbe_mac_X540 &&\
1432bfe3f2eSlogwang 		(type) != ixgbe_mac_X550 && (type) != ixgbe_mac_X550EM_x &&\
1442bfe3f2eSlogwang 		(type) != ixgbe_mac_X550EM_a)\
1452bfe3f2eSlogwang 		return -ENOTSUP;\
1462bfe3f2eSlogwang } while (0)
1472bfe3f2eSlogwang 
1482bfe3f2eSlogwang /* Link speed for X550 auto negotiation */
1492bfe3f2eSlogwang #define IXGBE_LINK_SPEED_X550_AUTONEG	(IXGBE_LINK_SPEED_100_FULL | \
1502bfe3f2eSlogwang 					 IXGBE_LINK_SPEED_1GB_FULL | \
1512bfe3f2eSlogwang 					 IXGBE_LINK_SPEED_2_5GB_FULL | \
1522bfe3f2eSlogwang 					 IXGBE_LINK_SPEED_5GB_FULL | \
1532bfe3f2eSlogwang 					 IXGBE_LINK_SPEED_10GB_FULL)
1542bfe3f2eSlogwang 
155a9643ea8Slogwang /*
156a9643ea8Slogwang  * Information about the fdir mode.
157a9643ea8Slogwang  */
158a9643ea8Slogwang struct ixgbe_hw_fdir_mask {
159a9643ea8Slogwang 	uint16_t vlan_tci_mask;
160a9643ea8Slogwang 	uint32_t src_ipv4_mask;
161a9643ea8Slogwang 	uint32_t dst_ipv4_mask;
162a9643ea8Slogwang 	uint16_t src_ipv6_mask;
163a9643ea8Slogwang 	uint16_t dst_ipv6_mask;
164a9643ea8Slogwang 	uint16_t src_port_mask;
165a9643ea8Slogwang 	uint16_t dst_port_mask;
166a9643ea8Slogwang 	uint16_t flex_bytes_mask;
167a9643ea8Slogwang 	uint8_t  mac_addr_byte_mask;
168a9643ea8Slogwang 	uint32_t tunnel_id_mask;
169a9643ea8Slogwang 	uint8_t  tunnel_type_mask;
170a9643ea8Slogwang };
171a9643ea8Slogwang 
1722bfe3f2eSlogwang struct ixgbe_fdir_filter {
1732bfe3f2eSlogwang 	TAILQ_ENTRY(ixgbe_fdir_filter) entries;
1742bfe3f2eSlogwang 	union ixgbe_atr_input ixgbe_fdir; /* key of fdir filter*/
1752bfe3f2eSlogwang 	uint32_t fdirflags; /* drop or forward */
1762bfe3f2eSlogwang 	uint32_t fdirhash; /* hash value for fdir */
1772bfe3f2eSlogwang 	uint8_t queue; /* assigned rx queue */
1782bfe3f2eSlogwang };
1792bfe3f2eSlogwang 
1802bfe3f2eSlogwang /* list of fdir filters */
1812bfe3f2eSlogwang TAILQ_HEAD(ixgbe_fdir_filter_list, ixgbe_fdir_filter);
1822bfe3f2eSlogwang 
1832bfe3f2eSlogwang struct ixgbe_fdir_rule {
1842bfe3f2eSlogwang 	struct ixgbe_hw_fdir_mask mask;
1852bfe3f2eSlogwang 	union ixgbe_atr_input ixgbe_fdir; /* key of fdir filter*/
1862bfe3f2eSlogwang 	bool b_spec; /* If TRUE, ixgbe_fdir, fdirflags, queue have meaning. */
1872bfe3f2eSlogwang 	bool b_mask; /* If TRUE, mask has meaning. */
1882bfe3f2eSlogwang 	enum rte_fdir_mode mode; /* IP, MAC VLAN, Tunnel */
1892bfe3f2eSlogwang 	uint32_t fdirflags; /* drop or forward */
1902bfe3f2eSlogwang 	uint32_t soft_id; /* an unique value for this rule */
1912bfe3f2eSlogwang 	uint8_t queue; /* assigned rx queue */
1922bfe3f2eSlogwang 	uint8_t flex_bytes_offset;
1932bfe3f2eSlogwang };
1942bfe3f2eSlogwang 
195a9643ea8Slogwang struct ixgbe_hw_fdir_info {
196a9643ea8Slogwang 	struct ixgbe_hw_fdir_mask mask;
197a9643ea8Slogwang 	uint8_t     flex_bytes_offset;
198a9643ea8Slogwang 	uint16_t    collision;
199a9643ea8Slogwang 	uint16_t    free;
200a9643ea8Slogwang 	uint16_t    maxhash;
201a9643ea8Slogwang 	uint8_t     maxlen;
202a9643ea8Slogwang 	uint64_t    add;
203a9643ea8Slogwang 	uint64_t    remove;
204a9643ea8Slogwang 	uint64_t    f_add;
205a9643ea8Slogwang 	uint64_t    f_remove;
2062bfe3f2eSlogwang 	struct ixgbe_fdir_filter_list fdir_list; /* filter list*/
2072bfe3f2eSlogwang 	/* store the pointers of the filters, index is the hash value. */
2082bfe3f2eSlogwang 	struct ixgbe_fdir_filter **hash_map;
2092bfe3f2eSlogwang 	struct rte_hash *hash_handle; /* cuckoo hash handler */
2102bfe3f2eSlogwang 	bool mask_added; /* If already got mask from consistent filter */
211a9643ea8Slogwang };
212a9643ea8Slogwang 
213d30ea906Sjfb8856606 struct ixgbe_rte_flow_rss_conf {
214d30ea906Sjfb8856606 	struct rte_flow_action_rss conf; /**< RSS parameters. */
215d30ea906Sjfb8856606 	uint8_t key[IXGBE_HKEY_MAX_INDEX * sizeof(uint32_t)]; /* Hash key. */
216d30ea906Sjfb8856606 	uint16_t queue[IXGBE_MAX_RX_QUEUE_NUM]; /**< Queues indices to use. */
217d30ea906Sjfb8856606 };
218d30ea906Sjfb8856606 
219a9643ea8Slogwang /* structure for interrupt relative data */
220a9643ea8Slogwang struct ixgbe_interrupt {
221a9643ea8Slogwang 	uint32_t flags;
222a9643ea8Slogwang 	uint32_t mask;
2232bfe3f2eSlogwang 	/*to save original mask during delayed handler */
2242bfe3f2eSlogwang 	uint32_t mask_original;
225a9643ea8Slogwang };
226a9643ea8Slogwang 
227a9643ea8Slogwang struct ixgbe_stat_mapping_registers {
228a9643ea8Slogwang 	uint32_t tqsm[IXGBE_NB_STAT_MAPPING_REGS];
229a9643ea8Slogwang 	uint32_t rqsmr[IXGBE_NB_STAT_MAPPING_REGS];
230a9643ea8Slogwang };
231a9643ea8Slogwang 
232a9643ea8Slogwang struct ixgbe_vfta {
233a9643ea8Slogwang 	uint32_t vfta[IXGBE_VFTA_SIZE];
234a9643ea8Slogwang };
235a9643ea8Slogwang 
236a9643ea8Slogwang struct ixgbe_hwstrip {
237a9643ea8Slogwang 	uint32_t bitmap[IXGBE_HWSTRIP_BITMAP_SIZE];
238a9643ea8Slogwang };
239a9643ea8Slogwang 
240a9643ea8Slogwang /*
241a9643ea8Slogwang  * VF data which used by PF host only
242a9643ea8Slogwang  */
243a9643ea8Slogwang #define IXGBE_MAX_VF_MC_ENTRIES		30
244a9643ea8Slogwang #define IXGBE_MAX_MR_RULE_ENTRIES	4 /* number of mirroring rules supported */
245a9643ea8Slogwang #define IXGBE_MAX_UTA                   128
246a9643ea8Slogwang 
247a9643ea8Slogwang struct ixgbe_uta_info {
248a9643ea8Slogwang 	uint8_t  uc_filter_type;
249a9643ea8Slogwang 	uint16_t uta_in_use;
250a9643ea8Slogwang 	uint32_t uta_shadow[IXGBE_MAX_UTA];
251a9643ea8Slogwang };
252a9643ea8Slogwang 
253a9643ea8Slogwang #define IXGBE_MAX_MIRROR_RULES 4  /* Maximum nb. of mirror rules. */
254a9643ea8Slogwang 
255a9643ea8Slogwang struct ixgbe_mirror_info {
256a9643ea8Slogwang 	struct rte_eth_mirror_conf mr_conf[IXGBE_MAX_MIRROR_RULES];
257a9643ea8Slogwang 	/**< store PF mirror rules configuration*/
258a9643ea8Slogwang };
259a9643ea8Slogwang 
260a9643ea8Slogwang struct ixgbe_vf_info {
2614418919fSjohnjiang 	uint8_t vf_mac_addresses[RTE_ETHER_ADDR_LEN];
262a9643ea8Slogwang 	uint16_t vf_mc_hashes[IXGBE_MAX_VF_MC_ENTRIES];
263a9643ea8Slogwang 	uint16_t num_vf_mc_hashes;
264a9643ea8Slogwang 	uint16_t default_vf_vlan_id;
265a9643ea8Slogwang 	uint16_t vlans_enabled;
266a9643ea8Slogwang 	bool clear_to_send;
267a9643ea8Slogwang 	uint16_t tx_rate[IXGBE_MAX_QUEUE_NUM_PER_VF];
268a9643ea8Slogwang 	uint16_t vlan_count;
269a9643ea8Slogwang 	uint8_t spoofchk_enabled;
270a9643ea8Slogwang 	uint8_t api_version;
271d30ea906Sjfb8856606 	uint16_t switch_domain_id;
2724418919fSjohnjiang 	uint16_t xcast_mode;
273*2d9fd380Sjfb8856606 	uint16_t mac_count;
274a9643ea8Slogwang };
275a9643ea8Slogwang 
276a9643ea8Slogwang /*
277a9643ea8Slogwang  *  Possible l4type of 5tuple filters.
278a9643ea8Slogwang  */
279a9643ea8Slogwang enum ixgbe_5tuple_protocol {
280a9643ea8Slogwang 	IXGBE_FILTER_PROTOCOL_TCP = 0,
281a9643ea8Slogwang 	IXGBE_FILTER_PROTOCOL_UDP,
282a9643ea8Slogwang 	IXGBE_FILTER_PROTOCOL_SCTP,
283a9643ea8Slogwang 	IXGBE_FILTER_PROTOCOL_NONE,
284a9643ea8Slogwang };
285a9643ea8Slogwang 
286a9643ea8Slogwang TAILQ_HEAD(ixgbe_5tuple_filter_list, ixgbe_5tuple_filter);
287a9643ea8Slogwang 
288a9643ea8Slogwang struct ixgbe_5tuple_filter_info {
289a9643ea8Slogwang 	uint32_t dst_ip;
290a9643ea8Slogwang 	uint32_t src_ip;
291a9643ea8Slogwang 	uint16_t dst_port;
292a9643ea8Slogwang 	uint16_t src_port;
293a9643ea8Slogwang 	enum ixgbe_5tuple_protocol proto;        /* l4 protocol. */
294a9643ea8Slogwang 	uint8_t priority;        /* seven levels (001b-111b), 111b is highest,
295a9643ea8Slogwang 				      used when more than one filter matches. */
296a9643ea8Slogwang 	uint8_t dst_ip_mask:1,   /* if mask is 1b, do not compare dst ip. */
297a9643ea8Slogwang 		src_ip_mask:1,   /* if mask is 1b, do not compare src ip. */
298a9643ea8Slogwang 		dst_port_mask:1, /* if mask is 1b, do not compare dst port. */
299a9643ea8Slogwang 		src_port_mask:1, /* if mask is 1b, do not compare src port. */
300a9643ea8Slogwang 		proto_mask:1;    /* if mask is 1b, do not compare protocol. */
301a9643ea8Slogwang };
302a9643ea8Slogwang 
303a9643ea8Slogwang /* 5tuple filter structure */
304a9643ea8Slogwang struct ixgbe_5tuple_filter {
305a9643ea8Slogwang 	TAILQ_ENTRY(ixgbe_5tuple_filter) entries;
306a9643ea8Slogwang 	uint16_t index;       /* the index of 5tuple filter */
307a9643ea8Slogwang 	struct ixgbe_5tuple_filter_info filter_info;
308a9643ea8Slogwang 	uint16_t queue;       /* rx queue assigned to */
309a9643ea8Slogwang };
310a9643ea8Slogwang 
311a9643ea8Slogwang #define IXGBE_5TUPLE_ARRAY_SIZE \
312a9643ea8Slogwang 	(RTE_ALIGN(IXGBE_MAX_FTQF_FILTERS, (sizeof(uint32_t) * NBBY)) / \
313a9643ea8Slogwang 	 (sizeof(uint32_t) * NBBY))
314a9643ea8Slogwang 
3152bfe3f2eSlogwang struct ixgbe_ethertype_filter {
3162bfe3f2eSlogwang 	uint16_t ethertype;
3172bfe3f2eSlogwang 	uint32_t etqf;
3182bfe3f2eSlogwang 	uint32_t etqs;
3192bfe3f2eSlogwang 	/**
3202bfe3f2eSlogwang 	 * If this filter is added by configuration,
3212bfe3f2eSlogwang 	 * it should not be removed.
3222bfe3f2eSlogwang 	 */
3232bfe3f2eSlogwang 	bool     conf;
3242bfe3f2eSlogwang };
3252bfe3f2eSlogwang 
326a9643ea8Slogwang /*
327a9643ea8Slogwang  * Structure to store filters' info.
328a9643ea8Slogwang  */
329a9643ea8Slogwang struct ixgbe_filter_info {
330a9643ea8Slogwang 	uint8_t ethertype_mask;  /* Bit mask for every used ethertype filter */
331a9643ea8Slogwang 	/* store used ethertype filters*/
3322bfe3f2eSlogwang 	struct ixgbe_ethertype_filter ethertype_filters[IXGBE_MAX_ETQF_FILTERS];
333a9643ea8Slogwang 	/* Bit mask for every used 5tuple filter */
334a9643ea8Slogwang 	uint32_t fivetuple_mask[IXGBE_5TUPLE_ARRAY_SIZE];
335a9643ea8Slogwang 	struct ixgbe_5tuple_filter_list fivetuple_list;
3362bfe3f2eSlogwang 	/* store the SYN filter info */
3372bfe3f2eSlogwang 	uint32_t syn_info;
338d30ea906Sjfb8856606 	/* store the rss filter info */
339d30ea906Sjfb8856606 	struct ixgbe_rte_flow_rss_conf rss_info;
3402bfe3f2eSlogwang };
3412bfe3f2eSlogwang 
3422bfe3f2eSlogwang struct ixgbe_l2_tn_key {
3432bfe3f2eSlogwang 	enum rte_eth_tunnel_type          l2_tn_type;
3442bfe3f2eSlogwang 	uint32_t                          tn_id;
3452bfe3f2eSlogwang };
3462bfe3f2eSlogwang 
3472bfe3f2eSlogwang struct ixgbe_l2_tn_filter {
3482bfe3f2eSlogwang 	TAILQ_ENTRY(ixgbe_l2_tn_filter)    entries;
3492bfe3f2eSlogwang 	struct ixgbe_l2_tn_key             key;
3502bfe3f2eSlogwang 	uint32_t                           pool;
3512bfe3f2eSlogwang };
3522bfe3f2eSlogwang 
3532bfe3f2eSlogwang TAILQ_HEAD(ixgbe_l2_tn_filter_list, ixgbe_l2_tn_filter);
3542bfe3f2eSlogwang 
3552bfe3f2eSlogwang struct ixgbe_l2_tn_info {
3562bfe3f2eSlogwang 	struct ixgbe_l2_tn_filter_list      l2_tn_list;
3572bfe3f2eSlogwang 	struct ixgbe_l2_tn_filter         **hash_map;
3582bfe3f2eSlogwang 	struct rte_hash                    *hash_handle;
3592bfe3f2eSlogwang 	bool e_tag_en; /* e-tag enabled */
3602bfe3f2eSlogwang 	bool e_tag_fwd_en; /* e-tag based forwarding enabled */
361*2d9fd380Sjfb8856606 	uint16_t e_tag_ether_type; /* ether type for e-tag */
3622bfe3f2eSlogwang };
3632bfe3f2eSlogwang 
3642bfe3f2eSlogwang struct rte_flow {
3652bfe3f2eSlogwang 	enum rte_filter_type filter_type;
3662bfe3f2eSlogwang 	void *rule;
3672bfe3f2eSlogwang };
3682bfe3f2eSlogwang 
3694418919fSjohnjiang struct ixgbe_macsec_setting {
3704418919fSjohnjiang 	uint8_t offload_en;
3714418919fSjohnjiang 	uint8_t encrypt_en;
3724418919fSjohnjiang 	uint8_t replayprotect_en;
3734418919fSjohnjiang };
3744418919fSjohnjiang 
3752bfe3f2eSlogwang /*
3762bfe3f2eSlogwang  * Statistics counters collected by the MACsec
3772bfe3f2eSlogwang  */
3782bfe3f2eSlogwang struct ixgbe_macsec_stats {
3792bfe3f2eSlogwang 	/* TX port statistics */
3802bfe3f2eSlogwang 	uint64_t out_pkts_untagged;
3812bfe3f2eSlogwang 	uint64_t out_pkts_encrypted;
3822bfe3f2eSlogwang 	uint64_t out_pkts_protected;
3832bfe3f2eSlogwang 	uint64_t out_octets_encrypted;
3842bfe3f2eSlogwang 	uint64_t out_octets_protected;
3852bfe3f2eSlogwang 
3862bfe3f2eSlogwang 	/* RX port statistics */
3872bfe3f2eSlogwang 	uint64_t in_pkts_untagged;
3882bfe3f2eSlogwang 	uint64_t in_pkts_badtag;
3892bfe3f2eSlogwang 	uint64_t in_pkts_nosci;
3902bfe3f2eSlogwang 	uint64_t in_pkts_unknownsci;
3912bfe3f2eSlogwang 	uint64_t in_octets_decrypted;
3922bfe3f2eSlogwang 	uint64_t in_octets_validated;
3932bfe3f2eSlogwang 
3942bfe3f2eSlogwang 	/* RX SC statistics */
3952bfe3f2eSlogwang 	uint64_t in_pkts_unchecked;
3962bfe3f2eSlogwang 	uint64_t in_pkts_delayed;
3972bfe3f2eSlogwang 	uint64_t in_pkts_late;
3982bfe3f2eSlogwang 
3992bfe3f2eSlogwang 	/* RX SA statistics */
4002bfe3f2eSlogwang 	uint64_t in_pkts_ok;
4012bfe3f2eSlogwang 	uint64_t in_pkts_invalid;
4022bfe3f2eSlogwang 	uint64_t in_pkts_notvalid;
4032bfe3f2eSlogwang 	uint64_t in_pkts_unusedsa;
4042bfe3f2eSlogwang 	uint64_t in_pkts_notusingsa;
4052bfe3f2eSlogwang };
4062bfe3f2eSlogwang 
4072bfe3f2eSlogwang /* The configuration of bandwidth */
4082bfe3f2eSlogwang struct ixgbe_bw_conf {
4092bfe3f2eSlogwang 	uint8_t tc_num; /* Number of TCs. */
4102bfe3f2eSlogwang };
4112bfe3f2eSlogwang 
4122bfe3f2eSlogwang /* Struct to store Traffic Manager shaper profile. */
4132bfe3f2eSlogwang struct ixgbe_tm_shaper_profile {
4142bfe3f2eSlogwang 	TAILQ_ENTRY(ixgbe_tm_shaper_profile) node;
4152bfe3f2eSlogwang 	uint32_t shaper_profile_id;
4162bfe3f2eSlogwang 	uint32_t reference_count;
4172bfe3f2eSlogwang 	struct rte_tm_shaper_params profile;
4182bfe3f2eSlogwang };
4192bfe3f2eSlogwang 
4202bfe3f2eSlogwang TAILQ_HEAD(ixgbe_shaper_profile_list, ixgbe_tm_shaper_profile);
4212bfe3f2eSlogwang 
4222bfe3f2eSlogwang /* node type of Traffic Manager */
4232bfe3f2eSlogwang enum ixgbe_tm_node_type {
4242bfe3f2eSlogwang 	IXGBE_TM_NODE_TYPE_PORT,
4252bfe3f2eSlogwang 	IXGBE_TM_NODE_TYPE_TC,
4262bfe3f2eSlogwang 	IXGBE_TM_NODE_TYPE_QUEUE,
4272bfe3f2eSlogwang 	IXGBE_TM_NODE_TYPE_MAX,
4282bfe3f2eSlogwang };
4292bfe3f2eSlogwang 
4302bfe3f2eSlogwang /* Struct to store Traffic Manager node configuration. */
4312bfe3f2eSlogwang struct ixgbe_tm_node {
4322bfe3f2eSlogwang 	TAILQ_ENTRY(ixgbe_tm_node) node;
4332bfe3f2eSlogwang 	uint32_t id;
4342bfe3f2eSlogwang 	uint32_t priority;
4352bfe3f2eSlogwang 	uint32_t weight;
4362bfe3f2eSlogwang 	uint32_t reference_count;
4372bfe3f2eSlogwang 	uint16_t no;
4382bfe3f2eSlogwang 	struct ixgbe_tm_node *parent;
4392bfe3f2eSlogwang 	struct ixgbe_tm_shaper_profile *shaper_profile;
4402bfe3f2eSlogwang 	struct rte_tm_node_params params;
4412bfe3f2eSlogwang };
4422bfe3f2eSlogwang 
4432bfe3f2eSlogwang TAILQ_HEAD(ixgbe_tm_node_list, ixgbe_tm_node);
4442bfe3f2eSlogwang 
4452bfe3f2eSlogwang /* The configuration of Traffic Manager */
4462bfe3f2eSlogwang struct ixgbe_tm_conf {
4472bfe3f2eSlogwang 	struct ixgbe_shaper_profile_list shaper_profile_list;
4482bfe3f2eSlogwang 	struct ixgbe_tm_node *root; /* root node - port */
4492bfe3f2eSlogwang 	struct ixgbe_tm_node_list tc_list; /* node list for all the TCs */
4502bfe3f2eSlogwang 	struct ixgbe_tm_node_list queue_list; /* node list for all the queues */
4512bfe3f2eSlogwang 	/**
4522bfe3f2eSlogwang 	 * The number of added TC nodes.
4532bfe3f2eSlogwang 	 * It should be no more than the TC number of this port.
4542bfe3f2eSlogwang 	 */
4552bfe3f2eSlogwang 	uint32_t nb_tc_node;
4562bfe3f2eSlogwang 	/**
4572bfe3f2eSlogwang 	 * The number of added queue nodes.
4582bfe3f2eSlogwang 	 * It should be no more than the queue number of this port.
4592bfe3f2eSlogwang 	 */
4602bfe3f2eSlogwang 	uint32_t nb_queue_node;
4612bfe3f2eSlogwang 	/**
4622bfe3f2eSlogwang 	 * This flag is used to check if APP can change the TM node
4632bfe3f2eSlogwang 	 * configuration.
4642bfe3f2eSlogwang 	 * When it's true, means the configuration is applied to HW,
4652bfe3f2eSlogwang 	 * APP should not change the configuration.
4662bfe3f2eSlogwang 	 * As we don't support on-the-fly configuration, when starting
4672bfe3f2eSlogwang 	 * the port, APP should call the hierarchy_commit API to set this
4682bfe3f2eSlogwang 	 * flag to true. When stopping the port, this flag should be set
4692bfe3f2eSlogwang 	 * to false.
4702bfe3f2eSlogwang 	 */
4712bfe3f2eSlogwang 	bool committed;
472a9643ea8Slogwang };
473a9643ea8Slogwang 
474a9643ea8Slogwang /*
475a9643ea8Slogwang  * Structure to store private data for each driver instance (for each port).
476a9643ea8Slogwang  */
477a9643ea8Slogwang struct ixgbe_adapter {
478a9643ea8Slogwang 	struct ixgbe_hw             hw;
479a9643ea8Slogwang 	struct ixgbe_hw_stats       stats;
4802bfe3f2eSlogwang 	struct ixgbe_macsec_stats   macsec_stats;
4814418919fSjohnjiang 	struct ixgbe_macsec_setting	macsec_setting;
482a9643ea8Slogwang 	struct ixgbe_hw_fdir_info   fdir;
483a9643ea8Slogwang 	struct ixgbe_interrupt      intr;
484a9643ea8Slogwang 	struct ixgbe_stat_mapping_registers stat_mappings;
485a9643ea8Slogwang 	struct ixgbe_vfta           shadow_vfta;
486a9643ea8Slogwang 	struct ixgbe_hwstrip		hwstrip;
487a9643ea8Slogwang 	struct ixgbe_dcb_config     dcb_config;
488a9643ea8Slogwang 	struct ixgbe_mirror_info    mr_data;
489a9643ea8Slogwang 	struct ixgbe_vf_info        *vfdata;
490a9643ea8Slogwang 	struct ixgbe_uta_info       uta_info;
4912bfe3f2eSlogwang #ifdef RTE_LIBRTE_IXGBE_BYPASS
492a9643ea8Slogwang 	struct ixgbe_bypass_info    bps;
4932bfe3f2eSlogwang #endif /* RTE_LIBRTE_IXGBE_BYPASS */
494a9643ea8Slogwang 	struct ixgbe_filter_info    filter;
4952bfe3f2eSlogwang 	struct ixgbe_l2_tn_info     l2_tn;
4962bfe3f2eSlogwang 	struct ixgbe_bw_conf        bw_conf;
497*2d9fd380Sjfb8856606 #ifdef RTE_LIB_SECURITY
4982bfe3f2eSlogwang 	struct ixgbe_ipsec          ipsec;
4992bfe3f2eSlogwang #endif
500a9643ea8Slogwang 	bool rx_bulk_alloc_allowed;
501a9643ea8Slogwang 	bool rx_vec_allowed;
502a9643ea8Slogwang 	struct rte_timecounter      systime_tc;
503a9643ea8Slogwang 	struct rte_timecounter      rx_tstamp_tc;
504a9643ea8Slogwang 	struct rte_timecounter      tx_tstamp_tc;
5052bfe3f2eSlogwang  	struct ixgbe_tm_conf        tm_conf;
5061646932aSjfb8856606 
5071646932aSjfb8856606 	/* For RSS reta table update */
5081646932aSjfb8856606 	uint8_t rss_reta_updated;
5094b05018fSfengbojiang 
5104b05018fSfengbojiang 	/* Used for VF link sync with PF's physical and logical (by checking
5114b05018fSfengbojiang 	 * mailbox status) link status.
5124b05018fSfengbojiang 	 */
5134b05018fSfengbojiang 	uint8_t pflink_fullchk;
5144418919fSjohnjiang 	uint8_t mac_ctrl_frame_fwd;
5154418919fSjohnjiang 	rte_atomic32_t link_thread_running;
5164418919fSjohnjiang 	pthread_t link_thread_tid;
517a9643ea8Slogwang };
518a9643ea8Slogwang 
519d30ea906Sjfb8856606 struct ixgbe_vf_representor {
520d30ea906Sjfb8856606 	uint16_t vf_id;
521d30ea906Sjfb8856606 	uint16_t switch_domain_id;
522d30ea906Sjfb8856606 	struct rte_eth_dev *pf_ethdev;
523d30ea906Sjfb8856606 };
524d30ea906Sjfb8856606 
525d30ea906Sjfb8856606 int ixgbe_vf_representor_init(struct rte_eth_dev *ethdev, void *init_params);
526d30ea906Sjfb8856606 int ixgbe_vf_representor_uninit(struct rte_eth_dev *ethdev);
527d30ea906Sjfb8856606 
528a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_HW(adapter)\
529a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->hw)
530a9643ea8Slogwang 
531a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_STATS(adapter) \
532a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->stats)
533a9643ea8Slogwang 
5342bfe3f2eSlogwang #define IXGBE_DEV_PRIVATE_TO_MACSEC_STATS(adapter) \
5352bfe3f2eSlogwang 	(&((struct ixgbe_adapter *)adapter)->macsec_stats)
5362bfe3f2eSlogwang 
5374418919fSjohnjiang #define IXGBE_DEV_PRIVATE_TO_MACSEC_SETTING(adapter) \
5384418919fSjohnjiang 	(&((struct ixgbe_adapter *)adapter)->macsec_setting)
5394418919fSjohnjiang 
540a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_INTR(adapter) \
541a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->intr)
542a9643ea8Slogwang 
543a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_FDIR_INFO(adapter) \
544a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->fdir)
545a9643ea8Slogwang 
546a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_STAT_MAPPINGS(adapter) \
547a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->stat_mappings)
548a9643ea8Slogwang 
549a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_VFTA(adapter) \
550a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->shadow_vfta)
551a9643ea8Slogwang 
552a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_HWSTRIP_BITMAP(adapter) \
553a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->hwstrip)
554a9643ea8Slogwang 
555a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_DCB_CFG(adapter) \
556a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->dcb_config)
557a9643ea8Slogwang 
558a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_P_VFDATA(adapter) \
559a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->vfdata)
560a9643ea8Slogwang 
561a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_PFDATA(adapter) \
562a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->mr_data)
563a9643ea8Slogwang 
564a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_UTA(adapter) \
565a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->uta_info)
566a9643ea8Slogwang 
567a9643ea8Slogwang #define IXGBE_DEV_PRIVATE_TO_FILTER_INFO(adapter) \
568a9643ea8Slogwang 	(&((struct ixgbe_adapter *)adapter)->filter)
569a9643ea8Slogwang 
5702bfe3f2eSlogwang #define IXGBE_DEV_PRIVATE_TO_L2_TN_INFO(adapter) \
5712bfe3f2eSlogwang 	(&((struct ixgbe_adapter *)adapter)->l2_tn)
5722bfe3f2eSlogwang 
5732bfe3f2eSlogwang #define IXGBE_DEV_PRIVATE_TO_BW_CONF(adapter) \
5742bfe3f2eSlogwang 	(&((struct ixgbe_adapter *)adapter)->bw_conf)
5752bfe3f2eSlogwang 
5762bfe3f2eSlogwang #define IXGBE_DEV_PRIVATE_TO_TM_CONF(adapter) \
5772bfe3f2eSlogwang 	(&((struct ixgbe_adapter *)adapter)->tm_conf)
5782bfe3f2eSlogwang 
5792bfe3f2eSlogwang #define IXGBE_DEV_PRIVATE_TO_IPSEC(adapter)\
5802bfe3f2eSlogwang 	(&((struct ixgbe_adapter *)adapter)->ipsec)
5812bfe3f2eSlogwang 
582a9643ea8Slogwang /*
583a9643ea8Slogwang  * RX/TX function prototypes
584a9643ea8Slogwang  */
585a9643ea8Slogwang void ixgbe_dev_clear_queues(struct rte_eth_dev *dev);
586a9643ea8Slogwang 
587a9643ea8Slogwang void ixgbe_dev_free_queues(struct rte_eth_dev *dev);
588a9643ea8Slogwang 
589a9643ea8Slogwang void ixgbe_dev_rx_queue_release(void *rxq);
590a9643ea8Slogwang 
591a9643ea8Slogwang void ixgbe_dev_tx_queue_release(void *txq);
592a9643ea8Slogwang 
593a9643ea8Slogwang int  ixgbe_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
594a9643ea8Slogwang 		uint16_t nb_rx_desc, unsigned int socket_id,
595a9643ea8Slogwang 		const struct rte_eth_rxconf *rx_conf,
596a9643ea8Slogwang 		struct rte_mempool *mb_pool);
597a9643ea8Slogwang 
598a9643ea8Slogwang int  ixgbe_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
599a9643ea8Slogwang 		uint16_t nb_tx_desc, unsigned int socket_id,
600a9643ea8Slogwang 		const struct rte_eth_txconf *tx_conf);
601a9643ea8Slogwang 
602a9643ea8Slogwang uint32_t ixgbe_dev_rx_queue_count(struct rte_eth_dev *dev,
603a9643ea8Slogwang 		uint16_t rx_queue_id);
604a9643ea8Slogwang 
605a9643ea8Slogwang int ixgbe_dev_rx_descriptor_done(void *rx_queue, uint16_t offset);
6062bfe3f2eSlogwang 
6072bfe3f2eSlogwang int ixgbe_dev_rx_descriptor_status(void *rx_queue, uint16_t offset);
6082bfe3f2eSlogwang int ixgbe_dev_tx_descriptor_status(void *tx_queue, uint16_t offset);
609a9643ea8Slogwang 
610a9643ea8Slogwang int ixgbe_dev_rx_init(struct rte_eth_dev *dev);
611a9643ea8Slogwang 
612a9643ea8Slogwang void ixgbe_dev_tx_init(struct rte_eth_dev *dev);
613a9643ea8Slogwang 
614a9643ea8Slogwang int ixgbe_dev_rxtx_start(struct rte_eth_dev *dev);
615a9643ea8Slogwang 
616a9643ea8Slogwang int ixgbe_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id);
617a9643ea8Slogwang 
618a9643ea8Slogwang int ixgbe_dev_rx_queue_stop(struct rte_eth_dev *dev, uint16_t rx_queue_id);
619a9643ea8Slogwang 
620a9643ea8Slogwang int ixgbe_dev_tx_queue_start(struct rte_eth_dev *dev, uint16_t tx_queue_id);
621a9643ea8Slogwang 
622a9643ea8Slogwang int ixgbe_dev_tx_queue_stop(struct rte_eth_dev *dev, uint16_t tx_queue_id);
623a9643ea8Slogwang 
624a9643ea8Slogwang void ixgbe_rxq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
625a9643ea8Slogwang 	struct rte_eth_rxq_info *qinfo);
626a9643ea8Slogwang 
627a9643ea8Slogwang void ixgbe_txq_info_get(struct rte_eth_dev *dev, uint16_t queue_id,
628a9643ea8Slogwang 	struct rte_eth_txq_info *qinfo);
629a9643ea8Slogwang 
630a9643ea8Slogwang int ixgbevf_dev_rx_init(struct rte_eth_dev *dev);
631a9643ea8Slogwang 
632a9643ea8Slogwang void ixgbevf_dev_tx_init(struct rte_eth_dev *dev);
633a9643ea8Slogwang 
634a9643ea8Slogwang void ixgbevf_dev_rxtx_start(struct rte_eth_dev *dev);
635a9643ea8Slogwang 
636a9643ea8Slogwang uint16_t ixgbe_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
637a9643ea8Slogwang 		uint16_t nb_pkts);
638a9643ea8Slogwang 
639a9643ea8Slogwang uint16_t ixgbe_recv_pkts_bulk_alloc(void *rx_queue, struct rte_mbuf **rx_pkts,
640a9643ea8Slogwang 				    uint16_t nb_pkts);
641a9643ea8Slogwang 
642a9643ea8Slogwang uint16_t ixgbe_recv_pkts_lro_single_alloc(void *rx_queue,
643a9643ea8Slogwang 		struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
644a9643ea8Slogwang uint16_t ixgbe_recv_pkts_lro_bulk_alloc(void *rx_queue,
645a9643ea8Slogwang 		struct rte_mbuf **rx_pkts, uint16_t nb_pkts);
646a9643ea8Slogwang 
647a9643ea8Slogwang uint16_t ixgbe_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
648a9643ea8Slogwang 		uint16_t nb_pkts);
649a9643ea8Slogwang 
650a9643ea8Slogwang uint16_t ixgbe_xmit_pkts_simple(void *tx_queue, struct rte_mbuf **tx_pkts,
651a9643ea8Slogwang 		uint16_t nb_pkts);
652a9643ea8Slogwang 
6532bfe3f2eSlogwang uint16_t ixgbe_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,
6542bfe3f2eSlogwang 		uint16_t nb_pkts);
6552bfe3f2eSlogwang 
656a9643ea8Slogwang int ixgbe_dev_rss_hash_update(struct rte_eth_dev *dev,
657a9643ea8Slogwang 			      struct rte_eth_rss_conf *rss_conf);
658a9643ea8Slogwang 
659a9643ea8Slogwang int ixgbe_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
660a9643ea8Slogwang 				struct rte_eth_rss_conf *rss_conf);
661a9643ea8Slogwang 
662a9643ea8Slogwang uint16_t ixgbe_reta_size_get(enum ixgbe_mac_type mac_type);
663a9643ea8Slogwang 
664a9643ea8Slogwang uint32_t ixgbe_reta_reg_get(enum ixgbe_mac_type mac_type, uint16_t reta_idx);
665a9643ea8Slogwang 
666a9643ea8Slogwang uint32_t ixgbe_mrqc_reg_get(enum ixgbe_mac_type mac_type);
667a9643ea8Slogwang 
668a9643ea8Slogwang uint32_t ixgbe_rssrk_reg_get(enum ixgbe_mac_type mac_type, uint8_t i);
669a9643ea8Slogwang 
670a9643ea8Slogwang bool ixgbe_rss_update_sp(enum ixgbe_mac_type mac_type);
671a9643ea8Slogwang 
6722bfe3f2eSlogwang int ixgbe_add_del_ntuple_filter(struct rte_eth_dev *dev,
6732bfe3f2eSlogwang 			struct rte_eth_ntuple_filter *filter,
6742bfe3f2eSlogwang 			bool add);
6752bfe3f2eSlogwang int ixgbe_add_del_ethertype_filter(struct rte_eth_dev *dev,
6762bfe3f2eSlogwang 			struct rte_eth_ethertype_filter *filter,
6772bfe3f2eSlogwang 			bool add);
6782bfe3f2eSlogwang int ixgbe_syn_filter_set(struct rte_eth_dev *dev,
6792bfe3f2eSlogwang 			struct rte_eth_syn_filter *filter,
6802bfe3f2eSlogwang 			bool add);
681*2d9fd380Sjfb8856606 
682*2d9fd380Sjfb8856606 /**
683*2d9fd380Sjfb8856606  * l2 tunnel configuration.
684*2d9fd380Sjfb8856606  */
685*2d9fd380Sjfb8856606 struct ixgbe_l2_tunnel_conf {
686*2d9fd380Sjfb8856606 	enum rte_eth_tunnel_type l2_tunnel_type;
687*2d9fd380Sjfb8856606 	uint16_t ether_type; /* ether type in l2 header */
688*2d9fd380Sjfb8856606 	uint32_t tunnel_id; /* port tag id for e-tag */
689*2d9fd380Sjfb8856606 	uint16_t vf_id; /* VF id for tag insertion */
690*2d9fd380Sjfb8856606 	uint32_t pool; /* destination pool for tag based forwarding */
691*2d9fd380Sjfb8856606 };
692*2d9fd380Sjfb8856606 
6932bfe3f2eSlogwang int
6942bfe3f2eSlogwang ixgbe_dev_l2_tunnel_filter_add(struct rte_eth_dev *dev,
695*2d9fd380Sjfb8856606 			       struct ixgbe_l2_tunnel_conf *l2_tunnel,
6962bfe3f2eSlogwang 			       bool restore);
6972bfe3f2eSlogwang int
6982bfe3f2eSlogwang ixgbe_dev_l2_tunnel_filter_del(struct rte_eth_dev *dev,
699*2d9fd380Sjfb8856606 			       struct ixgbe_l2_tunnel_conf *l2_tunnel);
7002bfe3f2eSlogwang void ixgbe_filterlist_init(void);
7012bfe3f2eSlogwang void ixgbe_filterlist_flush(void);
702a9643ea8Slogwang /*
703a9643ea8Slogwang  * Flow director function prototypes
704a9643ea8Slogwang  */
705a9643ea8Slogwang int ixgbe_fdir_configure(struct rte_eth_dev *dev);
7062bfe3f2eSlogwang int ixgbe_fdir_set_input_mask(struct rte_eth_dev *dev);
7072bfe3f2eSlogwang int ixgbe_fdir_set_flexbytes_offset(struct rte_eth_dev *dev,
7082bfe3f2eSlogwang 				    uint16_t offset);
7092bfe3f2eSlogwang int ixgbe_fdir_filter_program(struct rte_eth_dev *dev,
7102bfe3f2eSlogwang 			      struct ixgbe_fdir_rule *rule,
7112bfe3f2eSlogwang 			      bool del, bool update);
712*2d9fd380Sjfb8856606 void ixgbe_fdir_info_get(struct rte_eth_dev *dev,
713*2d9fd380Sjfb8856606 			 struct rte_eth_fdir_info *fdir_info);
714*2d9fd380Sjfb8856606 void ixgbe_fdir_stats_get(struct rte_eth_dev *dev,
715*2d9fd380Sjfb8856606 			  struct rte_eth_fdir_stats *fdir_stats);
716a9643ea8Slogwang 
717a9643ea8Slogwang void ixgbe_configure_dcb(struct rte_eth_dev *dev);
718a9643ea8Slogwang 
719d30ea906Sjfb8856606 int
720d30ea906Sjfb8856606 ixgbe_dev_link_update_share(struct rte_eth_dev *dev,
721d30ea906Sjfb8856606 			    int wait_to_complete, int vf);
722d30ea906Sjfb8856606 
723a9643ea8Slogwang /*
724a9643ea8Slogwang  * misc function prototypes
725a9643ea8Slogwang  */
726a9643ea8Slogwang void ixgbe_vlan_hw_filter_enable(struct rte_eth_dev *dev);
727a9643ea8Slogwang 
728a9643ea8Slogwang void ixgbe_vlan_hw_filter_disable(struct rte_eth_dev *dev);
729a9643ea8Slogwang 
730d30ea906Sjfb8856606 void ixgbe_vlan_hw_strip_config(struct rte_eth_dev *dev);
731a9643ea8Slogwang 
7320c6bd470Sfengbojiang int ixgbe_pf_host_init(struct rte_eth_dev *eth_dev);
733a9643ea8Slogwang 
734a9643ea8Slogwang void ixgbe_pf_host_uninit(struct rte_eth_dev *eth_dev);
735a9643ea8Slogwang 
736a9643ea8Slogwang void ixgbe_pf_mbx_process(struct rte_eth_dev *eth_dev);
737a9643ea8Slogwang 
738a9643ea8Slogwang int ixgbe_pf_host_configure(struct rte_eth_dev *eth_dev);
739a9643ea8Slogwang 
740a9643ea8Slogwang uint32_t ixgbe_convert_vm_rx_mask_to_val(uint16_t rx_mask, uint32_t orig_val);
741a9643ea8Slogwang 
7422bfe3f2eSlogwang void ixgbe_fdir_filter_restore(struct rte_eth_dev *dev);
7432bfe3f2eSlogwang int ixgbe_clear_all_fdir_filter(struct rte_eth_dev *dev);
7442bfe3f2eSlogwang 
7452bfe3f2eSlogwang extern const struct rte_flow_ops ixgbe_flow_ops;
7462bfe3f2eSlogwang 
7472bfe3f2eSlogwang void ixgbe_clear_all_ethertype_filter(struct rte_eth_dev *dev);
7482bfe3f2eSlogwang void ixgbe_clear_all_ntuple_filter(struct rte_eth_dev *dev);
7492bfe3f2eSlogwang void ixgbe_clear_syn_filter(struct rte_eth_dev *dev);
7502bfe3f2eSlogwang int ixgbe_clear_all_l2_tn_filter(struct rte_eth_dev *dev);
7512bfe3f2eSlogwang 
7522bfe3f2eSlogwang int ixgbe_disable_sec_tx_path_generic(struct ixgbe_hw *hw);
7532bfe3f2eSlogwang 
7542bfe3f2eSlogwang int ixgbe_enable_sec_tx_path_generic(struct ixgbe_hw *hw);
7552bfe3f2eSlogwang 
7562bfe3f2eSlogwang int ixgbe_vt_check(struct ixgbe_hw *hw);
7572bfe3f2eSlogwang int ixgbe_set_vf_rate_limit(struct rte_eth_dev *dev, uint16_t vf,
7582bfe3f2eSlogwang 			    uint16_t tx_rate, uint64_t q_msk);
7592bfe3f2eSlogwang bool is_ixgbe_supported(struct rte_eth_dev *dev);
7602bfe3f2eSlogwang int ixgbe_tm_ops_get(struct rte_eth_dev *dev, void *ops);
7612bfe3f2eSlogwang void ixgbe_tm_conf_init(struct rte_eth_dev *dev);
7622bfe3f2eSlogwang void ixgbe_tm_conf_uninit(struct rte_eth_dev *dev);
7632bfe3f2eSlogwang int ixgbe_set_queue_rate_limit(struct rte_eth_dev *dev, uint16_t queue_idx,
7642bfe3f2eSlogwang 			       uint16_t tx_rate);
765d30ea906Sjfb8856606 int ixgbe_rss_conf_init(struct ixgbe_rte_flow_rss_conf *out,
766d30ea906Sjfb8856606 			const struct rte_flow_action_rss *in);
767d30ea906Sjfb8856606 int ixgbe_action_rss_same(const struct rte_flow_action_rss *comp,
768d30ea906Sjfb8856606 			  const struct rte_flow_action_rss *with);
769d30ea906Sjfb8856606 int ixgbe_config_rss_filter(struct rte_eth_dev *dev,
770d30ea906Sjfb8856606 		struct ixgbe_rte_flow_rss_conf *conf, bool add);
7712bfe3f2eSlogwang 
7724418919fSjohnjiang void ixgbe_dev_macsec_register_enable(struct rte_eth_dev *dev,
7734418919fSjohnjiang 		struct ixgbe_macsec_setting *macsec_setting);
7744418919fSjohnjiang 
7754418919fSjohnjiang void ixgbe_dev_macsec_register_disable(struct rte_eth_dev *dev);
7764418919fSjohnjiang 
7774418919fSjohnjiang void ixgbe_dev_macsec_setting_save(struct rte_eth_dev *dev,
7784418919fSjohnjiang 		struct ixgbe_macsec_setting *macsec_setting);
7794418919fSjohnjiang 
7804418919fSjohnjiang void ixgbe_dev_macsec_setting_reset(struct rte_eth_dev *dev);
7814418919fSjohnjiang 
7822bfe3f2eSlogwang static inline int
ixgbe_ethertype_filter_lookup(struct ixgbe_filter_info * filter_info,uint16_t ethertype)7832bfe3f2eSlogwang ixgbe_ethertype_filter_lookup(struct ixgbe_filter_info *filter_info,
7842bfe3f2eSlogwang 			      uint16_t ethertype)
7852bfe3f2eSlogwang {
7862bfe3f2eSlogwang 	int i;
7872bfe3f2eSlogwang 
7882bfe3f2eSlogwang 	for (i = 0; i < IXGBE_MAX_ETQF_FILTERS; i++) {
7892bfe3f2eSlogwang 		if (filter_info->ethertype_filters[i].ethertype == ethertype &&
7902bfe3f2eSlogwang 		    (filter_info->ethertype_mask & (1 << i)))
7912bfe3f2eSlogwang 			return i;
7922bfe3f2eSlogwang 	}
7932bfe3f2eSlogwang 	return -1;
7942bfe3f2eSlogwang }
7952bfe3f2eSlogwang 
7962bfe3f2eSlogwang static inline int
ixgbe_ethertype_filter_insert(struct ixgbe_filter_info * filter_info,struct ixgbe_ethertype_filter * ethertype_filter)7972bfe3f2eSlogwang ixgbe_ethertype_filter_insert(struct ixgbe_filter_info *filter_info,
7982bfe3f2eSlogwang 			      struct ixgbe_ethertype_filter *ethertype_filter)
7992bfe3f2eSlogwang {
8002bfe3f2eSlogwang 	int i;
8012bfe3f2eSlogwang 
8022bfe3f2eSlogwang 	for (i = 0; i < IXGBE_MAX_ETQF_FILTERS; i++) {
8032bfe3f2eSlogwang 		if (!(filter_info->ethertype_mask & (1 << i))) {
8042bfe3f2eSlogwang 			filter_info->ethertype_mask |= 1 << i;
8052bfe3f2eSlogwang 			filter_info->ethertype_filters[i].ethertype =
8062bfe3f2eSlogwang 				ethertype_filter->ethertype;
8072bfe3f2eSlogwang 			filter_info->ethertype_filters[i].etqf =
8082bfe3f2eSlogwang 				ethertype_filter->etqf;
8092bfe3f2eSlogwang 			filter_info->ethertype_filters[i].etqs =
8102bfe3f2eSlogwang 				ethertype_filter->etqs;
8112bfe3f2eSlogwang 			filter_info->ethertype_filters[i].conf =
8122bfe3f2eSlogwang 				ethertype_filter->conf;
8132bfe3f2eSlogwang 			return i;
8142bfe3f2eSlogwang 		}
8152bfe3f2eSlogwang 	}
8162bfe3f2eSlogwang 	return -1;
8172bfe3f2eSlogwang }
8182bfe3f2eSlogwang 
8192bfe3f2eSlogwang static inline int
ixgbe_ethertype_filter_remove(struct ixgbe_filter_info * filter_info,uint8_t idx)8202bfe3f2eSlogwang ixgbe_ethertype_filter_remove(struct ixgbe_filter_info *filter_info,
8212bfe3f2eSlogwang 			      uint8_t idx)
8222bfe3f2eSlogwang {
8232bfe3f2eSlogwang 	if (idx >= IXGBE_MAX_ETQF_FILTERS)
8242bfe3f2eSlogwang 		return -1;
8252bfe3f2eSlogwang 	filter_info->ethertype_mask &= ~(1 << idx);
8262bfe3f2eSlogwang 	filter_info->ethertype_filters[idx].ethertype = 0;
8272bfe3f2eSlogwang 	filter_info->ethertype_filters[idx].etqf = 0;
8282bfe3f2eSlogwang 	filter_info->ethertype_filters[idx].etqs = 0;
8292bfe3f2eSlogwang 	filter_info->ethertype_filters[idx].etqs = FALSE;
8302bfe3f2eSlogwang 	return idx;
8312bfe3f2eSlogwang }
8322bfe3f2eSlogwang 
833a9643ea8Slogwang #endif /* _IXGBE_ETHDEV_H_ */
834