linux/drivers/net/ethernet/intel/i40e/i40e.h
<<
>>
Prefs
   1/*******************************************************************************
   2 *
   3 * Intel Ethernet Controller XL710 Family Linux Driver
   4 * Copyright(c) 2013 Intel Corporation.
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms and conditions of the GNU General Public License,
   8 * version 2, as published by the Free Software Foundation.
   9 *
  10 * This program is distributed in the hope it will be useful, but WITHOUT
  11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  12 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
  13 * more details.
  14 *
  15 * You should have received a copy of the GNU General Public License along with
  16 * this program; if not, write to the Free Software Foundation, Inc.,
  17 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  18 *
  19 * The full GNU General Public License is included in this distribution in
  20 * the file called "COPYING".
  21 *
  22 * Contact Information:
  23 * e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
  24 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  25 *
  26 ******************************************************************************/
  27
  28#ifndef _I40E_H_
  29#define _I40E_H_
  30
  31#include <net/tcp.h>
  32#include <linux/init.h>
  33#include <linux/types.h>
  34#include <linux/errno.h>
  35#include <linux/module.h>
  36#include <linux/pci.h>
  37#include <linux/aer.h>
  38#include <linux/netdevice.h>
  39#include <linux/ioport.h>
  40#include <linux/slab.h>
  41#include <linux/list.h>
  42#include <linux/string.h>
  43#include <linux/in.h>
  44#include <linux/ip.h>
  45#include <linux/tcp.h>
  46#include <linux/sctp.h>
  47#include <linux/pkt_sched.h>
  48#include <linux/ipv6.h>
  49#include <linux/version.h>
  50#include <net/checksum.h>
  51#include <net/ip6_checksum.h>
  52#include <linux/ethtool.h>
  53#include <linux/if_vlan.h>
  54#include "i40e_type.h"
  55#include "i40e_prototype.h"
  56#include "i40e_virtchnl.h"
  57#include "i40e_virtchnl_pf.h"
  58#include "i40e_txrx.h"
  59
  60/* Useful i40e defaults */
  61#define I40E_BASE_PF_SEID     16
  62#define I40E_BASE_VSI_SEID    512
  63#define I40E_BASE_VEB_SEID    288
  64#define I40E_MAX_VEB          16
  65
  66#define I40E_MAX_NUM_DESCRIPTORS      4096
  67#define I40E_MAX_REGISTER     0x0038FFFF
  68#define I40E_DEFAULT_NUM_DESCRIPTORS  512
  69#define I40E_REQ_DESCRIPTOR_MULTIPLE  32
  70#define I40E_MIN_NUM_DESCRIPTORS      64
  71#define I40E_MIN_MSIX                 2
  72#define I40E_DEFAULT_NUM_VMDQ_VSI     8 /* max 256 VSIs */
  73#define I40E_DEFAULT_QUEUES_PER_VMDQ  2 /* max 16 qps */
  74#define I40E_DEFAULT_QUEUES_PER_VF    4
  75#define I40E_DEFAULT_QUEUES_PER_TC    1 /* should be a power of 2 */
  76#define I40E_FDIR_RING                0
  77#define I40E_FDIR_RING_COUNT          32
  78#define I40E_MAX_AQ_BUF_SIZE          4096
  79#define I40E_AQ_LEN                   32
  80#define I40E_AQ_WORK_LIMIT            16
  81#define I40E_MAX_USER_PRIORITY        8
  82#define I40E_DEFAULT_MSG_ENABLE       4
  83
  84#define I40E_NVM_VERSION_LO_SHIFT  0
  85#define I40E_NVM_VERSION_LO_MASK   (0xf << I40E_NVM_VERSION_LO_SHIFT)
  86#define I40E_NVM_VERSION_MID_SHIFT 4
  87#define I40E_NVM_VERSION_MID_MASK  (0xff << I40E_NVM_VERSION_MID_SHIFT)
  88#define I40E_NVM_VERSION_HI_SHIFT  12
  89#define I40E_NVM_VERSION_HI_MASK   (0xf << I40E_NVM_VERSION_HI_SHIFT)
  90
  91/* magic for getting defines into strings */
  92#define STRINGIFY(foo)  #foo
  93#define XSTRINGIFY(bar) STRINGIFY(bar)
  94
  95#ifndef ARCH_HAS_PREFETCH
  96#define prefetch(X)
  97#endif
  98
  99#define I40E_RX_DESC(R, i)                      \
 100        ((ring_is_16byte_desc_enabled(R))       \
 101                ? (union i40e_32byte_rx_desc *) \
 102                        (&(((union i40e_16byte_rx_desc *)((R)->desc))[i])) \
 103                : (&(((union i40e_32byte_rx_desc *)((R)->desc))[i])))
 104#define I40E_TX_DESC(R, i)                      \
 105        (&(((struct i40e_tx_desc *)((R)->desc))[i]))
 106#define I40E_TX_CTXTDESC(R, i)                  \
 107        (&(((struct i40e_tx_context_desc *)((R)->desc))[i]))
 108#define I40E_TX_FDIRDESC(R, i)                  \
 109        (&(((struct i40e_filter_program_desc *)((R)->desc))[i]))
 110
 111/* default to trying for four seconds */
 112#define I40E_TRY_LINK_TIMEOUT (4 * HZ)
 113
 114/* driver state flags */
 115enum i40e_state_t {
 116        __I40E_TESTING,
 117        __I40E_CONFIG_BUSY,
 118        __I40E_CONFIG_DONE,
 119        __I40E_DOWN,
 120        __I40E_NEEDS_RESTART,
 121        __I40E_SERVICE_SCHED,
 122        __I40E_ADMINQ_EVENT_PENDING,
 123        __I40E_MDD_EVENT_PENDING,
 124        __I40E_VFLR_EVENT_PENDING,
 125        __I40E_RESET_RECOVERY_PENDING,
 126        __I40E_RESET_INTR_RECEIVED,
 127        __I40E_REINIT_REQUESTED,
 128        __I40E_PF_RESET_REQUESTED,
 129        __I40E_CORE_RESET_REQUESTED,
 130        __I40E_GLOBAL_RESET_REQUESTED,
 131        __I40E_FILTER_OVERFLOW_PROMISC,
 132};
 133
 134enum i40e_interrupt_policy {
 135        I40E_INTERRUPT_BEST_CASE,
 136        I40E_INTERRUPT_MEDIUM,
 137        I40E_INTERRUPT_LOWEST
 138};
 139
 140struct i40e_lump_tracking {
 141        u16 num_entries;
 142        u16 search_hint;
 143        u16 list[0];
 144#define I40E_PILE_VALID_BIT  0x8000
 145};
 146
 147#define I40E_DEFAULT_ATR_SAMPLE_RATE    20
 148#define I40E_FDIR_MAX_RAW_PACKET_LOOKUP 512
 149struct i40e_fdir_data {
 150        u16 q_index;
 151        u8  flex_off;
 152        u8  pctype;
 153        u16 dest_vsi;
 154        u8  dest_ctl;
 155        u8  fd_status;
 156        u16 cnt_index;
 157        u32 fd_id;
 158        u8  *raw_packet;
 159};
 160
 161#define I40E_DCB_PRIO_TYPE_STRICT       0
 162#define I40E_DCB_PRIO_TYPE_ETS          1
 163#define I40E_DCB_STRICT_PRIO_CREDITS    127
 164#define I40E_MAX_USER_PRIORITY  8
 165/* DCB per TC information data structure */
 166struct i40e_tc_info {
 167        u16     qoffset;        /* Queue offset from base queue */
 168        u16     qcount;         /* Total Queues */
 169        u8      netdev_tc;      /* Netdev TC index if netdev associated */
 170};
 171
 172/* TC configuration data structure */
 173struct i40e_tc_configuration {
 174        u8      numtc;          /* Total number of enabled TCs */
 175        u8      enabled_tc;     /* TC map */
 176        struct i40e_tc_info tc_info[I40E_MAX_TRAFFIC_CLASS];
 177};
 178
 179/* struct that defines the Ethernet device */
 180struct i40e_pf {
 181        struct pci_dev *pdev;
 182        struct i40e_hw hw;
 183        unsigned long state;
 184        unsigned long link_check_timeout;
 185        struct msix_entry *msix_entries;
 186        u16 num_msix_entries;
 187        bool fc_autoneg_status;
 188
 189        u16 eeprom_version;
 190        u16 num_vmdq_vsis;         /* num vmdq pools this pf has set up */
 191        u16 num_vmdq_qps;          /* num queue pairs per vmdq pool */
 192        u16 num_vmdq_msix;         /* num queue vectors per vmdq pool */
 193        u16 num_req_vfs;           /* num vfs requested for this vf */
 194        u16 num_vf_qps;            /* num queue pairs per vf */
 195        u16 num_tc_qps;            /* num queue pairs per TC */
 196        u16 num_lan_qps;           /* num lan queues this pf has set up */
 197        u16 num_lan_msix;          /* num queue vectors for the base pf vsi */
 198        u16 rss_size;              /* num queues in the RSS array */
 199        u16 rss_size_max;          /* HW defined max RSS queues */
 200        u16 fdir_pf_filter_count;  /* num of guaranteed filters for this PF */
 201        u8 atr_sample_rate;
 202
 203        enum i40e_interrupt_policy int_policy;
 204        u16 rx_itr_default;
 205        u16 tx_itr_default;
 206        u16 msg_enable;
 207        char misc_int_name[IFNAMSIZ + 9];
 208        u16 adminq_work_limit; /* num of admin receive queue desc to process */
 209        int service_timer_period;
 210        struct timer_list service_timer;
 211        struct work_struct service_task;
 212
 213        u64 flags;
 214#define I40E_FLAG_RX_CSUM_ENABLED              (u64)(1 << 1)
 215#define I40E_FLAG_MSI_ENABLED                  (u64)(1 << 2)
 216#define I40E_FLAG_MSIX_ENABLED                 (u64)(1 << 3)
 217#define I40E_FLAG_RX_1BUF_ENABLED              (u64)(1 << 4)
 218#define I40E_FLAG_RX_PS_ENABLED                (u64)(1 << 5)
 219#define I40E_FLAG_RSS_ENABLED                  (u64)(1 << 6)
 220#define I40E_FLAG_MQ_ENABLED                   (u64)(1 << 7)
 221#define I40E_FLAG_VMDQ_ENABLED                 (u64)(1 << 8)
 222#define I40E_FLAG_FDIR_REQUIRES_REINIT         (u64)(1 << 9)
 223#define I40E_FLAG_NEED_LINK_UPDATE             (u64)(1 << 10)
 224#define I40E_FLAG_IN_NETPOLL                   (u64)(1 << 13)
 225#define I40E_FLAG_16BYTE_RX_DESC_ENABLED       (u64)(1 << 14)
 226#define I40E_FLAG_CLEAN_ADMINQ                 (u64)(1 << 15)
 227#define I40E_FLAG_FILTER_SYNC                  (u64)(1 << 16)
 228#define I40E_FLAG_PROCESS_MDD_EVENT            (u64)(1 << 18)
 229#define I40E_FLAG_PROCESS_VFLR_EVENT           (u64)(1 << 19)
 230#define I40E_FLAG_SRIOV_ENABLED                (u64)(1 << 20)
 231#define I40E_FLAG_DCB_ENABLED                  (u64)(1 << 21)
 232#define I40E_FLAG_FDIR_ENABLED                 (u64)(1 << 22)
 233#define I40E_FLAG_FDIR_ATR_ENABLED             (u64)(1 << 23)
 234#define I40E_FLAG_MFP_ENABLED                  (u64)(1 << 27)
 235
 236        u16 num_tx_queues;
 237        u16 num_rx_queues;
 238
 239        bool stat_offsets_loaded;
 240        struct i40e_hw_port_stats stats;
 241        struct i40e_hw_port_stats stats_offsets;
 242        u32 tx_timeout_count;
 243        u32 tx_timeout_recovery_level;
 244        unsigned long tx_timeout_last_recovery;
 245        u32 hw_csum_rx_error;
 246        u32 led_status;
 247        u16 corer_count; /* Core reset count */
 248        u16 globr_count; /* Global reset count */
 249        u16 empr_count; /* EMP reset count */
 250        u16 pfr_count; /* PF reset count */
 251
 252        struct mutex switch_mutex;
 253        u16 lan_vsi;       /* our default LAN VSI */
 254        u16 lan_veb;       /* initial relay, if exists */
 255#define I40E_NO_VEB   0xffff
 256#define I40E_NO_VSI   0xffff
 257        u16 next_vsi;      /* Next unallocated VSI - 0-based! */
 258        struct i40e_vsi **vsi;
 259        struct i40e_veb *veb[I40E_MAX_VEB];
 260
 261        struct i40e_lump_tracking *qp_pile;
 262        struct i40e_lump_tracking *irq_pile;
 263
 264        /* switch config info */
 265        u16 pf_seid;
 266        u16 main_vsi_seid;
 267        u16 mac_seid;
 268        struct i40e_aqc_get_switch_config_data *sw_config;
 269        struct kobject *switch_kobj;
 270#ifdef CONFIG_DEBUG_FS
 271        struct dentry *i40e_dbg_pf;
 272#endif /* CONFIG_DEBUG_FS */
 273
 274        /* sr-iov config info */
 275        struct i40e_vf *vf;
 276        int num_alloc_vfs;      /* actual number of VFs allocated */
 277        u32 vf_aq_requests;
 278
 279        /* DCBx/DCBNL capability for PF that indicates
 280         * whether DCBx is managed by firmware or host
 281         * based agent (LLDPAD). Also, indicates what
 282         * flavor of DCBx protocol (IEEE/CEE) is supported
 283         * by the device. For now we're supporting IEEE
 284         * mode only.
 285         */
 286        u16 dcbx_cap;
 287
 288        u32     fcoe_hmc_filt_num;
 289        u32     fcoe_hmc_cntx_num;
 290        struct i40e_filter_control_settings filter_settings;
 291};
 292
 293struct i40e_mac_filter {
 294        struct list_head list;
 295        u8 macaddr[ETH_ALEN];
 296#define I40E_VLAN_ANY -1
 297        s16 vlan;
 298        u8 counter;             /* number of instances of this filter */
 299        bool is_vf;             /* filter belongs to a VF */
 300        bool is_netdev;         /* filter belongs to a netdev */
 301        bool changed;           /* filter needs to be sync'd to the HW */
 302};
 303
 304struct i40e_veb {
 305        struct i40e_pf *pf;
 306        u16 idx;
 307        u16 veb_idx;           /* index of VEB parent */
 308        u16 seid;
 309        u16 uplink_seid;
 310        u16 stats_idx;           /* index of VEB parent */
 311        u8  enabled_tc;
 312        u16 flags;
 313        u16 bw_limit;
 314        u8  bw_max_quanta;
 315        bool is_abs_credits;
 316        u8  bw_tc_share_credits[I40E_MAX_TRAFFIC_CLASS];
 317        u16 bw_tc_limit_credits[I40E_MAX_TRAFFIC_CLASS];
 318        u8  bw_tc_max_quanta[I40E_MAX_TRAFFIC_CLASS];
 319        struct kobject *kobj;
 320        bool stat_offsets_loaded;
 321        struct i40e_eth_stats stats;
 322        struct i40e_eth_stats stats_offsets;
 323};
 324
 325/* struct that defines a VSI, associated with a dev */
 326struct i40e_vsi {
 327        struct net_device *netdev;
 328        unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
 329        bool netdev_registered;
 330        bool stat_offsets_loaded;
 331
 332        u32 current_netdev_flags;
 333        unsigned long state;
 334#define I40E_VSI_FLAG_FILTER_CHANGED  (1<<0)
 335#define I40E_VSI_FLAG_VEB_OWNER       (1<<1)
 336        unsigned long flags;
 337
 338        struct list_head mac_filter_list;
 339
 340        /* VSI stats */
 341        struct rtnl_link_stats64 net_stats;
 342        struct rtnl_link_stats64 net_stats_offsets;
 343        struct i40e_eth_stats eth_stats;
 344        struct i40e_eth_stats eth_stats_offsets;
 345        u32 tx_restart;
 346        u32 tx_busy;
 347        u32 rx_buf_failed;
 348        u32 rx_page_failed;
 349
 350        /* These are arrays of rings, allocated at run-time */
 351        struct i40e_ring *rx_rings;
 352        struct i40e_ring *tx_rings;
 353
 354        u16 work_limit;
 355        /* high bit set means dynamic, use accessor routines to read/write.
 356         * hardware only supports 2us resolution for the ITR registers.
 357         * these values always store the USER setting, and must be converted
 358         * before programming to a register.
 359         */
 360        u16 rx_itr_setting;
 361        u16 tx_itr_setting;
 362
 363        u16 max_frame;
 364        u16 rx_hdr_len;
 365        u16 rx_buf_len;
 366        u8  dtype;
 367
 368        /* List of q_vectors allocated to this VSI */
 369        struct i40e_q_vector *q_vectors;
 370        int num_q_vectors;
 371        int base_vector;
 372
 373        u16 seid;            /* HW index of this VSI (absolute index) */
 374        u16 id;              /* VSI number */
 375        u16 uplink_seid;
 376
 377        u16 base_queue;      /* vsi's first queue in hw array */
 378        u16 alloc_queue_pairs; /* Allocated Tx/Rx queues */
 379        u16 num_queue_pairs; /* Used tx and rx pairs */
 380        u16 num_desc;
 381        enum i40e_vsi_type type;  /* VSI type, e.g., LAN, FCoE, etc */
 382        u16 vf_id;              /* Virtual function ID for SRIOV VSIs */
 383
 384        struct i40e_tc_configuration tc_config;
 385        struct i40e_aqc_vsi_properties_data info;
 386
 387        /* VSI BW limit (absolute across all TCs) */
 388        u16 bw_limit;           /* VSI BW Limit (0 = disabled) */
 389        u8  bw_max_quanta;      /* Max Quanta when BW limit is enabled */
 390
 391        /* Relative TC credits across VSIs */
 392        u8  bw_ets_share_credits[I40E_MAX_TRAFFIC_CLASS];
 393        /* TC BW limit credits within VSI */
 394        u16  bw_ets_limit_credits[I40E_MAX_TRAFFIC_CLASS];
 395        /* TC BW limit max quanta within VSI */
 396        u8  bw_ets_max_quanta[I40E_MAX_TRAFFIC_CLASS];
 397
 398        struct i40e_pf *back;  /* Backreference to associated PF */
 399        u16 idx;               /* index in pf->vsi[] */
 400        u16 veb_idx;           /* index of VEB parent */
 401        struct kobject *kobj;  /* sysfs object */
 402
 403        /* VSI specific handlers */
 404        irqreturn_t (*irq_handler)(int irq, void *data);
 405} ____cacheline_internodealigned_in_smp;
 406
 407struct i40e_netdev_priv {
 408        struct i40e_vsi *vsi;
 409};
 410
 411/* struct that defines an interrupt vector */
 412struct i40e_q_vector {
 413        struct i40e_vsi *vsi;
 414
 415        u16 v_idx;              /* index in the vsi->q_vector array. */
 416        u16 reg_idx;            /* register index of the interrupt */
 417
 418        struct napi_struct napi;
 419
 420        struct i40e_ring_container rx;
 421        struct i40e_ring_container tx;
 422
 423        u8 num_ringpairs;       /* total number of ring pairs in vector */
 424
 425        char name[IFNAMSIZ + 9];
 426        cpumask_t affinity_mask;
 427} ____cacheline_internodealigned_in_smp;
 428
 429/* lan device */
 430struct i40e_device {
 431        struct list_head list;
 432        struct i40e_pf *pf;
 433};
 434
 435/**
 436 * i40e_fw_version_str - format the FW and NVM version strings
 437 * @hw: ptr to the hardware info
 438 **/
 439static inline char *i40e_fw_version_str(struct i40e_hw *hw)
 440{
 441        static char buf[32];
 442
 443        snprintf(buf, sizeof(buf),
 444                 "f%d.%d a%d.%d n%02d.%02d.%02d e%08x",
 445                 hw->aq.fw_maj_ver, hw->aq.fw_min_ver,
 446                 hw->aq.api_maj_ver, hw->aq.api_min_ver,
 447                 (hw->nvm.version & I40E_NVM_VERSION_HI_MASK)
 448                                                >> I40E_NVM_VERSION_HI_SHIFT,
 449                 (hw->nvm.version & I40E_NVM_VERSION_MID_MASK)
 450                                                >> I40E_NVM_VERSION_MID_SHIFT,
 451                 (hw->nvm.version & I40E_NVM_VERSION_LO_MASK)
 452                                                >> I40E_NVM_VERSION_LO_SHIFT,
 453                 hw->nvm.eetrack);
 454
 455        return buf;
 456}
 457
 458/**
 459 * i40e_netdev_to_pf: Retrieve the PF struct for given netdev
 460 * @netdev: the corresponding netdev
 461 *
 462 * Return the PF struct for the given netdev
 463 **/
 464static inline struct i40e_pf *i40e_netdev_to_pf(struct net_device *netdev)
 465{
 466        struct i40e_netdev_priv *np = netdev_priv(netdev);
 467        struct i40e_vsi *vsi = np->vsi;
 468
 469        return vsi->back;
 470}
 471
 472static inline void i40e_vsi_setup_irqhandler(struct i40e_vsi *vsi,
 473                                irqreturn_t (*irq_handler)(int, void *))
 474{
 475        vsi->irq_handler = irq_handler;
 476}
 477
 478/**
 479 * i40e_rx_is_programming_status - check for programming status descriptor
 480 * @qw: the first quad word of the program status descriptor
 481 *
 482 * The value of in the descriptor length field indicate if this
 483 * is a programming status descriptor for flow director or FCoE
 484 * by the value of I40E_RX_PROG_STATUS_DESC_LENGTH, otherwise
 485 * it is a packet descriptor.
 486 **/
 487static inline bool i40e_rx_is_programming_status(u64 qw)
 488{
 489        return I40E_RX_PROG_STATUS_DESC_LENGTH ==
 490                (qw >> I40E_RX_PROG_STATUS_DESC_LENGTH_SHIFT);
 491}
 492
 493/* needed by i40e_ethtool.c */
 494int i40e_up(struct i40e_vsi *vsi);
 495void i40e_down(struct i40e_vsi *vsi);
 496extern const char i40e_driver_name[];
 497extern const char i40e_driver_version_str[];
 498void i40e_do_reset(struct i40e_pf *pf, u32 reset_flags);
 499void i40e_update_stats(struct i40e_vsi *vsi);
 500void i40e_update_eth_stats(struct i40e_vsi *vsi);
 501struct rtnl_link_stats64 *i40e_get_vsi_stats_struct(struct i40e_vsi *vsi);
 502int i40e_fetch_switch_configuration(struct i40e_pf *pf,
 503                                    bool printconfig);
 504
 505/* needed by i40e_main.c */
 506void i40e_add_fdir_filter(struct i40e_fdir_data fdir_data,
 507                          struct i40e_ring *tx_ring);
 508void i40e_add_remove_filter(struct i40e_fdir_data fdir_data,
 509                            struct i40e_ring *tx_ring);
 510void i40e_update_fdir_filter(struct i40e_fdir_data fdir_data,
 511                             struct i40e_ring *tx_ring);
 512int i40e_program_fdir_filter(struct i40e_fdir_data *fdir_data,
 513                             struct i40e_pf *pf, bool add);
 514
 515void i40e_set_ethtool_ops(struct net_device *netdev);
 516struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,
 517                                        u8 *macaddr, s16 vlan,
 518                                        bool is_vf, bool is_netdev);
 519void i40e_del_filter(struct i40e_vsi *vsi, u8 *macaddr, s16 vlan,
 520                     bool is_vf, bool is_netdev);
 521int i40e_sync_vsi_filters(struct i40e_vsi *vsi);
 522struct i40e_vsi *i40e_vsi_setup(struct i40e_pf *pf, u8 type,
 523                                u16 uplink, u32 param1);
 524int i40e_vsi_release(struct i40e_vsi *vsi);
 525struct i40e_vsi *i40e_vsi_lookup(struct i40e_pf *pf, enum i40e_vsi_type type,
 526                                 struct i40e_vsi *start_vsi);
 527struct i40e_veb *i40e_veb_setup(struct i40e_pf *pf, u16 flags, u16 uplink_seid,
 528                                u16 downlink_seid, u8 enabled_tc);
 529void i40e_veb_release(struct i40e_veb *veb);
 530
 531i40e_status i40e_vsi_add_pvid(struct i40e_vsi *vsi, u16 vid);
 532void i40e_vsi_remove_pvid(struct i40e_vsi *vsi);
 533void i40e_vsi_reset_stats(struct i40e_vsi *vsi);
 534void i40e_pf_reset_stats(struct i40e_pf *pf);
 535#ifdef CONFIG_DEBUG_FS
 536void i40e_dbg_pf_init(struct i40e_pf *pf);
 537void i40e_dbg_pf_exit(struct i40e_pf *pf);
 538void i40e_dbg_init(void);
 539void i40e_dbg_exit(void);
 540#else
 541static inline void i40e_dbg_pf_init(struct i40e_pf *pf) {}
 542static inline void i40e_dbg_pf_exit(struct i40e_pf *pf) {}
 543static inline void i40e_dbg_init(void) {}
 544static inline void i40e_dbg_exit(void) {}
 545#endif /* CONFIG_DEBUG_FS*/
 546void i40e_irq_dynamic_enable(struct i40e_vsi *vsi, int vector);
 547int i40e_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd);
 548void i40e_vlan_stripping_disable(struct i40e_vsi *vsi);
 549int i40e_vsi_add_vlan(struct i40e_vsi *vsi, s16 vid);
 550int i40e_vsi_kill_vlan(struct i40e_vsi *vsi, s16 vid);
 551struct i40e_mac_filter *i40e_put_mac_in_vlan(struct i40e_vsi *vsi, u8 *macaddr,
 552                                             bool is_vf, bool is_netdev);
 553bool i40e_is_vsi_in_vlan(struct i40e_vsi *vsi);
 554struct i40e_mac_filter *i40e_find_mac(struct i40e_vsi *vsi, u8 *macaddr,
 555                                      bool is_vf, bool is_netdev);
 556void i40e_vlan_stripping_enable(struct i40e_vsi *vsi);
 557
 558#endif /* _I40E_H_ */
 559