1 /******************************************************************************* 2 * 3 * Intel Ethernet Controller XL710 Family Linux Virtual Function 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 _I40EVF_H_ 28 #define _I40EVF_H_ 29 30 #include <linux/module.h> 31 #include <linux/pci.h> 32 #include <linux/aer.h> 33 #include <linux/netdevice.h> 34 #include <linux/vmalloc.h> 35 #include <linux/interrupt.h> 36 #include <linux/ethtool.h> 37 #include <linux/if_vlan.h> 38 #include <linux/ip.h> 39 #include <linux/tcp.h> 40 #include <linux/sctp.h> 41 #include <linux/ipv6.h> 42 #include <net/ip6_checksum.h> 43 #include <net/udp.h> 44 45 #include "i40e_type.h" 46 #include "i40e_virtchnl.h" 47 #include "i40e_txrx.h" 48 49 #define DEFAULT_DEBUG_LEVEL_SHIFT 3 50 #define PFX "i40evf: " 51 #define DPRINTK(nlevel, klevel, fmt, args...) \ 52 ((void)((NETIF_MSG_##nlevel & adapter->msg_enable) && \ 53 printk(KERN_##klevel PFX "%s: %s: " fmt, adapter->netdev->name, \ 54 __func__ , ## args))) 55 56 /* dummy struct to make common code less painful */ 57 struct i40e_vsi { 58 struct i40evf_adapter *back; 59 struct net_device *netdev; 60 unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)]; 61 u16 seid; 62 u16 id; 63 unsigned long state; 64 int base_vector; 65 u16 work_limit; 66 /* high bit set means dynamic, use accessor routines to read/write. 67 * hardware only supports 2us resolution for the ITR registers. 68 * these values always store the USER setting, and must be converted 69 * before programming to a register. 70 */ 71 u16 rx_itr_setting; 72 u16 tx_itr_setting; 73 }; 74 75 /* How many Rx Buffers do we bundle into one write to the hardware ? */ 76 #define I40EVF_RX_BUFFER_WRITE 16 /* Must be power of 2 */ 77 #define I40EVF_DEFAULT_TXD 512 78 #define I40EVF_DEFAULT_RXD 512 79 #define I40EVF_MAX_TXD 4096 80 #define I40EVF_MIN_TXD 64 81 #define I40EVF_MAX_RXD 4096 82 #define I40EVF_MIN_RXD 64 83 #define I40EVF_REQ_DESCRIPTOR_MULTIPLE 32 84 85 /* Supported Rx Buffer Sizes */ 86 #define I40EVF_RXBUFFER_64 64 /* Used for packet split */ 87 #define I40EVF_RXBUFFER_128 128 /* Used for packet split */ 88 #define I40EVF_RXBUFFER_256 256 /* Used for packet split */ 89 #define I40EVF_RXBUFFER_2048 2048 90 #define I40EVF_MAX_RXBUFFER 16384 /* largest size for single descriptor */ 91 #define I40EVF_MAX_AQ_BUF_SIZE 4096 92 #define I40EVF_AQ_LEN 32 93 #define I40EVF_AQ_MAX_ERR 10 /* times to try before resetting AQ */ 94 95 #define MAXIMUM_ETHERNET_VLAN_SIZE (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN) 96 97 #define I40E_RX_DESC(R, i) (&(((union i40e_32byte_rx_desc *)((R)->desc))[i])) 98 #define I40E_TX_DESC(R, i) (&(((struct i40e_tx_desc *)((R)->desc))[i])) 99 #define I40E_TX_CTXTDESC(R, i) \ 100 (&(((struct i40e_tx_context_desc *)((R)->desc))[i])) 101 #define MAX_RX_QUEUES 8 102 #define MAX_TX_QUEUES MAX_RX_QUEUES 103 104 /* MAX_MSIX_Q_VECTORS of these are allocated, 105 * but we only use one per queue-specific vector. 106 */ 107 struct i40e_q_vector { 108 struct i40evf_adapter *adapter; 109 struct i40e_vsi *vsi; 110 struct napi_struct napi; 111 unsigned long reg_idx; 112 struct i40e_ring_container rx; 113 struct i40e_ring_container tx; 114 u32 ring_mask; 115 u8 num_ringpairs; /* total number of ring pairs in vector */ 116 int v_idx; /* vector index in list */ 117 char name[IFNAMSIZ + 9]; 118 cpumask_var_t affinity_mask; 119 }; 120 121 /* Helper macros to switch between ints/sec and what the register uses. 122 * And yes, it's the same math going both ways. The lowest value 123 * supported by all of the i40e hardware is 8. 124 */ 125 #define EITR_INTS_PER_SEC_TO_REG(_eitr) \ 126 ((_eitr) ? (1000000000 / ((_eitr) * 256)) : 8) 127 #define EITR_REG_TO_INTS_PER_SEC EITR_INTS_PER_SEC_TO_REG 128 129 #define I40EVF_DESC_UNUSED(R) \ 130 ((((R)->next_to_clean > (R)->next_to_use) ? 0 : (R)->count) + \ 131 (R)->next_to_clean - (R)->next_to_use - 1) 132 133 #define I40EVF_RX_DESC_ADV(R, i) \ 134 (&(((union i40e_adv_rx_desc *)((R).desc))[i])) 135 #define I40EVF_TX_DESC_ADV(R, i) \ 136 (&(((union i40e_adv_tx_desc *)((R).desc))[i])) 137 #define I40EVF_TX_CTXTDESC_ADV(R, i) \ 138 (&(((struct i40e_adv_tx_context_desc *)((R).desc))[i])) 139 140 #define OTHER_VECTOR 1 141 #define NONQ_VECS (OTHER_VECTOR) 142 143 #define MAX_MSIX_Q_VECTORS 4 144 #define MAX_MSIX_COUNT 5 145 146 #define MIN_MSIX_Q_VECTORS 1 147 #define MIN_MSIX_COUNT (MIN_MSIX_Q_VECTORS + NONQ_VECS) 148 149 #define I40EVF_QUEUE_END_OF_LIST 0x7FF 150 #define I40EVF_FREE_VECTOR 0x7FFF 151 struct i40evf_mac_filter { 152 struct list_head list; 153 u8 macaddr[ETH_ALEN]; 154 bool remove; /* filter needs to be removed */ 155 bool add; /* filter needs to be added */ 156 }; 157 158 struct i40evf_vlan_filter { 159 struct list_head list; 160 u16 vlan; 161 bool remove; /* filter needs to be removed */ 162 bool add; /* filter needs to be added */ 163 }; 164 165 /* Driver state. The order of these is important! */ 166 enum i40evf_state_t { 167 __I40EVF_STARTUP, /* driver loaded, probe complete */ 168 __I40EVF_REMOVE, /* driver is being unloaded */ 169 __I40EVF_INIT_VERSION_CHECK, /* aq msg sent, awaiting reply */ 170 __I40EVF_INIT_GET_RESOURCES, /* aq msg sent, awaiting reply */ 171 __I40EVF_INIT_SW, /* got resources, setting up structs */ 172 __I40EVF_RESETTING, /* in reset */ 173 /* Below here, watchdog is running */ 174 __I40EVF_DOWN, /* ready, can be opened */ 175 __I40EVF_TESTING, /* in ethtool self-test */ 176 __I40EVF_RUNNING, /* opened, working */ 177 }; 178 179 enum i40evf_critical_section_t { 180 __I40EVF_IN_CRITICAL_TASK, /* cannot be interrupted */ 181 }; 182 /* make common code happy */ 183 #define __I40E_DOWN __I40EVF_DOWN 184 185 /* board specific private data structure */ 186 struct i40evf_adapter { 187 struct timer_list watchdog_timer; 188 struct work_struct reset_task; 189 struct work_struct adminq_task; 190 struct delayed_work init_task; 191 struct i40e_q_vector *q_vector[MAX_MSIX_Q_VECTORS]; 192 struct list_head vlan_filter_list; 193 char misc_vector_name[IFNAMSIZ + 9]; 194 195 /* TX */ 196 struct i40e_ring *tx_rings[I40E_MAX_VSI_QP]; 197 u32 tx_timeout_count; 198 struct list_head mac_filter_list; 199 u32 tx_desc_count; 200 201 /* RX */ 202 struct i40e_ring *rx_rings[I40E_MAX_VSI_QP]; 203 u64 hw_csum_rx_error; 204 u32 rx_desc_count; 205 int num_msix_vectors; 206 struct msix_entry *msix_entries; 207 208 u32 flags; 209 #define I40EVF_FLAG_RX_CSUM_ENABLED (u32)(1) 210 #define I40EVF_FLAG_RX_1BUF_CAPABLE (u32)(1 << 1) 211 #define I40EVF_FLAG_RX_PS_CAPABLE (u32)(1 << 2) 212 #define I40EVF_FLAG_RX_PS_ENABLED (u32)(1 << 3) 213 #define I40EVF_FLAG_IN_NETPOLL (u32)(1 << 4) 214 #define I40EVF_FLAG_IMIR_ENABLED (u32)(1 << 5) 215 #define I40EVF_FLAG_MQ_CAPABLE (u32)(1 << 6) 216 #define I40EVF_FLAG_NEED_LINK_UPDATE (u32)(1 << 7) 217 #define I40EVF_FLAG_PF_COMMS_FAILED (u32)(1 << 8) 218 #define I40EVF_FLAG_RESET_PENDING (u32)(1 << 9) 219 #define I40EVF_FLAG_RESET_NEEDED (u32)(1 << 10) 220 /* duplcates for common code */ 221 #define I40E_FLAG_FDIR_ATR_ENABLED 0 222 #define I40E_FLAG_DCB_ENABLED 0 223 #define I40E_FLAG_IN_NETPOLL I40EVF_FLAG_IN_NETPOLL 224 #define I40E_FLAG_RX_CSUM_ENABLED I40EVF_FLAG_RX_CSUM_ENABLED 225 /* flags for admin queue service task */ 226 u32 aq_required; 227 u32 aq_pending; 228 #define I40EVF_FLAG_AQ_ENABLE_QUEUES (u32)(1) 229 #define I40EVF_FLAG_AQ_DISABLE_QUEUES (u32)(1 << 1) 230 #define I40EVF_FLAG_AQ_ADD_MAC_FILTER (u32)(1 << 2) 231 #define I40EVF_FLAG_AQ_ADD_VLAN_FILTER (u32)(1 << 3) 232 #define I40EVF_FLAG_AQ_DEL_MAC_FILTER (u32)(1 << 4) 233 #define I40EVF_FLAG_AQ_DEL_VLAN_FILTER (u32)(1 << 5) 234 #define I40EVF_FLAG_AQ_CONFIGURE_QUEUES (u32)(1 << 6) 235 #define I40EVF_FLAG_AQ_MAP_VECTORS (u32)(1 << 7) 236 #define I40EVF_FLAG_AQ_HANDLE_RESET (u32)(1 << 8) 237 238 /* OS defined structs */ 239 struct net_device *netdev; 240 struct pci_dev *pdev; 241 struct net_device_stats net_stats; 242 243 struct i40e_hw hw; /* defined in i40e_type.h */ 244 245 enum i40evf_state_t state; 246 volatile unsigned long crit_section; 247 248 struct work_struct watchdog_task; 249 bool netdev_registered; 250 bool link_up; 251 enum i40e_virtchnl_ops current_op; 252 struct i40e_virtchnl_vf_resource *vf_res; /* incl. all VSIs */ 253 struct i40e_virtchnl_vsi_resource *vsi_res; /* our LAN VSI */ 254 u16 msg_enable; 255 struct i40e_eth_stats current_stats; 256 struct i40e_vsi vsi; 257 u32 aq_wait_count; 258 }; 259 260 261 /* needed by i40evf_ethtool.c */ 262 extern char i40evf_driver_name[]; 263 extern const char i40evf_driver_version[]; 264 265 int i40evf_up(struct i40evf_adapter *adapter); 266 void i40evf_down(struct i40evf_adapter *adapter); 267 void i40evf_reinit_locked(struct i40evf_adapter *adapter); 268 void i40evf_reset(struct i40evf_adapter *adapter); 269 void i40evf_set_ethtool_ops(struct net_device *netdev); 270 void i40evf_update_stats(struct i40evf_adapter *adapter); 271 void i40evf_reset_interrupt_capability(struct i40evf_adapter *adapter); 272 int i40evf_init_interrupt_scheme(struct i40evf_adapter *adapter); 273 void i40evf_irq_enable_queues(struct i40evf_adapter *adapter, u32 mask); 274 275 void i40e_napi_add_all(struct i40evf_adapter *adapter); 276 void i40e_napi_del_all(struct i40evf_adapter *adapter); 277 278 int i40evf_send_api_ver(struct i40evf_adapter *adapter); 279 int i40evf_verify_api_ver(struct i40evf_adapter *adapter); 280 int i40evf_send_vf_config_msg(struct i40evf_adapter *adapter); 281 int i40evf_get_vf_config(struct i40evf_adapter *adapter); 282 void i40evf_irq_enable(struct i40evf_adapter *adapter, bool flush); 283 void i40evf_configure_queues(struct i40evf_adapter *adapter); 284 void i40evf_deconfigure_queues(struct i40evf_adapter *adapter); 285 void i40evf_enable_queues(struct i40evf_adapter *adapter); 286 void i40evf_disable_queues(struct i40evf_adapter *adapter); 287 void i40evf_map_queues(struct i40evf_adapter *adapter); 288 void i40evf_add_ether_addrs(struct i40evf_adapter *adapter); 289 void i40evf_del_ether_addrs(struct i40evf_adapter *adapter); 290 void i40evf_add_vlans(struct i40evf_adapter *adapter); 291 void i40evf_del_vlans(struct i40evf_adapter *adapter); 292 void i40evf_set_promiscuous(struct i40evf_adapter *adapter, int flags); 293 void i40evf_request_stats(struct i40evf_adapter *adapter); 294 void i40evf_request_reset(struct i40evf_adapter *adapter); 295 void i40evf_virtchnl_completion(struct i40evf_adapter *adapter, 296 enum i40e_virtchnl_ops v_opcode, 297 i40e_status v_retval, u8 *msg, u16 msglen); 298 #endif /* _I40EVF_H_ */ 299