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; 237*d8096b2dSJustin 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