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