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