xref: /freebsd/sys/dev/iavf/iavf_iflib.h (revision 0834f13d)
1ca853deeSEric Joyner /* SPDX-License-Identifier: BSD-3-Clause */
2ca853deeSEric Joyner /*  Copyright (c) 2021, Intel Corporation
3ca853deeSEric Joyner  *  All rights reserved.
4ca853deeSEric Joyner  *
5ca853deeSEric Joyner  *  Redistribution and use in source and binary forms, with or without
6ca853deeSEric Joyner  *  modification, are permitted provided that the following conditions are met:
7ca853deeSEric Joyner  *
8ca853deeSEric Joyner  *   1. Redistributions of source code must retain the above copyright notice,
9ca853deeSEric Joyner  *      this list of conditions and the following disclaimer.
10ca853deeSEric Joyner  *
11ca853deeSEric Joyner  *   2. Redistributions in binary form must reproduce the above copyright
12ca853deeSEric Joyner  *      notice, this list of conditions and the following disclaimer in the
13ca853deeSEric Joyner  *      documentation and/or other materials provided with the distribution.
14ca853deeSEric Joyner  *
15ca853deeSEric Joyner  *   3. Neither the name of the Intel Corporation nor the names of its
16ca853deeSEric Joyner  *      contributors may be used to endorse or promote products derived from
17ca853deeSEric Joyner  *      this software without specific prior written permission.
18ca853deeSEric Joyner  *
19ca853deeSEric Joyner  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20ca853deeSEric Joyner  *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21ca853deeSEric Joyner  *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22ca853deeSEric Joyner  *  ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23ca853deeSEric Joyner  *  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24ca853deeSEric Joyner  *  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25ca853deeSEric Joyner  *  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26ca853deeSEric Joyner  *  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27ca853deeSEric Joyner  *  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28ca853deeSEric Joyner  *  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29ca853deeSEric Joyner  *  POSSIBILITY OF SUCH DAMAGE.
30ca853deeSEric Joyner  */
31ca853deeSEric Joyner 
32ca853deeSEric Joyner /**
33ca853deeSEric Joyner  * @file iavf_iflib.h
34ca853deeSEric Joyner  * @brief main header for the iflib driver
35ca853deeSEric Joyner  *
36ca853deeSEric Joyner  * Contains definitions for various driver structures used throughout the
37ca853deeSEric Joyner  * driver code. This header is used by the iflib implementation.
38ca853deeSEric Joyner  */
39ca853deeSEric Joyner #ifndef _IAVF_IFLIB_H_
40ca853deeSEric Joyner #define _IAVF_IFLIB_H_
41ca853deeSEric Joyner 
42ca853deeSEric Joyner #include "iavf_opts.h"
43ca853deeSEric Joyner 
44ca853deeSEric Joyner #include <sys/param.h>
45ca853deeSEric Joyner #include <sys/systm.h>
46ca853deeSEric Joyner #include <sys/buf_ring.h>
47ca853deeSEric Joyner #include <sys/mbuf.h>
48ca853deeSEric Joyner #include <sys/protosw.h>
49ca853deeSEric Joyner #include <sys/socket.h>
50ca853deeSEric Joyner #include <sys/malloc.h>
51ca853deeSEric Joyner #include <sys/kernel.h>
52ca853deeSEric Joyner #include <sys/module.h>
53ca853deeSEric Joyner #include <sys/sockio.h>
54ca853deeSEric Joyner #include <sys/eventhandler.h>
55ca853deeSEric Joyner #include <sys/syslog.h>
56ca853deeSEric Joyner 
57ca853deeSEric Joyner #include <net/if.h>
58ca853deeSEric Joyner #include <net/if_var.h>
59ca853deeSEric Joyner #include <net/if_arp.h>
60ca853deeSEric Joyner #include <net/bpf.h>
61ca853deeSEric Joyner #include <net/if_dl.h>
62ca853deeSEric Joyner #include <net/if_media.h>
63ca853deeSEric Joyner 
64ca853deeSEric Joyner #include <net/bpf.h>
65ca853deeSEric Joyner #include <net/if_types.h>
66ca853deeSEric Joyner #include <net/if_vlan_var.h>
67ca853deeSEric Joyner 
68ca853deeSEric Joyner #include <netinet/in_systm.h>
69ca853deeSEric Joyner #include <netinet/in.h>
70ca853deeSEric Joyner #include <netinet/if_ether.h>
71ca853deeSEric Joyner #include <netinet/ip.h>
72ca853deeSEric Joyner #include <netinet/ip6.h>
73ca853deeSEric Joyner #include <netinet/tcp.h>
74ca853deeSEric Joyner #include <netinet/tcp_lro.h>
75ca853deeSEric Joyner #include <netinet/udp.h>
76ca853deeSEric Joyner #include <netinet/sctp.h>
77ca853deeSEric Joyner 
78ca853deeSEric Joyner #include <machine/in_cksum.h>
79ca853deeSEric Joyner 
80ca853deeSEric Joyner #include <sys/bus.h>
81ca853deeSEric Joyner #include <sys/pciio.h>
82ca853deeSEric Joyner #include <machine/bus.h>
83ca853deeSEric Joyner #include <sys/rman.h>
84ca853deeSEric Joyner #include <machine/resource.h>
85ca853deeSEric Joyner #include <vm/vm.h>
86ca853deeSEric Joyner #include <vm/pmap.h>
87ca853deeSEric Joyner #include <machine/clock.h>
88ca853deeSEric Joyner #include <dev/pci/pcivar.h>
89ca853deeSEric Joyner #include <dev/pci/pcireg.h>
90ca853deeSEric Joyner #include <sys/proc.h>
91ca853deeSEric Joyner #include <sys/endian.h>
92ca853deeSEric Joyner #include <sys/taskqueue.h>
93ca853deeSEric Joyner #include <sys/pcpu.h>
94ca853deeSEric Joyner #include <sys/smp.h>
95ca853deeSEric Joyner #include <sys/sbuf.h>
96ca853deeSEric Joyner #include <machine/smp.h>
97ca853deeSEric Joyner #include <machine/stdarg.h>
98ca853deeSEric Joyner #include <net/ethernet.h>
99ca853deeSEric Joyner #include <net/iflib.h>
100ca853deeSEric Joyner #include "ifdi_if.h"
101ca853deeSEric Joyner 
102ca853deeSEric Joyner #include "iavf_lib.h"
103ca853deeSEric Joyner 
104ca853deeSEric Joyner #define IAVF_CSUM_TCP \
105ca853deeSEric Joyner 	(CSUM_IP_TCP|CSUM_IP_TSO|CSUM_IP6_TSO|CSUM_IP6_TCP)
106ca853deeSEric Joyner #define IAVF_CSUM_UDP \
107ca853deeSEric Joyner 	(CSUM_IP_UDP|CSUM_IP6_UDP)
108ca853deeSEric Joyner #define IAVF_CSUM_SCTP \
109ca853deeSEric Joyner 	(CSUM_IP_SCTP|CSUM_IP6_SCTP)
110ca853deeSEric Joyner #define IAVF_CSUM_IPV4 \
111ca853deeSEric Joyner 	(CSUM_IP|CSUM_IP_TSO)
112ca853deeSEric Joyner 
113ca853deeSEric Joyner #define IAVF_CAPS \
114ca853deeSEric Joyner 	(IFCAP_TSO4 | IFCAP_TSO6 | \
115ca853deeSEric Joyner 	 IFCAP_TXCSUM | IFCAP_TXCSUM_IPV6 | \
116ca853deeSEric Joyner 	 IFCAP_RXCSUM | IFCAP_RXCSUM_IPV6 | \
117ca853deeSEric Joyner 	 IFCAP_VLAN_HWFILTER | IFCAP_VLAN_HWTSO | \
118ca853deeSEric Joyner 	 IFCAP_VLAN_HWTAGGING | IFCAP_VLAN_HWCSUM | \
119ca853deeSEric Joyner 	 IFCAP_VLAN_MTU | IFCAP_JUMBO_MTU | IFCAP_LRO)
120ca853deeSEric Joyner 
121ca853deeSEric Joyner #define iavf_sc_from_ctx(_ctx) \
122ca853deeSEric Joyner     ((struct iavf_sc *)iflib_get_softc(_ctx))
123ca853deeSEric Joyner 
124ca853deeSEric Joyner /* Use the correct assert function for each lock type */
125ca853deeSEric Joyner #define IAVF_VC_LOCK(_sc)                mtx_lock(&(_sc)->vc_mtx)
126ca853deeSEric Joyner #define IAVF_VC_UNLOCK(_sc)              mtx_unlock(&(_sc)->vc_mtx)
127ca853deeSEric Joyner #define IAVF_VC_LOCK_DESTROY(_sc)        mtx_destroy(&(_sc)->vc_mtx)
128ca853deeSEric Joyner #define IAVF_VC_TRYLOCK(_sc)             mtx_trylock(&(_sc)->vc_mtx)
129ca853deeSEric Joyner #define IAVF_VC_LOCK_ASSERT(_sc)         mtx_assert(&(_sc)->vc_mtx, MA_OWNED)
130ca853deeSEric Joyner 
131ca853deeSEric Joyner /**
132ca853deeSEric Joyner  * @struct tx_ring
133ca853deeSEric Joyner  * @brief Transmit ring control struct
134ca853deeSEric Joyner  *
135ca853deeSEric Joyner  * Structure used to track the hardware Tx ring data.
136ca853deeSEric Joyner  */
137ca853deeSEric Joyner struct tx_ring {
138ca853deeSEric Joyner         struct iavf_tx_queue	*que;
139ca853deeSEric Joyner 	u32			tail;
140ca853deeSEric Joyner 	struct iavf_tx_desc	*tx_base;
141ca853deeSEric Joyner 	u64			tx_paddr;
142ca853deeSEric Joyner 	u32			packets;
143ca853deeSEric Joyner 	u32			me;
144ca853deeSEric Joyner 
145ca853deeSEric Joyner 	/*
146ca853deeSEric Joyner 	 * For reporting completed packet status
147ca853deeSEric Joyner 	 * in descriptor writeback mdoe
148ca853deeSEric Joyner 	 */
149ca853deeSEric Joyner 	qidx_t			*tx_rsq;
150ca853deeSEric Joyner 	qidx_t			tx_rs_cidx;
151ca853deeSEric Joyner 	qidx_t			tx_rs_pidx;
152ca853deeSEric Joyner 	qidx_t			tx_cidx_processed;
153ca853deeSEric Joyner 
154ca853deeSEric Joyner 	/* Used for Dynamic ITR calculation */
155ca853deeSEric Joyner 	u32			bytes;
156ca853deeSEric Joyner 	u32			itr;
157ca853deeSEric Joyner 	u32			latency;
158ca853deeSEric Joyner 
159ca853deeSEric Joyner 	/* Soft Stats */
160ca853deeSEric Joyner 	u64			tx_bytes;
161ca853deeSEric Joyner 	u64			tx_packets;
162ca853deeSEric Joyner 	u64			mss_too_small;
163ca853deeSEric Joyner };
164ca853deeSEric Joyner 
165ca853deeSEric Joyner /**
166ca853deeSEric Joyner  * @struct rx_ring
167ca853deeSEric Joyner  * @brief Receive ring control struct
168ca853deeSEric Joyner  *
169ca853deeSEric Joyner  * Structure used to track the hardware Rx ring data.
170ca853deeSEric Joyner  */
171ca853deeSEric Joyner struct rx_ring {
172ca853deeSEric Joyner         struct iavf_rx_queue	*que;
173ca853deeSEric Joyner 	union iavf_rx_desc	*rx_base;
174ca853deeSEric Joyner 	uint64_t		rx_paddr;
175ca853deeSEric Joyner 	bool			discard;
176ca853deeSEric Joyner 	u32			itr;
177ca853deeSEric Joyner 	u32			latency;
178ca853deeSEric Joyner 	u32			mbuf_sz;
179ca853deeSEric Joyner 	u32			tail;
180ca853deeSEric Joyner 	u32			me;
181ca853deeSEric Joyner 
182ca853deeSEric Joyner 	/* Used for Dynamic ITR calculation */
183ca853deeSEric Joyner 	u32			packets;
184ca853deeSEric Joyner 	u32			bytes;
185ca853deeSEric Joyner 
186ca853deeSEric Joyner 	/* Soft stats */
187ca853deeSEric Joyner 	u64			rx_packets;
188ca853deeSEric Joyner 	u64			rx_bytes;
189ca853deeSEric Joyner 	u64			desc_errs;
190ca853deeSEric Joyner };
191ca853deeSEric Joyner 
192ca853deeSEric Joyner /**
193ca853deeSEric Joyner  * @struct iavf_tx_queue
194ca853deeSEric Joyner  * @brief Driver Tx queue structure
195ca853deeSEric Joyner  *
196ca853deeSEric Joyner  * Structure to track the Tx ring, IRQ, MSI-X vector, and some software stats
197ca853deeSEric Joyner  * for a Tx queue.
198ca853deeSEric Joyner  */
199ca853deeSEric Joyner struct iavf_tx_queue {
200ca853deeSEric Joyner 	struct iavf_vsi		*vsi;
201ca853deeSEric Joyner 	struct tx_ring		txr;
202ca853deeSEric Joyner 	struct if_irq		que_irq;
203ca853deeSEric Joyner 	u32			msix;
204ca853deeSEric Joyner 
205ca853deeSEric Joyner 	/* Stats */
206ca853deeSEric Joyner 	u64			irqs;
207ca853deeSEric Joyner 	u64			tso;
208ca853deeSEric Joyner 	u32			pkt_too_small;
209ca853deeSEric Joyner };
210ca853deeSEric Joyner 
211ca853deeSEric Joyner /**
212ca853deeSEric Joyner  * @struct iavf_rx_queue
213ca853deeSEric Joyner  * @brief Driver Rx queue structure
214ca853deeSEric Joyner  *
215ca853deeSEric Joyner  * Structure to track the Rx ring, IRQ, MSI-X vector, and some software stats
216ca853deeSEric Joyner  * for an Rx queue.
217ca853deeSEric Joyner  */
218ca853deeSEric Joyner struct iavf_rx_queue {
219ca853deeSEric Joyner 	struct iavf_vsi		*vsi;
220ca853deeSEric Joyner 	struct rx_ring		rxr;
221ca853deeSEric Joyner 	struct if_irq		que_irq;
222ca853deeSEric Joyner 	u32			msix;
223ca853deeSEric Joyner 
224ca853deeSEric Joyner 	/* Stats */
225ca853deeSEric Joyner 	u64			irqs;
226ca853deeSEric Joyner };
227ca853deeSEric Joyner 
228ca853deeSEric Joyner /**
229ca853deeSEric Joyner  * @struct iavf_vsi
230ca853deeSEric Joyner  * @brief Virtual Station Interface
231ca853deeSEric Joyner  *
232ca853deeSEric Joyner  * Data tracking a VSI for an iavf device.
233ca853deeSEric Joyner  */
234ca853deeSEric Joyner struct iavf_vsi {
235ca853deeSEric Joyner 	if_ctx_t		ctx;
236ca853deeSEric Joyner 	if_softc_ctx_t		shared;
237d8096b2dSJustin Hibbits 	if_t			ifp;
238ca853deeSEric Joyner 	struct iavf_sc		*back;
239ca853deeSEric Joyner 	device_t		dev;
240ca853deeSEric Joyner 	struct iavf_hw		*hw;
241ca853deeSEric Joyner 
242ca853deeSEric Joyner 	int			id;
243ca853deeSEric Joyner 	u16			num_rx_queues;
244ca853deeSEric Joyner 	u16			num_tx_queues;
245ca853deeSEric Joyner 	u32			rx_itr_setting;
246ca853deeSEric Joyner 	u32			tx_itr_setting;
247ca853deeSEric Joyner 	u16			max_frame_size;
248ca853deeSEric Joyner 	bool			enable_head_writeback;
249ca853deeSEric Joyner 
250ca853deeSEric Joyner 	bool			link_active;
251ca853deeSEric Joyner 
252ca853deeSEric Joyner 	struct iavf_tx_queue	*tx_queues;
253ca853deeSEric Joyner 	struct iavf_rx_queue	*rx_queues;
254ca853deeSEric Joyner 	struct if_irq		irq;
255ca853deeSEric Joyner 
256ca853deeSEric Joyner 	u16			num_vlans;
257ca853deeSEric Joyner 	u16			num_macs;
258ca853deeSEric Joyner 
259ca853deeSEric Joyner 	/* Per-VSI stats from hardware */
260ca853deeSEric Joyner 	struct iavf_eth_stats	eth_stats;
261ca853deeSEric Joyner 	struct iavf_eth_stats	eth_stats_offsets;
262ca853deeSEric Joyner 	bool			stat_offsets_loaded;
263ca853deeSEric Joyner 	/* VSI stat counters */
264ca853deeSEric Joyner 	u64			ipackets;
265ca853deeSEric Joyner 	u64			ierrors;
266ca853deeSEric Joyner 	u64			opackets;
267ca853deeSEric Joyner 	u64			oerrors;
268ca853deeSEric Joyner 	u64			ibytes;
269ca853deeSEric Joyner 	u64			obytes;
270ca853deeSEric Joyner 	u64			imcasts;
271ca853deeSEric Joyner 	u64			omcasts;
272ca853deeSEric Joyner 	u64			iqdrops;
273ca853deeSEric Joyner 	u64			oqdrops;
274ca853deeSEric Joyner 	u64			noproto;
275ca853deeSEric Joyner 
276ca853deeSEric Joyner 	/* Misc. */
277ca853deeSEric Joyner 	u64			flags;
278ca853deeSEric Joyner 	struct sysctl_oid	*vsi_node;
279ca853deeSEric Joyner 	struct sysctl_ctx_list  sysctl_ctx;
280ca853deeSEric Joyner };
281ca853deeSEric Joyner 
282ca853deeSEric Joyner /**
283ca853deeSEric Joyner  * @struct iavf_mac_filter
284ca853deeSEric Joyner  * @brief MAC Address filter data
285ca853deeSEric Joyner  *
286ca853deeSEric Joyner  * Entry in the MAC filter list describing a MAC address filter used to
287ca853deeSEric Joyner  * program hardware to filter a specific MAC address.
288ca853deeSEric Joyner  */
289ca853deeSEric Joyner struct iavf_mac_filter {
290ca853deeSEric Joyner 	SLIST_ENTRY(iavf_mac_filter)  next;
291ca853deeSEric Joyner 	u8      macaddr[ETHER_ADDR_LEN];
292ca853deeSEric Joyner 	u16     flags;
293ca853deeSEric Joyner };
294ca853deeSEric Joyner 
295ca853deeSEric Joyner /**
296ca853deeSEric Joyner  * @struct mac_list
297ca853deeSEric Joyner  * @brief MAC filter list head
298ca853deeSEric Joyner  *
299ca853deeSEric Joyner  * List head type for a singly-linked list of MAC address filters.
300ca853deeSEric Joyner  */
301ca853deeSEric Joyner SLIST_HEAD(mac_list, iavf_mac_filter);
302ca853deeSEric Joyner 
303ca853deeSEric Joyner /**
304ca853deeSEric Joyner  * @struct iavf_vlan_filter
305ca853deeSEric Joyner  * @brief VLAN filter data
306ca853deeSEric Joyner  *
307ca853deeSEric Joyner  * Entry in the VLAN filter list describing a VLAN filter used to
308ca853deeSEric Joyner  * program hardware to filter traffic on a specific VLAN.
309ca853deeSEric Joyner  */
310ca853deeSEric Joyner struct iavf_vlan_filter {
311ca853deeSEric Joyner 	SLIST_ENTRY(iavf_vlan_filter)  next;
312ca853deeSEric Joyner 	u16     vlan;
313ca853deeSEric Joyner 	u16     flags;
314ca853deeSEric Joyner };
315ca853deeSEric Joyner 
316ca853deeSEric Joyner /**
317ca853deeSEric Joyner  * @struct vlan_list
318ca853deeSEric Joyner  * @brief VLAN filter list head
319ca853deeSEric Joyner  *
320ca853deeSEric Joyner  * List head type for a singly-linked list of VLAN filters.
321ca853deeSEric Joyner  */
322ca853deeSEric Joyner SLIST_HEAD(vlan_list, iavf_vlan_filter);
323ca853deeSEric Joyner 
324ca853deeSEric Joyner /**
325ca853deeSEric Joyner  * @struct iavf_sc
326ca853deeSEric Joyner  * @brief Main context structure for the iavf driver
327ca853deeSEric Joyner  *
328ca853deeSEric Joyner  * Software context structure used to store information about a single device
329ca853deeSEric Joyner  * that is loaded by the iavf driver.
330ca853deeSEric Joyner  */
331ca853deeSEric Joyner struct iavf_sc {
332ca853deeSEric Joyner 	struct iavf_vsi		vsi;
333ca853deeSEric Joyner 
334ca853deeSEric Joyner 	struct iavf_hw		hw;
335ca853deeSEric Joyner 	struct iavf_osdep	osdep;
336ca853deeSEric Joyner 	device_t		dev;
337ca853deeSEric Joyner 
338ca853deeSEric Joyner 	struct resource		*pci_mem;
339ca853deeSEric Joyner 
340ca853deeSEric Joyner 	/* driver state flags, only access using atomic functions */
341ca853deeSEric Joyner 	u32			state;
342ca853deeSEric Joyner 
343ca853deeSEric Joyner 	struct ifmedia		*media;
344ca853deeSEric Joyner 	struct virtchnl_version_info version;
345ca853deeSEric Joyner 	enum iavf_dbg_mask	dbg_mask;
346ca853deeSEric Joyner 	u16			promisc_flags;
347ca853deeSEric Joyner 
348ca853deeSEric Joyner 	bool			link_up;
349ca853deeSEric Joyner 	union {
350ca853deeSEric Joyner 		enum virtchnl_link_speed link_speed;
351ca853deeSEric Joyner 		u32		link_speed_adv;
352ca853deeSEric Joyner 	};
353ca853deeSEric Joyner 
354ca853deeSEric Joyner 	/* Tunable settings */
355ca853deeSEric Joyner 	int			tx_itr;
356ca853deeSEric Joyner 	int			rx_itr;
357ca853deeSEric Joyner 	int			dynamic_tx_itr;
358ca853deeSEric Joyner 	int			dynamic_rx_itr;
359ca853deeSEric Joyner 
360ca853deeSEric Joyner 	/* Filter lists */
361ca853deeSEric Joyner 	struct mac_list		*mac_filters;
362ca853deeSEric Joyner 	struct vlan_list	*vlan_filters;
363ca853deeSEric Joyner 
364ca853deeSEric Joyner 	/* Virtual comm channel */
365ca853deeSEric Joyner 	struct virtchnl_vf_resource *vf_res;
366ca853deeSEric Joyner 	struct virtchnl_vsi_resource *vsi_res;
367ca853deeSEric Joyner 
368ca853deeSEric Joyner 	/* Misc stats maintained by the driver */
369ca853deeSEric Joyner 	u64			admin_irq;
370ca853deeSEric Joyner 
371ca853deeSEric Joyner 	/* Buffer used for reading AQ responses */
372ca853deeSEric Joyner 	u8			aq_buffer[IAVF_AQ_BUF_SZ];
373ca853deeSEric Joyner 
374ca853deeSEric Joyner 	/* State flag used in init/stop */
375ca853deeSEric Joyner 	u32			queues_enabled;
376ca853deeSEric Joyner 	u8			enable_queues_chan;
377ca853deeSEric Joyner 	u8			disable_queues_chan;
378ca853deeSEric Joyner 
379ca853deeSEric Joyner 	/* For virtchnl message processing task */
380ca853deeSEric Joyner 	struct task		vc_task;
381ca853deeSEric Joyner 	struct taskqueue	*vc_tq;
382ca853deeSEric Joyner 	char			vc_mtx_name[16];
383ca853deeSEric Joyner 	struct mtx		vc_mtx;
384ca853deeSEric Joyner };
385ca853deeSEric Joyner 
386ca853deeSEric Joyner /* Function prototypes */
387ca853deeSEric Joyner void		 iavf_init_tx_ring(struct iavf_vsi *vsi, struct iavf_tx_queue *que);
388ca853deeSEric Joyner void		 iavf_get_default_rss_key(u32 *);
389ca853deeSEric Joyner const char *	iavf_vc_stat_str(struct iavf_hw *hw,
390ca853deeSEric Joyner     enum virtchnl_status_code stat_err);
391ca853deeSEric Joyner void		iavf_init_tx_rsqs(struct iavf_vsi *vsi);
392ca853deeSEric Joyner void		iavf_init_tx_cidx(struct iavf_vsi *vsi);
393ca853deeSEric Joyner u64		iavf_max_vc_speed_to_value(u8 link_speeds);
394ca853deeSEric Joyner void		iavf_add_vsi_sysctls(device_t dev, struct iavf_vsi *vsi,
395ca853deeSEric Joyner 		    struct sysctl_ctx_list *ctx, const char *sysctl_name);
396ca853deeSEric Joyner void		iavf_add_sysctls_eth_stats(struct sysctl_ctx_list *ctx,
397ca853deeSEric Joyner 		    struct sysctl_oid_list *child,
398ca853deeSEric Joyner 		    struct iavf_eth_stats *eth_stats);
399ca853deeSEric Joyner void		iavf_add_queues_sysctls(device_t dev, struct iavf_vsi *vsi);
400ca853deeSEric Joyner 
401ca853deeSEric Joyner void	iavf_enable_intr(struct iavf_vsi *);
402ca853deeSEric Joyner void	iavf_disable_intr(struct iavf_vsi *);
403ca853deeSEric Joyner #endif /* _IAVF_IFLIB_H_ */
404