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