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