| 1 | |
| 2 |
|
| 3 |
|
| 4 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
| 5 |
|
| 6 | #include <linux/bitfield.h>
|
| 7 | #include <linux/delay.h>
|
| 8 | #include <linux/ethtool.h>
|
| 9 | #include <linux/if_vlan.h>
|
| 10 | #include <linux/init.h>
|
| 11 | #include <linux/ipv6.h>
|
| 12 | #include <linux/mii.h>
|
| 13 | #include <linux/module.h>
|
| 14 | #include <linux/netdevice.h>
|
| 15 | #include <linux/pagemap.h>
|
| 16 | #include <linux/pci.h>
|
| 17 | #include <linux/prefetch.h>
|
| 18 | #include <linux/sctp.h>
|
| 19 | #include <linux/slab.h>
|
| 20 | #include <linux/tcp.h>
|
| 21 | #include <linux/types.h>
|
| 22 | #include <linux/vmalloc.h>
|
| 23 | #include <net/checksum.h>
|
| 24 | #include <net/ip6_checksum.h>
|
| 25 | #include "igbvf.h"
|
| 26 |
|
| 27 | char igbvf_driver_name[] = "igbvf";
|
| 28 | static const char igbvf_driver_string[] =
|
| 29 | "Intel(R) Gigabit Virtual Function Network Driver";
|
| 30 | static const char igbvf_copyright[] =
|
| 31 | "Copyright (c) 2009 - 2012 Intel Corporation.";
|
| 32 |
|
| 33 | #define DEFAULT_MSG_ENABLE (NETIF_MSG_DRV|NETIF_MSG_PROBE|NETIF_MSG_LINK)
|
| 34 | static int debug = -1;
|
| 35 | module_param(debug, int, 0);
|
| 36 | MODULE_PARM_DESC(debug, "Debug level (0=none,...,16=all)");
|
| 37 |
|
| 38 | static int igbvf_poll(struct napi_struct *napi, int budget);
|
| 39 | static void igbvf_reset(struct igbvf_adapter *);
|
| 40 | static void igbvf_set_interrupt_capability(struct igbvf_adapter *);
|
| 41 | static void igbvf_reset_interrupt_capability(struct igbvf_adapter *);
|
| 42 |
|
| 43 | static struct igbvf_info igbvf_vf_info = {
|
| 44 | .mac = e1000_vfadapt,
|
| 45 | .flags = 0,
|
| 46 | .pba = 10,
|
| 47 | .init_ops = e1000_init_function_pointers_vf,
|
| 48 | };
|
| 49 |
|
| 50 | static struct igbvf_info igbvf_i350_vf_info = {
|
| 51 | .mac = e1000_vfadapt_i350,
|
| 52 | .flags = 0,
|
| 53 | .pba = 10,
|
| 54 | .init_ops = e1000_init_function_pointers_vf,
|
| 55 | };
|
| 56 |
|
| 57 | static const struct igbvf_info *igbvf_info_tbl[] = {
|
| 58 | [board_vf] = &igbvf_vf_info,
|
| 59 | [board_i350_vf] = &igbvf_i350_vf_info,
|
| 60 | };
|
| 61 |
|
| 62 | |
| 63 | * igbvf_desc_unused - calculate if we have unused descriptors
|
| 64 | * @ring: address of receive ring structure
|
| 65 | *
|
| 66 | static int igbvf_desc_unused(struct igbvf_ring *ring)
|
| 67 | {
|
| 68 | if (ring->next_to_clean > ring->next_to_use)
|
| 69 | return ring->next_to_clean - ring->next_to_use - 1;
|
| 70 |
|
| 71 | return ring->count + ring->next_to_clean - ring->next_to_use - 1;
|
| 72 | }
|
| 73 |
|
| 74 | |
| 75 | * igbvf_receive_skb - helper function to handle Rx indications
|
| 76 | * @adapter: board private structure
|
| 77 | * @netdev: pointer to netdev struct
|
| 78 | * @skb: skb to indicate to stack
|
| 79 | * @status: descriptor status field as written by hardware
|
| 80 | * @vlan: descriptor vlan field as written by hardware (no le/be conversion)
|
| 81 | * @skb: pointer to sk_buff to be indicated to stack
|
| 82 | *
|
| 83 | static void igbvf_receive_skb(struct igbvf_adapter *adapter,
|
| 84 | struct net_device *netdev,
|
| 85 | struct sk_buff *skb,
|
| 86 | u32 status, __le16 vlan)
|
| 87 | {
|
| 88 | u16 vid;
|
| 89 |
|
| 90 | if (status & E1000_RXD_STAT_VP) {
|
| 91 | if ((adapter->flags & IGBVF_FLAG_RX_LB_VLAN_BSWAP) &&
|
| 92 | (status & E1000_RXDEXT_STATERR_LB))
|
| 93 | vid = be16_to_cpu((__force __be16)vlan) & E1000_RXD_SPC_VLAN_MASK;
|
| 94 | else
|
| 95 | vid = le16_to_cpu(vlan) & E1000_RXD_SPC_VLAN_MASK;
|
| 96 | if (test_bit(vid, adapter->active_vlans))
|
| 97 | __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vid);
|
| 98 | }
|
| 99 |
|
| 100 | napi_gro_receive(&adapter->rx_ring->napi, skb);
|
| 101 | }
|
| 102 |
|
| 103 | static inline void igbvf_rx_checksum_adv(struct igbvf_adapter *adapter,
|
| 104 | u32 status_err, struct sk_buff *skb)
|
| 105 | {
|
| 106 | skb_checksum_none_assert(skb);
|
| 107 |
|
| 108 |
|
| 109 | if ((status_err & E1000_RXD_STAT_IXSM) ||
|
| 110 | (adapter->flags & IGBVF_FLAG_RX_CSUM_DISABLED))
|
| 111 | return;
|
| 112 |
|
| 113 |
|
| 114 | if (status_err &
|
| 115 | (E1000_RXDEXT_STATERR_TCPE | E1000_RXDEXT_STATERR_IPE)) {
|
| 116 |
|
| 117 | adapter->hw_csum_err++;
|
| 118 | return;
|
| 119 | }
|
| 120 |
|
| 121 |
|
| 122 | if (status_err & (E1000_RXD_STAT_TCPCS | E1000_RXD_STAT_UDPCS))
|
| 123 | skb->ip_summed = CHECKSUM_UNNECESSARY;
|
| 124 |
|
| 125 | adapter->hw_csum_good++;
|
| 126 | }
|
| 127 |
|
| 128 | |
| 129 | * igbvf_alloc_rx_buffers - Replace used receive buffers; packet split
|
| 130 | * @rx_ring: address of ring structure to repopulate
|
| 131 | * @cleaned_count: number of buffers to repopulate
|
| 132 | *
|
| 133 | static void igbvf_alloc_rx_buffers(struct igbvf_ring *rx_ring,
|
| 134 | int cleaned_count)
|
| 135 | {
|
| 136 | struct igbvf_adapter *adapter = rx_ring->adapter;
|
| 137 | struct net_device *netdev = adapter->netdev;
|
| 138 | struct pci_dev *pdev = adapter->pdev;
|
| 139 | union e1000_adv_rx_desc *rx_desc;
|
| 140 | struct igbvf_buffer *buffer_info;
|
| 141 | struct sk_buff *skb;
|
| 142 | unsigned int i;
|
| 143 | int bufsz;
|
| 144 |
|
| 145 | i = rx_ring->next_to_use;
|
| 146 | buffer_info = &rx_ring->buffer_info[i];
|
| 147 |
|
| 148 | if (adapter->rx_ps_hdr_size)
|
| 149 | bufsz = adapter->rx_ps_hdr_size;
|
| 150 | else
|
| 151 | bufsz = adapter->rx_buffer_len;
|
| 152 |
|
| 153 | while (cleaned_count--) {
|
| 154 | rx_desc = IGBVF_RX_DESC_ADV(*rx_ring, i);
|
| 155 |
|
| 156 | if (adapter->rx_ps_hdr_size && !buffer_info->page_dma) {
|
| 157 | if (!buffer_info->page) {
|
| 158 | buffer_info->page = alloc_page(GFP_ATOMIC);
|
| 159 | if (!buffer_info->page) {
|
| 160 | adapter->alloc_rx_buff_failed++;
|
| 161 | goto no_buffers;
|
| 162 | }
|
| 163 | buffer_info->page_offset = 0;
|
| 164 | } else {
|
| 165 | buffer_info->page_offset ^= PAGE_SIZE / 2;
|
| 166 | }
|
| 167 | buffer_info->page_dma =
|
| 168 | dma_map_page(&pdev->dev, buffer_info->page,
|
| 169 | buffer_info->page_offset,
|
| 170 | PAGE_SIZE / 2,
|
| 171 | DMA_FROM_DEVICE);
|
| 172 | if (dma_mapping_error(&pdev->dev,
|
| 173 | buffer_info->page_dma)) {
|
| 174 | __free_page(buffer_info->page);
|
| 175 | buffer_info->page = NULL;
|
| 176 | dev_err(&pdev->dev, "RX DMA map failed\n");
|
| 177 | break;
|
| 178 | }
|
| 179 | }
|
| 180 |
|
| 181 | if (!buffer_info->skb) {
|
| 182 | skb = netdev_alloc_skb_ip_align(netdev, bufsz);
|
| 183 | if (!skb) {
|
| 184 | adapter->alloc_rx_buff_failed++;
|
| 185 | goto no_buffers;
|
| 186 | }
|
| 187 |
|
| 188 | buffer_info->skb = skb;
|
| 189 | buffer_info->dma = dma_map_single(&pdev->dev, skb->data,
|
| 190 | bufsz,
|
| 191 | DMA_FROM_DEVICE);
|
| 192 | if (dma_mapping_error(&pdev->dev, buffer_info->dma)) {
|
| 193 | dev_kfree_skb(buffer_info->skb);
|
| 194 | buffer_info->skb = NULL;
|
| 195 | dev_err(&pdev->dev, "RX DMA map failed\n");
|
| 196 | goto no_buffers;
|
| 197 | }
|
| 198 | }
|
| 199 | |
| 200 | * each write-back erases this info.
|
| 201 |
|
| 202 | if (adapter->rx_ps_hdr_size) {
|
| 203 | rx_desc->read.pkt_addr =
|
| 204 | cpu_to_le64(buffer_info->page_dma);
|
| 205 | rx_desc->read.hdr_addr = cpu_to_le64(buffer_info->dma);
|
| 206 | } else {
|
| 207 | rx_desc->read.pkt_addr = cpu_to_le64(buffer_info->dma);
|
| 208 | rx_desc->read.hdr_addr = 0;
|
| 209 | }
|
| 210 |
|
| 211 | i++;
|
| 212 | if (i == rx_ring->count)
|
| 213 | i = 0;
|
| 214 | buffer_info = &rx_ring->buffer_info[i];
|
| 215 | }
|
| 216 |
|
| 217 | no_buffers:
|
| 218 | if (rx_ring->next_to_use != i) {
|
| 219 | rx_ring->next_to_use = i;
|
| 220 | if (i == 0)
|
| 221 | i = (rx_ring->count - 1);
|
| 222 | else
|
| 223 | i--;
|
| 224 |
|
| 225 | |
| 226 | * know there are new descriptors to fetch. (Only
|
| 227 | * applicable for weak-ordered memory model archs,
|
| 228 | * such as IA-64).
|
| 229 |
|
| 230 | wmb();
|
| 231 | writel(i, adapter->hw.hw_addr + rx_ring->tail);
|
| 232 | }
|
| 233 | }
|
| 234 |
|
| 235 | |
| 236 | * igbvf_clean_rx_irq - Send received data up the network stack; legacy
|
| 237 | * @adapter: board private structure
|
| 238 | * @work_done: output parameter used to indicate completed work
|
| 239 | * @work_to_do: input parameter setting limit of work
|
| 240 | *
|
| 241 | * the return value indicates whether actual cleaning was done, there
|
| 242 | * is no guarantee that everything was cleaned
|
| 243 | *
|
| 244 | static bool igbvf_clean_rx_irq(struct igbvf_adapter *adapter,
|
| 245 | int *work_done, int work_to_do)
|
| 246 | {
|
| 247 | struct igbvf_ring *rx_ring = adapter->rx_ring;
|
| 248 | struct net_device *netdev = adapter->netdev;
|
| 249 | struct pci_dev *pdev = adapter->pdev;
|
| 250 | union e1000_adv_rx_desc *rx_desc, *next_rxd;
|
| 251 | struct igbvf_buffer *buffer_info, *next_buffer;
|
| 252 | struct sk_buff *skb;
|
| 253 | bool cleaned = false;
|
| 254 | int cleaned_count = 0;
|
| 255 | unsigned int total_bytes = 0, total_packets = 0;
|
| 256 | unsigned int i;
|
| 257 | u32 length, hlen, staterr;
|
| 258 |
|
| 259 | i = rx_ring->next_to_clean;
|
| 260 | rx_desc = IGBVF_RX_DESC_ADV(*rx_ring, i);
|
| 261 | staterr = le32_to_cpu(rx_desc->wb.upper.status_error);
|
| 262 |
|
| 263 | while (staterr & E1000_RXD_STAT_DD) {
|
| 264 | if (*work_done >= work_to_do)
|
| 265 | break;
|
| 266 | (*work_done)++;
|
| 267 | rmb();
|
| 268 |
|
| 269 | buffer_info = &rx_ring->buffer_info[i];
|
| 270 |
|
| 271 | |
| 272 | * if it parses the (NFS, of course) header to be larger. In
|
| 273 | * that case, it fills the header buffer and spills the rest
|
| 274 | * into the page.
|
| 275 |
|
| 276 | hlen = le16_get_bits(rx_desc->wb.lower.lo_dword.hs_rss.hdr_info,
|
| 277 | E1000_RXDADV_HDRBUFLEN_MASK);
|
| 278 | if (hlen > adapter->rx_ps_hdr_size)
|
| 279 | hlen = adapter->rx_ps_hdr_size;
|
| 280 |
|
| 281 | length = le16_to_cpu(rx_desc->wb.upper.length);
|
| 282 | cleaned = true;
|
| 283 | cleaned_count++;
|
| 284 |
|
| 285 | skb = buffer_info->skb;
|
| 286 | prefetch(skb->data - NET_IP_ALIGN);
|
| 287 | buffer_info->skb = NULL;
|
| 288 | if (!adapter->rx_ps_hdr_size) {
|
| 289 | dma_unmap_single(&pdev->dev, buffer_info->dma,
|
| 290 | adapter->rx_buffer_len,
|
| 291 | DMA_FROM_DEVICE);
|
| 292 | buffer_info->dma = 0;
|
| 293 | skb_put(skb, length);
|
| 294 | goto send_up;
|
| 295 | }
|
| 296 |
|
| 297 | if (!skb_shinfo(skb)->nr_frags) {
|
| 298 | dma_unmap_single(&pdev->dev, buffer_info->dma,
|
| 299 | adapter->rx_ps_hdr_size,
|
| 300 | DMA_FROM_DEVICE);
|
| 301 | buffer_info->dma = 0;
|
| 302 | skb_put(skb, hlen);
|
| 303 | }
|
| 304 |
|
| 305 | if (length) {
|
| 306 | dma_unmap_page(&pdev->dev, buffer_info->page_dma,
|
| 307 | PAGE_SIZE / 2,
|
| 308 | DMA_FROM_DEVICE);
|
| 309 | buffer_info->page_dma = 0;
|
| 310 |
|
| 311 | skb_fill_page_desc(skb, skb_shinfo(skb)->nr_frags,
|
| 312 | buffer_info->page,
|
| 313 | buffer_info->page_offset,
|
| 314 | length);
|
| 315 |
|
| 316 | if ((adapter->rx_buffer_len > (PAGE_SIZE / 2)) ||
|
| 317 | (page_count(buffer_info->page) != 1))
|
| 318 | buffer_info->page = NULL;
|
| 319 | else
|
| 320 | get_page(buffer_info->page);
|
| 321 |
|
| 322 | skb->len += length;
|
| 323 | skb->data_len += length;
|
| 324 | skb->truesize += PAGE_SIZE / 2;
|
| 325 | }
|
| 326 | send_up:
|
| 327 | i++;
|
| 328 | if (i == rx_ring->count)
|
| 329 | i = 0;
|
| 330 | next_rxd = IGBVF_RX_DESC_ADV(*rx_ring, i);
|
| 331 | prefetch(next_rxd);
|
| 332 | next_buffer = &rx_ring->buffer_info[i];
|
| 333 |
|
| 334 | if (!(staterr & E1000_RXD_STAT_EOP)) {
|
| 335 | buffer_info->skb = next_buffer->skb;
|
| 336 | buffer_info->dma = next_buffer->dma;
|
| 337 | next_buffer->skb = skb;
|
| 338 | next_buffer->dma = 0;
|
| 339 | goto next_desc;
|
| 340 | }
|
| 341 |
|
| 342 | if (staterr & E1000_RXDEXT_ERR_FRAME_ERR_MASK) {
|
| 343 | dev_kfree_skb_irq(skb);
|
| 344 | goto next_desc;
|
| 345 | }
|
| 346 |
|
| 347 | total_bytes += skb->len;
|
| 348 | total_packets++;
|
| 349 |
|
| 350 | igbvf_rx_checksum_adv(adapter, staterr, skb);
|
| 351 |
|
| 352 | skb->protocol = eth_type_trans(skb, netdev);
|
| 353 |
|
| 354 | igbvf_receive_skb(adapter, netdev, skb, staterr,
|
| 355 | rx_desc->wb.upper.vlan);
|
| 356 |
|
| 357 | next_desc:
|
| 358 | rx_desc->wb.upper.status_error = 0;
|
| 359 |
|
| 360 |
|
| 361 | if (cleaned_count >= IGBVF_RX_BUFFER_WRITE) {
|
| 362 | igbvf_alloc_rx_buffers(rx_ring, cleaned_count);
|
| 363 | cleaned_count = 0;
|
| 364 | }
|
| 365 |
|
| 366 |
|
| 367 | rx_desc = next_rxd;
|
| 368 | buffer_info = next_buffer;
|
| 369 |
|
| 370 | staterr = le32_to_cpu(rx_desc->wb.upper.status_error);
|
| 371 | }
|
| 372 |
|
| 373 | rx_ring->next_to_clean = i;
|
| 374 | cleaned_count = igbvf_desc_unused(rx_ring);
|
| 375 |
|
| 376 | if (cleaned_count)
|
| 377 | igbvf_alloc_rx_buffers(rx_ring, cleaned_count);
|
| 378 |
|
| 379 | adapter->total_rx_packets += total_packets;
|
| 380 | adapter->total_rx_bytes += total_bytes;
|
| 381 | netdev->stats.rx_bytes += total_bytes;
|
| 382 | netdev->stats.rx_packets += total_packets;
|
| 383 | return cleaned;
|
| 384 | }
|
| 385 |
|
| 386 | static void igbvf_put_txbuf(struct igbvf_adapter *adapter,
|
| 387 | struct igbvf_buffer *buffer_info)
|
| 388 | {
|
| 389 | if (buffer_info->dma) {
|
| 390 | if (buffer_info->mapped_as_page)
|
| 391 | dma_unmap_page(&adapter->pdev->dev,
|
| 392 | buffer_info->dma,
|
| 393 | buffer_info->length,
|
| 394 | DMA_TO_DEVICE);
|
| 395 | else
|
| 396 | dma_unmap_single(&adapter->pdev->dev,
|
| 397 | buffer_info->dma,
|
| 398 | buffer_info->length,
|
| 399 | DMA_TO_DEVICE);
|
| 400 | buffer_info->dma = 0;
|
| 401 | }
|
| 402 | if (buffer_info->skb) {
|
| 403 | dev_kfree_skb_any(buffer_info->skb);
|
| 404 | buffer_info->skb = NULL;
|
| 405 | }
|
| 406 | buffer_info->time_stamp = 0;
|
| 407 | }
|
| 408 |
|
| 409 | |
| 410 | * igbvf_setup_tx_resources - allocate Tx resources (Descriptors)
|
| 411 | * @adapter: board private structure
|
| 412 | * @tx_ring: ring being initialized
|
| 413 | *
|
| 414 | * Return 0 on success, negative on failure
|
| 415 | *
|
| 416 | int igbvf_setup_tx_resources(struct igbvf_adapter *adapter,
|
| 417 | struct igbvf_ring *tx_ring)
|
| 418 | {
|
| 419 | struct pci_dev *pdev = adapter->pdev;
|
| 420 | int size;
|
| 421 |
|
| 422 | size = sizeof(struct igbvf_buffer) * tx_ring->count;
|
| 423 | tx_ring->buffer_info = vzalloc(size);
|
| 424 | if (!tx_ring->buffer_info)
|
| 425 | goto err;
|
| 426 |
|
| 427 |
|
| 428 | tx_ring->size = tx_ring->count * sizeof(union e1000_adv_tx_desc);
|
| 429 | tx_ring->size = ALIGN(tx_ring->size, 4096);
|
| 430 |
|
| 431 | tx_ring->desc = dma_alloc_coherent(&pdev->dev, tx_ring->size,
|
| 432 | &tx_ring->dma, GFP_KERNEL);
|
| 433 | if (!tx_ring->desc)
|
| 434 | goto err;
|
| 435 |
|
| 436 | tx_ring->adapter = adapter;
|
| 437 | tx_ring->next_to_use = 0;
|
| 438 | tx_ring->next_to_clean = 0;
|
| 439 |
|
| 440 | return 0;
|
| 441 | err:
|
| 442 | vfree(tx_ring->buffer_info);
|
| 443 | dev_err(&adapter->pdev->dev,
|
| 444 | "Unable to allocate memory for the transmit descriptor ring\n");
|
| 445 | return -ENOMEM;
|
| 446 | }
|
| 447 |
|
| 448 | |
| 449 | * igbvf_setup_rx_resources - allocate Rx resources (Descriptors)
|
| 450 | * @adapter: board private structure
|
| 451 | * @rx_ring: ring being initialized
|
| 452 | *
|
| 453 | * Returns 0 on success, negative on failure
|
| 454 | *
|
| 455 | int igbvf_setup_rx_resources(struct igbvf_adapter *adapter,
|
| 456 | struct igbvf_ring *rx_ring)
|
| 457 | {
|
| 458 | struct pci_dev *pdev = adapter->pdev;
|
| 459 | int size, desc_len;
|
| 460 |
|
| 461 | size = sizeof(struct igbvf_buffer) * rx_ring->count;
|
| 462 | rx_ring->buffer_info = vzalloc(size);
|
| 463 | if (!rx_ring->buffer_info)
|
| 464 | goto err;
|
| 465 |
|
| 466 | desc_len = sizeof(union e1000_adv_rx_desc);
|
| 467 |
|
| 468 |
|
| 469 | rx_ring->size = rx_ring->count * desc_len;
|
| 470 | rx_ring->size = ALIGN(rx_ring->size, 4096);
|
| 471 |
|
| 472 | rx_ring->desc = dma_alloc_coherent(&pdev->dev, rx_ring->size,
|
| 473 | &rx_ring->dma, GFP_KERNEL);
|
| 474 | if (!rx_ring->desc)
|
| 475 | goto err;
|
| 476 |
|
| 477 | rx_ring->next_to_clean = 0;
|
| 478 | rx_ring->next_to_use = 0;
|
| 479 |
|
| 480 | rx_ring->adapter = adapter;
|
| 481 |
|
| 482 | return 0;
|
| 483 |
|
| 484 | err:
|
| 485 | vfree(rx_ring->buffer_info);
|
| 486 | rx_ring->buffer_info = NULL;
|
| 487 | dev_err(&adapter->pdev->dev,
|
| 488 | "Unable to allocate memory for the receive descriptor ring\n");
|
| 489 | return -ENOMEM;
|
| 490 | }
|
| 491 |
|
| 492 | |
| 493 | * igbvf_clean_tx_ring - Free Tx Buffers
|
| 494 | * @tx_ring: ring to be cleaned
|
| 495 | *
|
| 496 | static void igbvf_clean_tx_ring(struct igbvf_ring *tx_ring)
|
| 497 | {
|
| 498 | struct igbvf_adapter *adapter = tx_ring->adapter;
|
| 499 | struct igbvf_buffer *buffer_info;
|
| 500 | unsigned long size;
|
| 501 | unsigned int i;
|
| 502 |
|
| 503 | if (!tx_ring->buffer_info)
|
| 504 | return;
|
| 505 |
|
| 506 |
|
| 507 | for (i = 0; i < tx_ring->count; i++) {
|
| 508 | buffer_info = &tx_ring->buffer_info[i];
|
| 509 | igbvf_put_txbuf(adapter, buffer_info);
|
| 510 | }
|
| 511 |
|
| 512 | size = sizeof(struct igbvf_buffer) * tx_ring->count;
|
| 513 | memset(tx_ring->buffer_info, 0, size);
|
| 514 |
|
| 515 |
|
| 516 | memset(tx_ring->desc, 0, tx_ring->size);
|
| 517 |
|
| 518 | tx_ring->next_to_use = 0;
|
| 519 | tx_ring->next_to_clean = 0;
|
| 520 |
|
| 521 | writel(0, adapter->hw.hw_addr + tx_ring->head);
|
| 522 | writel(0, adapter->hw.hw_addr + tx_ring->tail);
|
| 523 | }
|
| 524 |
|
| 525 | |
| 526 | * igbvf_free_tx_resources - Free Tx Resources per Queue
|
| 527 | * @tx_ring: ring to free resources from
|
| 528 | *
|
| 529 | * Free all transmit software resources
|
| 530 | *
|
| 531 | void igbvf_free_tx_resources(struct igbvf_ring *tx_ring)
|
| 532 | {
|
| 533 | struct pci_dev *pdev = tx_ring->adapter->pdev;
|
| 534 |
|
| 535 | igbvf_clean_tx_ring(tx_ring);
|
| 536 |
|
| 537 | vfree(tx_ring->buffer_info);
|
| 538 | tx_ring->buffer_info = NULL;
|
| 539 |
|
| 540 | dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc,
|
| 541 | tx_ring->dma);
|
| 542 |
|
| 543 | tx_ring->desc = NULL;
|
| 544 | }
|
| 545 |
|
| 546 | |
| 547 | * igbvf_clean_rx_ring - Free Rx Buffers per Queue
|
| 548 | * @rx_ring: ring structure pointer to free buffers from
|
| 549 | *
|
| 550 | static void igbvf_clean_rx_ring(struct igbvf_ring *rx_ring)
|
| 551 | {
|
| 552 | struct igbvf_adapter *adapter = rx_ring->adapter;
|
| 553 | struct igbvf_buffer *buffer_info;
|
| 554 | struct pci_dev *pdev = adapter->pdev;
|
| 555 | unsigned long size;
|
| 556 | unsigned int i;
|
| 557 |
|
| 558 | if (!rx_ring->buffer_info)
|
| 559 | return;
|
| 560 |
|
| 561 |
|
| 562 | for (i = 0; i < rx_ring->count; i++) {
|
| 563 | buffer_info = &rx_ring->buffer_info[i];
|
| 564 | if (buffer_info->dma) {
|
| 565 | if (adapter->rx_ps_hdr_size) {
|
| 566 | dma_unmap_single(&pdev->dev, buffer_info->dma,
|
| 567 | adapter->rx_ps_hdr_size,
|
| 568 | DMA_FROM_DEVICE);
|
| 569 | } else {
|
| 570 | dma_unmap_single(&pdev->dev, buffer_info->dma,
|
| 571 | adapter->rx_buffer_len,
|
| 572 | DMA_FROM_DEVICE);
|
| 573 | }
|
| 574 | buffer_info->dma = 0;
|
| 575 | }
|
| 576 |
|
| 577 | if (buffer_info->skb) {
|
| 578 | dev_kfree_skb(buffer_info->skb);
|
| 579 | buffer_info->skb = NULL;
|
| 580 | }
|
| 581 |
|
| 582 | if (buffer_info->page) {
|
| 583 | if (buffer_info->page_dma)
|
| 584 | dma_unmap_page(&pdev->dev,
|
| 585 | buffer_info->page_dma,
|
| 586 | PAGE_SIZE / 2,
|
| 587 | DMA_FROM_DEVICE);
|
| 588 | put_page(buffer_info->page);
|
| 589 | buffer_info->page = NULL;
|
| 590 | buffer_info->page_dma = 0;
|
| 591 | buffer_info->page_offset = 0;
|
| 592 | }
|
| 593 | }
|
| 594 |
|
| 595 | size = sizeof(struct igbvf_buffer) * rx_ring->count;
|
| 596 | memset(rx_ring->buffer_info, 0, size);
|
| 597 |
|
| 598 |
|
| 599 | memset(rx_ring->desc, 0, rx_ring->size);
|
| 600 |
|
| 601 | rx_ring->next_to_clean = 0;
|
| 602 | rx_ring->next_to_use = 0;
|
| 603 |
|
| 604 | writel(0, adapter->hw.hw_addr + rx_ring->head);
|
| 605 | writel(0, adapter->hw.hw_addr + rx_ring->tail);
|
| 606 | }
|
| 607 |
|
| 608 | |
| 609 | * igbvf_free_rx_resources - Free Rx Resources
|
| 610 | * @rx_ring: ring to clean the resources from
|
| 611 | *
|
| 612 | * Free all receive software resources
|
| 613 | *
|
| 614 |
|
| 615 | void igbvf_free_rx_resources(struct igbvf_ring *rx_ring)
|
| 616 | {
|
| 617 | struct pci_dev *pdev = rx_ring->adapter->pdev;
|
| 618 |
|
| 619 | igbvf_clean_rx_ring(rx_ring);
|
| 620 |
|
| 621 | vfree(rx_ring->buffer_info);
|
| 622 | rx_ring->buffer_info = NULL;
|
| 623 |
|
| 624 | dma_free_coherent(&pdev->dev, rx_ring->size, rx_ring->desc,
|
| 625 | rx_ring->dma);
|
| 626 | rx_ring->desc = NULL;
|
| 627 | }
|
| 628 |
|
| 629 | |
| 630 | * igbvf_update_itr - update the dynamic ITR value based on statistics
|
| 631 | * @adapter: pointer to adapter
|
| 632 | * @itr_setting: current adapter->itr
|
| 633 | * @packets: the number of packets during this measurement interval
|
| 634 | * @bytes: the number of bytes during this measurement interval
|
| 635 | *
|
| 636 | * Stores a new ITR value based on packets and byte counts during the last
|
| 637 | * interrupt. The advantage of per interrupt computation is faster updates
|
| 638 | * and more accurate ITR for the current traffic pattern. Constants in this
|
| 639 | * function were computed based on theoretical maximum wire speed and thresholds
|
| 640 | * were set based on testing data as well as attempting to minimize response
|
| 641 | * time while increasing bulk throughput.
|
| 642 | *
|
| 643 | static enum latency_range igbvf_update_itr(struct igbvf_adapter *adapter,
|
| 644 | enum latency_range itr_setting,
|
| 645 | int packets, int bytes)
|
| 646 | {
|
| 647 | enum latency_range retval = itr_setting;
|
| 648 |
|
| 649 | if (packets == 0)
|
| 650 | goto update_itr_done;
|
| 651 |
|
| 652 | switch (itr_setting) {
|
| 653 | case lowest_latency:
|
| 654 |
|
| 655 | if (bytes/packets > 8000)
|
| 656 | retval = bulk_latency;
|
| 657 | else if ((packets < 5) && (bytes > 512))
|
| 658 | retval = low_latency;
|
| 659 | break;
|
| 660 | case low_latency:
|
| 661 | if (bytes > 10000) {
|
| 662 |
|
| 663 | if (bytes/packets > 8000)
|
| 664 | retval = bulk_latency;
|
| 665 | else if ((packets < 10) || ((bytes/packets) > 1200))
|
| 666 | retval = bulk_latency;
|
| 667 | else if ((packets > 35))
|
| 668 | retval = lowest_latency;
|
| 669 | } else if (bytes/packets > 2000) {
|
| 670 | retval = bulk_latency;
|
| 671 | } else if (packets <= 2 && bytes < 512) {
|
| 672 | retval = lowest_latency;
|
| 673 | }
|
| 674 | break;
|
| 675 | case bulk_latency:
|
| 676 | if (bytes > 25000) {
|
| 677 | if (packets > 35)
|
| 678 | retval = low_latency;
|
| 679 | } else if (bytes < 6000) {
|
| 680 | retval = low_latency;
|
| 681 | }
|
| 682 | break;
|
| 683 | default:
|
| 684 | break;
|
| 685 | }
|
| 686 |
|
| 687 | update_itr_done:
|
| 688 | return retval;
|
| 689 | }
|
| 690 |
|
| 691 | static int igbvf_range_to_itr(enum latency_range current_range)
|
| 692 | {
|
| 693 | int new_itr;
|
| 694 |
|
| 695 | switch (current_range) {
|
| 696 |
|
| 697 | case lowest_latency:
|
| 698 | new_itr = IGBVF_70K_ITR;
|
| 699 | break;
|
| 700 | case low_latency:
|
| 701 | new_itr = IGBVF_20K_ITR;
|
| 702 | break;
|
| 703 | case bulk_latency:
|
| 704 | new_itr = IGBVF_4K_ITR;
|
| 705 | break;
|
| 706 | default:
|
| 707 | new_itr = IGBVF_START_ITR;
|
| 708 | break;
|
| 709 | }
|
| 710 | return new_itr;
|
| 711 | }
|
| 712 |
|
| 713 | static void igbvf_set_itr(struct igbvf_adapter *adapter)
|
| 714 | {
|
| 715 | u32 new_itr;
|
| 716 |
|
| 717 | adapter->tx_ring->itr_range =
|
| 718 | igbvf_update_itr(adapter,
|
| 719 | adapter->tx_ring->itr_val,
|
| 720 | adapter->total_tx_packets,
|
| 721 | adapter->total_tx_bytes);
|
| 722 |
|
| 723 |
|
| 724 | if (adapter->requested_itr == 3 &&
|
| 725 | adapter->tx_ring->itr_range == lowest_latency)
|
| 726 | adapter->tx_ring->itr_range = low_latency;
|
| 727 |
|
| 728 | new_itr = igbvf_range_to_itr(adapter->tx_ring->itr_range);
|
| 729 |
|
| 730 | if (new_itr != adapter->tx_ring->itr_val) {
|
| 731 | u32 current_itr = adapter->tx_ring->itr_val;
|
| 732 | |
| 733 | * by adding intermediate steps when interrupt rate is
|
| 734 | * increasing
|
| 735 |
|
| 736 | new_itr = new_itr > current_itr ?
|
| 737 | min(current_itr + (new_itr >> 2), new_itr) :
|
| 738 | new_itr;
|
| 739 | adapter->tx_ring->itr_val = new_itr;
|
| 740 |
|
| 741 | adapter->tx_ring->set_itr = 1;
|
| 742 | }
|
| 743 |
|
| 744 | adapter->rx_ring->itr_range =
|
| 745 | igbvf_update_itr(adapter, adapter->rx_ring->itr_val,
|
| 746 | adapter->total_rx_packets,
|
| 747 | adapter->total_rx_bytes);
|
| 748 | if (adapter->requested_itr == 3 &&
|
| 749 | adapter->rx_ring->itr_range == lowest_latency)
|
| 750 | adapter->rx_ring->itr_range = low_latency;
|
| 751 |
|
| 752 | new_itr = igbvf_range_to_itr(adapter->rx_ring->itr_range);
|
| 753 |
|
| 754 | if (new_itr != adapter->rx_ring->itr_val) {
|
| 755 | u32 current_itr = adapter->rx_ring->itr_val;
|
| 756 |
|
| 757 | new_itr = new_itr > current_itr ?
|
| 758 | min(current_itr + (new_itr >> 2), new_itr) :
|
| 759 | new_itr;
|
| 760 | adapter->rx_ring->itr_val = new_itr;
|
| 761 |
|
| 762 | adapter->rx_ring->set_itr = 1;
|
| 763 | }
|
| 764 | }
|
| 765 |
|
| 766 | |
| 767 | * igbvf_clean_tx_irq - Reclaim resources after transmit completes
|
| 768 | * @tx_ring: ring structure to clean descriptors from
|
| 769 | *
|
| 770 | * returns true if ring is completely cleaned
|
| 771 | *
|
| 772 | static bool igbvf_clean_tx_irq(struct igbvf_ring *tx_ring)
|
| 773 | {
|
| 774 | struct igbvf_adapter *adapter = tx_ring->adapter;
|
| 775 | struct net_device *netdev = adapter->netdev;
|
| 776 | struct igbvf_buffer *buffer_info;
|
| 777 | struct sk_buff *skb;
|
| 778 | union e1000_adv_tx_desc *tx_desc, *eop_desc;
|
| 779 | unsigned int total_bytes = 0, total_packets = 0;
|
| 780 | unsigned int i, count = 0;
|
| 781 | bool cleaned = false;
|
| 782 |
|
| 783 | i = tx_ring->next_to_clean;
|
| 784 | buffer_info = &tx_ring->buffer_info[i];
|
| 785 | eop_desc = buffer_info->next_to_watch;
|
| 786 |
|
| 787 | do {
|
| 788 |
|
| 789 | if (!eop_desc)
|
| 790 | break;
|
| 791 |
|
| 792 |
|
| 793 | smp_rmb();
|
| 794 |
|
| 795 |
|
| 796 | if (!(eop_desc->wb.status & cpu_to_le32(E1000_TXD_STAT_DD)))
|
| 797 | break;
|
| 798 |
|
| 799 |
|
| 800 | buffer_info->next_to_watch = NULL;
|
| 801 |
|
| 802 | for (cleaned = false; !cleaned; count++) {
|
| 803 | tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i);
|
| 804 | cleaned = (tx_desc == eop_desc);
|
| 805 | skb = buffer_info->skb;
|
| 806 |
|
| 807 | if (skb) {
|
| 808 | unsigned int segs, bytecount;
|
| 809 |
|
| 810 |
|
| 811 | segs = skb_shinfo(skb)->gso_segs ?: 1;
|
| 812 |
|
| 813 | bytecount = ((segs - 1) * skb_headlen(skb)) +
|
| 814 | skb->len;
|
| 815 | total_packets += segs;
|
| 816 | total_bytes += bytecount;
|
| 817 | }
|
| 818 |
|
| 819 | igbvf_put_txbuf(adapter, buffer_info);
|
| 820 | tx_desc->wb.status = 0;
|
| 821 |
|
| 822 | i++;
|
| 823 | if (i == tx_ring->count)
|
| 824 | i = 0;
|
| 825 |
|
| 826 | buffer_info = &tx_ring->buffer_info[i];
|
| 827 | }
|
| 828 |
|
| 829 | eop_desc = buffer_info->next_to_watch;
|
| 830 | } while (count < tx_ring->count);
|
| 831 |
|
| 832 | tx_ring->next_to_clean = i;
|
| 833 |
|
| 834 | if (unlikely(count && netif_carrier_ok(netdev) &&
|
| 835 | igbvf_desc_unused(tx_ring) >= IGBVF_TX_QUEUE_WAKE)) {
|
| 836 | |
| 837 | * sees the new next_to_clean.
|
| 838 |
|
| 839 | smp_mb();
|
| 840 | if (netif_queue_stopped(netdev) &&
|
| 841 | !(test_bit(__IGBVF_DOWN, &adapter->state))) {
|
| 842 | netif_wake_queue(netdev);
|
| 843 | ++adapter->restart_queue;
|
| 844 | }
|
| 845 | }
|
| 846 |
|
| 847 | netdev->stats.tx_bytes += total_bytes;
|
| 848 | netdev->stats.tx_packets += total_packets;
|
| 849 | return count < tx_ring->count;
|
| 850 | }
|
| 851 |
|
| 852 | static irqreturn_t igbvf_msix_other(int irq, void *data)
|
| 853 | {
|
| 854 | struct net_device *netdev = data;
|
| 855 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 856 | struct e1000_hw *hw = &adapter->hw;
|
| 857 |
|
| 858 | hw->mac.get_link_status = 1;
|
| 859 | if (!test_bit(__IGBVF_DOWN, &adapter->state))
|
| 860 | mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
| 861 |
|
| 862 | ew32(EIMS, adapter->eims_other);
|
| 863 |
|
| 864 | return IRQ_HANDLED;
|
| 865 | }
|
| 866 |
|
| 867 | static irqreturn_t igbvf_intr_msix_tx(int irq, void *data)
|
| 868 | {
|
| 869 | struct net_device *netdev = data;
|
| 870 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 871 | struct e1000_hw *hw = &adapter->hw;
|
| 872 | struct igbvf_ring *tx_ring = adapter->tx_ring;
|
| 873 |
|
| 874 | if (tx_ring->set_itr) {
|
| 875 | writel(tx_ring->itr_val,
|
| 876 | adapter->hw.hw_addr + tx_ring->itr_register);
|
| 877 | adapter->tx_ring->set_itr = 0;
|
| 878 | }
|
| 879 |
|
| 880 | adapter->total_tx_bytes = 0;
|
| 881 | adapter->total_tx_packets = 0;
|
| 882 |
|
| 883 | |
| 884 | * EICS
|
| 885 |
|
| 886 | if (!igbvf_clean_tx_irq(tx_ring))
|
| 887 |
|
| 888 | ew32(EICS, tx_ring->eims_value);
|
| 889 | else
|
| 890 | ew32(EIMS, tx_ring->eims_value);
|
| 891 |
|
| 892 | return IRQ_HANDLED;
|
| 893 | }
|
| 894 |
|
| 895 | static irqreturn_t igbvf_intr_msix_rx(int irq, void *data)
|
| 896 | {
|
| 897 | struct net_device *netdev = data;
|
| 898 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 899 |
|
| 900 | |
| 901 | * previous interrupt.
|
| 902 |
|
| 903 | if (adapter->rx_ring->set_itr) {
|
| 904 | writel(adapter->rx_ring->itr_val,
|
| 905 | adapter->hw.hw_addr + adapter->rx_ring->itr_register);
|
| 906 | adapter->rx_ring->set_itr = 0;
|
| 907 | }
|
| 908 |
|
| 909 | if (napi_schedule_prep(&adapter->rx_ring->napi)) {
|
| 910 | adapter->total_rx_bytes = 0;
|
| 911 | adapter->total_rx_packets = 0;
|
| 912 | __napi_schedule(&adapter->rx_ring->napi);
|
| 913 | }
|
| 914 |
|
| 915 | return IRQ_HANDLED;
|
| 916 | }
|
| 917 |
|
| 918 | #define IGBVF_NO_QUEUE -1
|
| 919 |
|
| 920 | static void igbvf_assign_vector(struct igbvf_adapter *adapter, int rx_queue,
|
| 921 | int tx_queue, int msix_vector)
|
| 922 | {
|
| 923 | struct e1000_hw *hw = &adapter->hw;
|
| 924 | u32 ivar, index;
|
| 925 |
|
| 926 | |
| 927 | * Each queue has a single entry in the table to which we write
|
| 928 | * a vector number along with a "valid" bit. Sadly, the layout
|
| 929 | * of the table is somewhat counterintuitive.
|
| 930 |
|
| 931 | if (rx_queue > IGBVF_NO_QUEUE) {
|
| 932 | index = (rx_queue >> 1);
|
| 933 | ivar = array_er32(IVAR0, index);
|
| 934 | if (rx_queue & 0x1) {
|
| 935 |
|
| 936 | ivar = ivar & 0xFF00FFFF;
|
| 937 | ivar |= (msix_vector | E1000_IVAR_VALID) << 16;
|
| 938 | } else {
|
| 939 |
|
| 940 | ivar = ivar & 0xFFFFFF00;
|
| 941 | ivar |= msix_vector | E1000_IVAR_VALID;
|
| 942 | }
|
| 943 | adapter->rx_ring[rx_queue].eims_value = BIT(msix_vector);
|
| 944 | array_ew32(IVAR0, index, ivar);
|
| 945 | }
|
| 946 | if (tx_queue > IGBVF_NO_QUEUE) {
|
| 947 | index = (tx_queue >> 1);
|
| 948 | ivar = array_er32(IVAR0, index);
|
| 949 | if (tx_queue & 0x1) {
|
| 950 |
|
| 951 | ivar = ivar & 0x00FFFFFF;
|
| 952 | ivar |= (msix_vector | E1000_IVAR_VALID) << 24;
|
| 953 | } else {
|
| 954 |
|
| 955 | ivar = ivar & 0xFFFF00FF;
|
| 956 | ivar |= (msix_vector | E1000_IVAR_VALID) << 8;
|
| 957 | }
|
| 958 | adapter->tx_ring[tx_queue].eims_value = BIT(msix_vector);
|
| 959 | array_ew32(IVAR0, index, ivar);
|
| 960 | }
|
| 961 | }
|
| 962 |
|
| 963 | |
| 964 | * igbvf_configure_msix - Configure MSI-X hardware
|
| 965 | * @adapter: board private structure
|
| 966 | *
|
| 967 | * igbvf_configure_msix sets up the hardware to properly
|
| 968 | * generate MSI-X interrupts.
|
| 969 | *
|
| 970 | static void igbvf_configure_msix(struct igbvf_adapter *adapter)
|
| 971 | {
|
| 972 | u32 tmp;
|
| 973 | struct e1000_hw *hw = &adapter->hw;
|
| 974 | struct igbvf_ring *tx_ring = adapter->tx_ring;
|
| 975 | struct igbvf_ring *rx_ring = adapter->rx_ring;
|
| 976 | int vector = 0;
|
| 977 |
|
| 978 | adapter->eims_enable_mask = 0;
|
| 979 |
|
| 980 | igbvf_assign_vector(adapter, IGBVF_NO_QUEUE, 0, vector++);
|
| 981 | adapter->eims_enable_mask |= tx_ring->eims_value;
|
| 982 | writel(tx_ring->itr_val, hw->hw_addr + tx_ring->itr_register);
|
| 983 | igbvf_assign_vector(adapter, 0, IGBVF_NO_QUEUE, vector++);
|
| 984 | adapter->eims_enable_mask |= rx_ring->eims_value;
|
| 985 | writel(rx_ring->itr_val, hw->hw_addr + rx_ring->itr_register);
|
| 986 |
|
| 987 |
|
| 988 |
|
| 989 | tmp = (vector++ | E1000_IVAR_VALID);
|
| 990 |
|
| 991 | ew32(IVAR_MISC, tmp);
|
| 992 |
|
| 993 | adapter->eims_enable_mask = GENMASK(vector - 1, 0);
|
| 994 | adapter->eims_other = BIT(vector - 1);
|
| 995 | e1e_flush();
|
| 996 | }
|
| 997 |
|
| 998 | static void igbvf_reset_interrupt_capability(struct igbvf_adapter *adapter)
|
| 999 | {
|
| 1000 | if (adapter->msix_entries) {
|
| 1001 | pci_disable_msix(adapter->pdev);
|
| 1002 | kfree(adapter->msix_entries);
|
| 1003 | adapter->msix_entries = NULL;
|
| 1004 | }
|
| 1005 | }
|
| 1006 |
|
| 1007 | |
| 1008 | * igbvf_set_interrupt_capability - set MSI or MSI-X if supported
|
| 1009 | * @adapter: board private structure
|
| 1010 | *
|
| 1011 | * Attempt to configure interrupts using the best available
|
| 1012 | * capabilities of the hardware and kernel.
|
| 1013 | *
|
| 1014 | static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)
|
| 1015 | {
|
| 1016 | int err = -ENOMEM;
|
| 1017 | int i;
|
| 1018 |
|
| 1019 |
|
| 1020 | adapter->msix_entries = kzalloc_objs(struct msix_entry, 3);
|
| 1021 | if (adapter->msix_entries) {
|
| 1022 | for (i = 0; i < 3; i++)
|
| 1023 | adapter->msix_entries[i].entry = i;
|
| 1024 |
|
| 1025 | err = pci_enable_msix_range(adapter->pdev,
|
| 1026 | adapter->msix_entries, 3, 3);
|
| 1027 | }
|
| 1028 |
|
| 1029 | if (err < 0) {
|
| 1030 |
|
| 1031 | dev_err(&adapter->pdev->dev,
|
| 1032 | "Failed to initialize MSI-X interrupts.\n");
|
| 1033 | igbvf_reset_interrupt_capability(adapter);
|
| 1034 | }
|
| 1035 | }
|
| 1036 |
|
| 1037 | |
| 1038 | * igbvf_request_msix - Initialize MSI-X interrupts
|
| 1039 | * @adapter: board private structure
|
| 1040 | *
|
| 1041 | * igbvf_request_msix allocates MSI-X vectors and requests interrupts from the
|
| 1042 | * kernel.
|
| 1043 | *
|
| 1044 | static int igbvf_request_msix(struct igbvf_adapter *adapter)
|
| 1045 | {
|
| 1046 | struct net_device *netdev = adapter->netdev;
|
| 1047 | int err = 0, vector = 0;
|
| 1048 |
|
| 1049 | if (strlen(netdev->name) < (IFNAMSIZ - 5)) {
|
| 1050 | sprintf(adapter->tx_ring->name, "%s-tx-0", netdev->name);
|
| 1051 | sprintf(adapter->rx_ring->name, "%s-rx-0", netdev->name);
|
| 1052 | } else {
|
| 1053 | memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ);
|
| 1054 | memcpy(adapter->rx_ring->name, netdev->name, IFNAMSIZ);
|
| 1055 | }
|
| 1056 |
|
| 1057 | err = request_irq(adapter->msix_entries[vector].vector,
|
| 1058 | igbvf_intr_msix_tx, 0, adapter->tx_ring->name,
|
| 1059 | netdev);
|
| 1060 | if (err)
|
| 1061 | goto out;
|
| 1062 |
|
| 1063 | adapter->tx_ring->itr_register = E1000_EITR(vector);
|
| 1064 | adapter->tx_ring->itr_val = adapter->current_itr;
|
| 1065 | vector++;
|
| 1066 |
|
| 1067 | err = request_irq(adapter->msix_entries[vector].vector,
|
| 1068 | igbvf_intr_msix_rx, 0, adapter->rx_ring->name,
|
| 1069 | netdev);
|
| 1070 | if (err)
|
| 1071 | goto free_irq_tx;
|
| 1072 |
|
| 1073 | adapter->rx_ring->itr_register = E1000_EITR(vector);
|
| 1074 | adapter->rx_ring->itr_val = adapter->current_itr;
|
| 1075 | vector++;
|
| 1076 |
|
| 1077 | err = request_irq(adapter->msix_entries[vector].vector,
|
| 1078 | igbvf_msix_other, 0, netdev->name, netdev);
|
| 1079 | if (err)
|
| 1080 | goto free_irq_rx;
|
| 1081 |
|
| 1082 | igbvf_configure_msix(adapter);
|
| 1083 | return 0;
|
| 1084 | free_irq_rx:
|
| 1085 | free_irq(adapter->msix_entries[--vector].vector, netdev);
|
| 1086 | free_irq_tx:
|
| 1087 | free_irq(adapter->msix_entries[--vector].vector, netdev);
|
| 1088 | out:
|
| 1089 | return err;
|
| 1090 | }
|
| 1091 |
|
| 1092 | |
| 1093 | * igbvf_alloc_queues - Allocate memory for all rings
|
| 1094 | * @adapter: board private structure to initialize
|
| 1095 | *
|
| 1096 | static int igbvf_alloc_queues(struct igbvf_adapter *adapter)
|
| 1097 | {
|
| 1098 | struct net_device *netdev = adapter->netdev;
|
| 1099 |
|
| 1100 | adapter->tx_ring = kzalloc_obj(struct igbvf_ring);
|
| 1101 | if (!adapter->tx_ring)
|
| 1102 | return -ENOMEM;
|
| 1103 |
|
| 1104 | adapter->rx_ring = kzalloc_obj(struct igbvf_ring);
|
| 1105 | if (!adapter->rx_ring) {
|
| 1106 | kfree(adapter->tx_ring);
|
| 1107 | return -ENOMEM;
|
| 1108 | }
|
| 1109 |
|
| 1110 | netif_napi_add(netdev, &adapter->rx_ring->napi, igbvf_poll);
|
| 1111 |
|
| 1112 | return 0;
|
| 1113 | }
|
| 1114 |
|
| 1115 | |
| 1116 | * igbvf_request_irq - initialize interrupts
|
| 1117 | * @adapter: board private structure
|
| 1118 | *
|
| 1119 | * Attempts to configure interrupts using the best available
|
| 1120 | * capabilities of the hardware and kernel.
|
| 1121 | *
|
| 1122 | static int igbvf_request_irq(struct igbvf_adapter *adapter)
|
| 1123 | {
|
| 1124 | int err = -1;
|
| 1125 |
|
| 1126 |
|
| 1127 | if (adapter->msix_entries)
|
| 1128 | err = igbvf_request_msix(adapter);
|
| 1129 |
|
| 1130 | if (!err)
|
| 1131 | return err;
|
| 1132 |
|
| 1133 | dev_err(&adapter->pdev->dev,
|
| 1134 | "Unable to allocate interrupt, Error: %d\n", err);
|
| 1135 |
|
| 1136 | return err;
|
| 1137 | }
|
| 1138 |
|
| 1139 | static void igbvf_free_irq(struct igbvf_adapter *adapter)
|
| 1140 | {
|
| 1141 | struct net_device *netdev = adapter->netdev;
|
| 1142 | int vector;
|
| 1143 |
|
| 1144 | if (adapter->msix_entries) {
|
| 1145 | for (vector = 0; vector < 3; vector++)
|
| 1146 | free_irq(adapter->msix_entries[vector].vector, netdev);
|
| 1147 | }
|
| 1148 | }
|
| 1149 |
|
| 1150 | |
| 1151 | * igbvf_irq_disable - Mask off interrupt generation on the NIC
|
| 1152 | * @adapter: board private structure
|
| 1153 | *
|
| 1154 | static void igbvf_irq_disable(struct igbvf_adapter *adapter)
|
| 1155 | {
|
| 1156 | struct e1000_hw *hw = &adapter->hw;
|
| 1157 |
|
| 1158 | ew32(EIMC, ~0);
|
| 1159 |
|
| 1160 | if (adapter->msix_entries)
|
| 1161 | ew32(EIAC, 0);
|
| 1162 | }
|
| 1163 |
|
| 1164 | |
| 1165 | * igbvf_irq_enable - Enable default interrupt generation settings
|
| 1166 | * @adapter: board private structure
|
| 1167 | *
|
| 1168 | static void igbvf_irq_enable(struct igbvf_adapter *adapter)
|
| 1169 | {
|
| 1170 | struct e1000_hw *hw = &adapter->hw;
|
| 1171 |
|
| 1172 | ew32(EIAC, adapter->eims_enable_mask);
|
| 1173 | ew32(EIAM, adapter->eims_enable_mask);
|
| 1174 | ew32(EIMS, adapter->eims_enable_mask);
|
| 1175 | }
|
| 1176 |
|
| 1177 | |
| 1178 | * igbvf_poll - NAPI Rx polling callback
|
| 1179 | * @napi: struct associated with this polling callback
|
| 1180 | * @budget: amount of packets driver is allowed to process this poll
|
| 1181 | *
|
| 1182 | static int igbvf_poll(struct napi_struct *napi, int budget)
|
| 1183 | {
|
| 1184 | struct igbvf_ring *rx_ring = container_of(napi, struct igbvf_ring, napi);
|
| 1185 | struct igbvf_adapter *adapter = rx_ring->adapter;
|
| 1186 | struct e1000_hw *hw = &adapter->hw;
|
| 1187 | int work_done = 0;
|
| 1188 |
|
| 1189 | igbvf_clean_rx_irq(adapter, &work_done, budget);
|
| 1190 |
|
| 1191 | if (work_done == budget)
|
| 1192 | return budget;
|
| 1193 |
|
| 1194 | |
| 1195 | * poll us due to busy-polling
|
| 1196 |
|
| 1197 | if (likely(napi_complete_done(napi, work_done))) {
|
| 1198 | if (adapter->requested_itr & 3)
|
| 1199 | igbvf_set_itr(adapter);
|
| 1200 |
|
| 1201 | if (!test_bit(__IGBVF_DOWN, &adapter->state))
|
| 1202 | ew32(EIMS, adapter->rx_ring->eims_value);
|
| 1203 | }
|
| 1204 |
|
| 1205 | return work_done;
|
| 1206 | }
|
| 1207 |
|
| 1208 | |
| 1209 | * igbvf_set_rlpml - set receive large packet maximum length
|
| 1210 | * @adapter: board private structure
|
| 1211 | *
|
| 1212 | * Configure the maximum size of packets that will be received
|
| 1213 |
|
| 1214 | static void igbvf_set_rlpml(struct igbvf_adapter *adapter)
|
| 1215 | {
|
| 1216 | int max_frame_size;
|
| 1217 | struct e1000_hw *hw = &adapter->hw;
|
| 1218 |
|
| 1219 | max_frame_size = adapter->max_frame_size + VLAN_TAG_SIZE;
|
| 1220 |
|
| 1221 | spin_lock_bh(&hw->mbx_lock);
|
| 1222 |
|
| 1223 | e1000_rlpml_set_vf(hw, max_frame_size);
|
| 1224 |
|
| 1225 | spin_unlock_bh(&hw->mbx_lock);
|
| 1226 | }
|
| 1227 |
|
| 1228 | static int igbvf_vlan_rx_add_vid(struct net_device *netdev,
|
| 1229 | __be16 proto, u16 vid)
|
| 1230 | {
|
| 1231 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1232 | struct e1000_hw *hw = &adapter->hw;
|
| 1233 |
|
| 1234 | spin_lock_bh(&hw->mbx_lock);
|
| 1235 |
|
| 1236 | if (hw->mac.ops.set_vfta(hw, vid, true)) {
|
| 1237 | dev_warn(&adapter->pdev->dev, "Vlan id %d is not added\n", vid);
|
| 1238 | spin_unlock_bh(&hw->mbx_lock);
|
| 1239 | return -EINVAL;
|
| 1240 | }
|
| 1241 |
|
| 1242 | spin_unlock_bh(&hw->mbx_lock);
|
| 1243 |
|
| 1244 | set_bit(vid, adapter->active_vlans);
|
| 1245 | return 0;
|
| 1246 | }
|
| 1247 |
|
| 1248 | static int igbvf_vlan_rx_kill_vid(struct net_device *netdev,
|
| 1249 | __be16 proto, u16 vid)
|
| 1250 | {
|
| 1251 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1252 | struct e1000_hw *hw = &adapter->hw;
|
| 1253 |
|
| 1254 | spin_lock_bh(&hw->mbx_lock);
|
| 1255 |
|
| 1256 | if (hw->mac.ops.set_vfta(hw, vid, false)) {
|
| 1257 | dev_err(&adapter->pdev->dev,
|
| 1258 | "Failed to remove vlan id %d\n", vid);
|
| 1259 | spin_unlock_bh(&hw->mbx_lock);
|
| 1260 | return -EINVAL;
|
| 1261 | }
|
| 1262 |
|
| 1263 | spin_unlock_bh(&hw->mbx_lock);
|
| 1264 |
|
| 1265 | clear_bit(vid, adapter->active_vlans);
|
| 1266 | return 0;
|
| 1267 | }
|
| 1268 |
|
| 1269 | static void igbvf_restore_vlan(struct igbvf_adapter *adapter)
|
| 1270 | {
|
| 1271 | u16 vid;
|
| 1272 |
|
| 1273 | for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
|
| 1274 | igbvf_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);
|
| 1275 | }
|
| 1276 |
|
| 1277 | |
| 1278 | * igbvf_configure_tx - Configure Transmit Unit after Reset
|
| 1279 | * @adapter: board private structure
|
| 1280 | *
|
| 1281 | * Configure the Tx unit of the MAC after a reset.
|
| 1282 | *
|
| 1283 | static void igbvf_configure_tx(struct igbvf_adapter *adapter)
|
| 1284 | {
|
| 1285 | struct e1000_hw *hw = &adapter->hw;
|
| 1286 | struct igbvf_ring *tx_ring = adapter->tx_ring;
|
| 1287 | u64 tdba;
|
| 1288 | u32 txdctl, dca_txctrl;
|
| 1289 |
|
| 1290 |
|
| 1291 | txdctl = er32(TXDCTL(0));
|
| 1292 | ew32(TXDCTL(0), txdctl & ~E1000_TXDCTL_QUEUE_ENABLE);
|
| 1293 | e1e_flush();
|
| 1294 | msleep(10);
|
| 1295 |
|
| 1296 |
|
| 1297 | ew32(TDLEN(0), tx_ring->count * sizeof(union e1000_adv_tx_desc));
|
| 1298 | tdba = tx_ring->dma;
|
| 1299 | ew32(TDBAL(0), (tdba & DMA_BIT_MASK(32)));
|
| 1300 | ew32(TDBAH(0), (tdba >> 32));
|
| 1301 | ew32(TDH(0), 0);
|
| 1302 | ew32(TDT(0), 0);
|
| 1303 | tx_ring->head = E1000_TDH(0);
|
| 1304 | tx_ring->tail = E1000_TDT(0);
|
| 1305 |
|
| 1306 | |
| 1307 | * MUST be delivered in order or it will completely screw up
|
| 1308 | * our bookkeeping.
|
| 1309 |
|
| 1310 | dca_txctrl = er32(DCA_TXCTRL(0));
|
| 1311 | dca_txctrl &= ~E1000_DCA_TXCTRL_TX_WB_RO_EN;
|
| 1312 | ew32(DCA_TXCTRL(0), dca_txctrl);
|
| 1313 |
|
| 1314 |
|
| 1315 | txdctl |= E1000_TXDCTL_QUEUE_ENABLE;
|
| 1316 | ew32(TXDCTL(0), txdctl);
|
| 1317 |
|
| 1318 |
|
| 1319 | adapter->txd_cmd = E1000_ADVTXD_DCMD_EOP | E1000_ADVTXD_DCMD_IFCS;
|
| 1320 |
|
| 1321 |
|
| 1322 | adapter->txd_cmd |= E1000_ADVTXD_DCMD_RS;
|
| 1323 | }
|
| 1324 |
|
| 1325 | |
| 1326 | * igbvf_setup_srrctl - configure the receive control registers
|
| 1327 | * @adapter: Board private structure
|
| 1328 | *
|
| 1329 | static void igbvf_setup_srrctl(struct igbvf_adapter *adapter)
|
| 1330 | {
|
| 1331 | struct e1000_hw *hw = &adapter->hw;
|
| 1332 | u32 srrctl = 0;
|
| 1333 |
|
| 1334 | srrctl &= ~(E1000_SRRCTL_DESCTYPE_MASK |
|
| 1335 | E1000_SRRCTL_BSIZEHDR_MASK |
|
| 1336 | E1000_SRRCTL_BSIZEPKT_MASK);
|
| 1337 |
|
| 1338 |
|
| 1339 | srrctl |= E1000_SRRCTL_DROP_EN;
|
| 1340 |
|
| 1341 |
|
| 1342 | srrctl |= ALIGN(adapter->rx_buffer_len, 1024) >>
|
| 1343 | E1000_SRRCTL_BSIZEPKT_SHIFT;
|
| 1344 |
|
| 1345 | if (adapter->rx_buffer_len < 2048) {
|
| 1346 | adapter->rx_ps_hdr_size = 0;
|
| 1347 | srrctl |= E1000_SRRCTL_DESCTYPE_ADV_ONEBUF;
|
| 1348 | } else {
|
| 1349 | adapter->rx_ps_hdr_size = 128;
|
| 1350 | srrctl |= adapter->rx_ps_hdr_size <<
|
| 1351 | E1000_SRRCTL_BSIZEHDRSIZE_SHIFT;
|
| 1352 | srrctl |= E1000_SRRCTL_DESCTYPE_HDR_SPLIT_ALWAYS;
|
| 1353 | }
|
| 1354 |
|
| 1355 | ew32(SRRCTL(0), srrctl);
|
| 1356 | }
|
| 1357 |
|
| 1358 | |
| 1359 | * igbvf_configure_rx - Configure Receive Unit after Reset
|
| 1360 | * @adapter: board private structure
|
| 1361 | *
|
| 1362 | * Configure the Rx unit of the MAC after a reset.
|
| 1363 | *
|
| 1364 | static void igbvf_configure_rx(struct igbvf_adapter *adapter)
|
| 1365 | {
|
| 1366 | struct e1000_hw *hw = &adapter->hw;
|
| 1367 | struct igbvf_ring *rx_ring = adapter->rx_ring;
|
| 1368 | u64 rdba;
|
| 1369 | u32 rxdctl;
|
| 1370 |
|
| 1371 |
|
| 1372 | rxdctl = er32(RXDCTL(0));
|
| 1373 | ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE);
|
| 1374 | e1e_flush();
|
| 1375 | msleep(10);
|
| 1376 |
|
| 1377 | |
| 1378 | * the Base and Length of the Rx Descriptor Ring
|
| 1379 |
|
| 1380 | rdba = rx_ring->dma;
|
| 1381 | ew32(RDBAL(0), (rdba & DMA_BIT_MASK(32)));
|
| 1382 | ew32(RDBAH(0), (rdba >> 32));
|
| 1383 | ew32(RDLEN(0), rx_ring->count * sizeof(union e1000_adv_rx_desc));
|
| 1384 | rx_ring->head = E1000_RDH(0);
|
| 1385 | rx_ring->tail = E1000_RDT(0);
|
| 1386 | ew32(RDH(0), 0);
|
| 1387 | ew32(RDT(0), 0);
|
| 1388 |
|
| 1389 | rxdctl |= E1000_RXDCTL_QUEUE_ENABLE;
|
| 1390 | rxdctl &= 0xFFF00000;
|
| 1391 | rxdctl |= IGBVF_RX_PTHRESH;
|
| 1392 | rxdctl |= IGBVF_RX_HTHRESH << 8;
|
| 1393 | rxdctl |= IGBVF_RX_WTHRESH << 16;
|
| 1394 |
|
| 1395 | igbvf_set_rlpml(adapter);
|
| 1396 |
|
| 1397 |
|
| 1398 | ew32(RXDCTL(0), rxdctl);
|
| 1399 | }
|
| 1400 |
|
| 1401 | |
| 1402 | * igbvf_set_multi - Multicast and Promiscuous mode set
|
| 1403 | * @netdev: network interface device structure
|
| 1404 | *
|
| 1405 | * The set_multi entry point is called whenever the multicast address
|
| 1406 | * list or the network interface flags are updated. This routine is
|
| 1407 | * responsible for configuring the hardware for proper multicast,
|
| 1408 | * promiscuous mode, and all-multi behavior.
|
| 1409 | *
|
| 1410 | static void igbvf_set_multi(struct net_device *netdev)
|
| 1411 | {
|
| 1412 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1413 | struct e1000_hw *hw = &adapter->hw;
|
| 1414 | struct netdev_hw_addr *ha;
|
| 1415 | u8 *mta_list = NULL;
|
| 1416 | int i;
|
| 1417 |
|
| 1418 | if (!netdev_mc_empty(netdev)) {
|
| 1419 | mta_list = kmalloc_array(netdev_mc_count(netdev), ETH_ALEN,
|
| 1420 | GFP_ATOMIC);
|
| 1421 | if (!mta_list)
|
| 1422 | return;
|
| 1423 | }
|
| 1424 |
|
| 1425 |
|
| 1426 | i = 0;
|
| 1427 | netdev_for_each_mc_addr(ha, netdev)
|
| 1428 | memcpy(mta_list + (i++ * ETH_ALEN), ha->addr, ETH_ALEN);
|
| 1429 |
|
| 1430 | spin_lock_bh(&hw->mbx_lock);
|
| 1431 |
|
| 1432 | hw->mac.ops.update_mc_addr_list(hw, mta_list, i, 0, 0);
|
| 1433 |
|
| 1434 | spin_unlock_bh(&hw->mbx_lock);
|
| 1435 | kfree(mta_list);
|
| 1436 | }
|
| 1437 |
|
| 1438 | |
| 1439 | * igbvf_set_uni - Configure unicast MAC filters
|
| 1440 | * @netdev: network interface device structure
|
| 1441 | *
|
| 1442 | * This routine is responsible for configuring the hardware for proper
|
| 1443 | * unicast filters.
|
| 1444 | *
|
| 1445 | static int igbvf_set_uni(struct net_device *netdev)
|
| 1446 | {
|
| 1447 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1448 | struct e1000_hw *hw = &adapter->hw;
|
| 1449 |
|
| 1450 | if (netdev_uc_count(netdev) > IGBVF_MAX_MAC_FILTERS) {
|
| 1451 | pr_err("Too many unicast filters - No Space\n");
|
| 1452 | return -ENOSPC;
|
| 1453 | }
|
| 1454 |
|
| 1455 | spin_lock_bh(&hw->mbx_lock);
|
| 1456 |
|
| 1457 |
|
| 1458 | hw->mac.ops.set_uc_addr(hw, E1000_VF_MAC_FILTER_CLR, NULL);
|
| 1459 |
|
| 1460 | spin_unlock_bh(&hw->mbx_lock);
|
| 1461 |
|
| 1462 | if (!netdev_uc_empty(netdev)) {
|
| 1463 | struct netdev_hw_addr *ha;
|
| 1464 |
|
| 1465 |
|
| 1466 | netdev_for_each_uc_addr(ha, netdev) {
|
| 1467 | spin_lock_bh(&hw->mbx_lock);
|
| 1468 |
|
| 1469 | hw->mac.ops.set_uc_addr(hw, E1000_VF_MAC_FILTER_ADD,
|
| 1470 | ha->addr);
|
| 1471 |
|
| 1472 | spin_unlock_bh(&hw->mbx_lock);
|
| 1473 | udelay(200);
|
| 1474 | }
|
| 1475 | }
|
| 1476 |
|
| 1477 | return 0;
|
| 1478 | }
|
| 1479 |
|
| 1480 | static void igbvf_set_rx_mode(struct net_device *netdev)
|
| 1481 | {
|
| 1482 | igbvf_set_multi(netdev);
|
| 1483 | igbvf_set_uni(netdev);
|
| 1484 | }
|
| 1485 |
|
| 1486 | |
| 1487 | * igbvf_configure - configure the hardware for Rx and Tx
|
| 1488 | * @adapter: private board structure
|
| 1489 | *
|
| 1490 | static void igbvf_configure(struct igbvf_adapter *adapter)
|
| 1491 | {
|
| 1492 | igbvf_set_rx_mode(adapter->netdev);
|
| 1493 |
|
| 1494 | igbvf_restore_vlan(adapter);
|
| 1495 |
|
| 1496 | igbvf_configure_tx(adapter);
|
| 1497 | igbvf_setup_srrctl(adapter);
|
| 1498 | igbvf_configure_rx(adapter);
|
| 1499 | igbvf_alloc_rx_buffers(adapter->rx_ring,
|
| 1500 | igbvf_desc_unused(adapter->rx_ring));
|
| 1501 | }
|
| 1502 |
|
| 1503 | |
| 1504 | * @adapter: private board structure
|
| 1505 | *
|
| 1506 | * This function boots the hardware and enables some settings that
|
| 1507 | * require a configuration cycle of the hardware - those cannot be
|
| 1508 | * set/changed during runtime. After reset the device needs to be
|
| 1509 | * properly configured for Rx, Tx etc.
|
| 1510 |
|
| 1511 | static void igbvf_reset(struct igbvf_adapter *adapter)
|
| 1512 | {
|
| 1513 | struct e1000_mac_info *mac = &adapter->hw.mac;
|
| 1514 | struct net_device *netdev = adapter->netdev;
|
| 1515 | struct e1000_hw *hw = &adapter->hw;
|
| 1516 |
|
| 1517 | spin_lock_bh(&hw->mbx_lock);
|
| 1518 |
|
| 1519 |
|
| 1520 | if (mac->ops.reset_hw(hw))
|
| 1521 | dev_info(&adapter->pdev->dev, "PF still resetting\n");
|
| 1522 |
|
| 1523 | mac->ops.init_hw(hw);
|
| 1524 |
|
| 1525 | spin_unlock_bh(&hw->mbx_lock);
|
| 1526 |
|
| 1527 | if (is_valid_ether_addr(adapter->hw.mac.addr)) {
|
| 1528 | eth_hw_addr_set(netdev, adapter->hw.mac.addr);
|
| 1529 | memcpy(netdev->perm_addr, adapter->hw.mac.addr,
|
| 1530 | netdev->addr_len);
|
| 1531 | }
|
| 1532 |
|
| 1533 | adapter->last_reset = jiffies;
|
| 1534 | }
|
| 1535 |
|
| 1536 | int igbvf_up(struct igbvf_adapter *adapter)
|
| 1537 | {
|
| 1538 | struct e1000_hw *hw = &adapter->hw;
|
| 1539 |
|
| 1540 |
|
| 1541 | igbvf_configure(adapter);
|
| 1542 |
|
| 1543 | clear_bit(__IGBVF_DOWN, &adapter->state);
|
| 1544 |
|
| 1545 | napi_enable(&adapter->rx_ring->napi);
|
| 1546 | if (adapter->msix_entries)
|
| 1547 | igbvf_configure_msix(adapter);
|
| 1548 |
|
| 1549 |
|
| 1550 | er32(EICR);
|
| 1551 | igbvf_irq_enable(adapter);
|
| 1552 |
|
| 1553 |
|
| 1554 | hw->mac.get_link_status = 1;
|
| 1555 | mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
| 1556 |
|
| 1557 | return 0;
|
| 1558 | }
|
| 1559 |
|
| 1560 | void igbvf_down(struct igbvf_adapter *adapter)
|
| 1561 | {
|
| 1562 | struct net_device *netdev = adapter->netdev;
|
| 1563 | struct e1000_hw *hw = &adapter->hw;
|
| 1564 | u32 rxdctl, txdctl;
|
| 1565 |
|
| 1566 | |
| 1567 | * reschedule our watchdog timer
|
| 1568 |
|
| 1569 | set_bit(__IGBVF_DOWN, &adapter->state);
|
| 1570 |
|
| 1571 |
|
| 1572 | rxdctl = er32(RXDCTL(0));
|
| 1573 | ew32(RXDCTL(0), rxdctl & ~E1000_RXDCTL_QUEUE_ENABLE);
|
| 1574 |
|
| 1575 | netif_carrier_off(netdev);
|
| 1576 | netif_stop_queue(netdev);
|
| 1577 |
|
| 1578 |
|
| 1579 | txdctl = er32(TXDCTL(0));
|
| 1580 | ew32(TXDCTL(0), txdctl & ~E1000_TXDCTL_QUEUE_ENABLE);
|
| 1581 |
|
| 1582 |
|
| 1583 | e1e_flush();
|
| 1584 | msleep(10);
|
| 1585 |
|
| 1586 | napi_disable(&adapter->rx_ring->napi);
|
| 1587 |
|
| 1588 | igbvf_irq_disable(adapter);
|
| 1589 |
|
| 1590 | timer_delete_sync(&adapter->watchdog_timer);
|
| 1591 |
|
| 1592 |
|
| 1593 | igbvf_update_stats(adapter);
|
| 1594 |
|
| 1595 | adapter->link_speed = 0;
|
| 1596 | adapter->link_duplex = 0;
|
| 1597 |
|
| 1598 | igbvf_reset(adapter);
|
| 1599 | igbvf_clean_tx_ring(adapter->tx_ring);
|
| 1600 | igbvf_clean_rx_ring(adapter->rx_ring);
|
| 1601 | }
|
| 1602 |
|
| 1603 | void igbvf_reinit_locked(struct igbvf_adapter *adapter)
|
| 1604 | {
|
| 1605 | might_sleep();
|
| 1606 | while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state))
|
| 1607 | usleep_range(1000, 2000);
|
| 1608 | igbvf_down(adapter);
|
| 1609 | igbvf_up(adapter);
|
| 1610 | clear_bit(__IGBVF_RESETTING, &adapter->state);
|
| 1611 | }
|
| 1612 |
|
| 1613 | |
| 1614 | * igbvf_sw_init - Initialize general software structures (struct igbvf_adapter)
|
| 1615 | * @adapter: board private structure to initialize
|
| 1616 | *
|
| 1617 | * igbvf_sw_init initializes the Adapter private data structure.
|
| 1618 | * Fields are initialized based on PCI device information and
|
| 1619 | * OS network device settings (MTU size).
|
| 1620 | *
|
| 1621 | static int igbvf_sw_init(struct igbvf_adapter *adapter)
|
| 1622 | {
|
| 1623 | struct net_device *netdev = adapter->netdev;
|
| 1624 | s32 rc;
|
| 1625 |
|
| 1626 | adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN;
|
| 1627 | adapter->rx_ps_hdr_size = 0;
|
| 1628 | adapter->max_frame_size = netdev->mtu + ETH_HLEN + ETH_FCS_LEN;
|
| 1629 | adapter->min_frame_size = ETH_ZLEN + ETH_FCS_LEN;
|
| 1630 |
|
| 1631 | adapter->requested_itr = 3;
|
| 1632 | adapter->current_itr = IGBVF_START_ITR;
|
| 1633 |
|
| 1634 |
|
| 1635 | adapter->ei->init_ops(&adapter->hw);
|
| 1636 |
|
| 1637 | rc = adapter->hw.mac.ops.init_params(&adapter->hw);
|
| 1638 | if (rc)
|
| 1639 | return rc;
|
| 1640 |
|
| 1641 | rc = adapter->hw.mbx.ops.init_params(&adapter->hw);
|
| 1642 | if (rc)
|
| 1643 | return rc;
|
| 1644 |
|
| 1645 | igbvf_set_interrupt_capability(adapter);
|
| 1646 |
|
| 1647 | if (igbvf_alloc_queues(adapter))
|
| 1648 | return -ENOMEM;
|
| 1649 |
|
| 1650 |
|
| 1651 | igbvf_irq_disable(adapter);
|
| 1652 |
|
| 1653 | spin_lock_init(&adapter->hw.mbx_lock);
|
| 1654 |
|
| 1655 | set_bit(__IGBVF_DOWN, &adapter->state);
|
| 1656 | return 0;
|
| 1657 | }
|
| 1658 |
|
| 1659 | static void igbvf_initialize_last_counter_stats(struct igbvf_adapter *adapter)
|
| 1660 | {
|
| 1661 | struct e1000_hw *hw = &adapter->hw;
|
| 1662 |
|
| 1663 | adapter->stats.last_gprc = er32(VFGPRC);
|
| 1664 | adapter->stats.last_gorc = er32(VFGORC);
|
| 1665 | adapter->stats.last_gptc = er32(VFGPTC);
|
| 1666 | adapter->stats.last_gotc = er32(VFGOTC);
|
| 1667 | adapter->stats.last_mprc = er32(VFMPRC);
|
| 1668 | adapter->stats.last_gotlbc = er32(VFGOTLBC);
|
| 1669 | adapter->stats.last_gptlbc = er32(VFGPTLBC);
|
| 1670 | adapter->stats.last_gorlbc = er32(VFGORLBC);
|
| 1671 | adapter->stats.last_gprlbc = er32(VFGPRLBC);
|
| 1672 |
|
| 1673 | adapter->stats.base_gprc = er32(VFGPRC);
|
| 1674 | adapter->stats.base_gorc = er32(VFGORC);
|
| 1675 | adapter->stats.base_gptc = er32(VFGPTC);
|
| 1676 | adapter->stats.base_gotc = er32(VFGOTC);
|
| 1677 | adapter->stats.base_mprc = er32(VFMPRC);
|
| 1678 | adapter->stats.base_gotlbc = er32(VFGOTLBC);
|
| 1679 | adapter->stats.base_gptlbc = er32(VFGPTLBC);
|
| 1680 | adapter->stats.base_gorlbc = er32(VFGORLBC);
|
| 1681 | adapter->stats.base_gprlbc = er32(VFGPRLBC);
|
| 1682 | }
|
| 1683 |
|
| 1684 | |
| 1685 | * igbvf_open - Called when a network interface is made active
|
| 1686 | * @netdev: network interface device structure
|
| 1687 | *
|
| 1688 | * Returns 0 on success, negative value on failure
|
| 1689 | *
|
| 1690 | * The open entry point is called when a network interface is made
|
| 1691 | * active by the system (IFF_UP). At this point all resources needed
|
| 1692 | * for transmit and receive operations are allocated, the interrupt
|
| 1693 | * handler is registered with the OS, the watchdog timer is started,
|
| 1694 | * and the stack is notified that the interface is ready.
|
| 1695 | *
|
| 1696 | static int igbvf_open(struct net_device *netdev)
|
| 1697 | {
|
| 1698 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1699 | struct e1000_hw *hw = &adapter->hw;
|
| 1700 | int err;
|
| 1701 |
|
| 1702 |
|
| 1703 | if (test_bit(__IGBVF_TESTING, &adapter->state))
|
| 1704 | return -EBUSY;
|
| 1705 |
|
| 1706 |
|
| 1707 | err = igbvf_setup_tx_resources(adapter, adapter->tx_ring);
|
| 1708 | if (err)
|
| 1709 | goto err_setup_tx;
|
| 1710 |
|
| 1711 |
|
| 1712 | err = igbvf_setup_rx_resources(adapter, adapter->rx_ring);
|
| 1713 | if (err)
|
| 1714 | goto err_setup_rx;
|
| 1715 |
|
| 1716 | |
| 1717 | * Setting DEBUG_SHIRQ in the kernel makes it fire an interrupt
|
| 1718 | * as soon as we call pci_request_irq, so we have to setup our
|
| 1719 | * clean_rx handler before we do so.
|
| 1720 |
|
| 1721 | igbvf_configure(adapter);
|
| 1722 |
|
| 1723 | err = igbvf_request_irq(adapter);
|
| 1724 | if (err)
|
| 1725 | goto err_req_irq;
|
| 1726 |
|
| 1727 |
|
| 1728 | clear_bit(__IGBVF_DOWN, &adapter->state);
|
| 1729 |
|
| 1730 | napi_enable(&adapter->rx_ring->napi);
|
| 1731 |
|
| 1732 |
|
| 1733 | er32(EICR);
|
| 1734 |
|
| 1735 | igbvf_irq_enable(adapter);
|
| 1736 |
|
| 1737 |
|
| 1738 | hw->mac.get_link_status = 1;
|
| 1739 | mod_timer(&adapter->watchdog_timer, jiffies + 1);
|
| 1740 |
|
| 1741 | return 0;
|
| 1742 |
|
| 1743 | err_req_irq:
|
| 1744 | igbvf_free_rx_resources(adapter->rx_ring);
|
| 1745 | err_setup_rx:
|
| 1746 | igbvf_free_tx_resources(adapter->tx_ring);
|
| 1747 | err_setup_tx:
|
| 1748 | igbvf_reset(adapter);
|
| 1749 |
|
| 1750 | return err;
|
| 1751 | }
|
| 1752 |
|
| 1753 | |
| 1754 | * igbvf_close - Disables a network interface
|
| 1755 | * @netdev: network interface device structure
|
| 1756 | *
|
| 1757 | * Returns 0, this is not allowed to fail
|
| 1758 | *
|
| 1759 | * The close entry point is called when an interface is de-activated
|
| 1760 | * by the OS. The hardware is still under the drivers control, but
|
| 1761 | * needs to be disabled. A global MAC reset is issued to stop the
|
| 1762 | * hardware, and all transmit and receive resources are freed.
|
| 1763 | *
|
| 1764 | static int igbvf_close(struct net_device *netdev)
|
| 1765 | {
|
| 1766 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1767 |
|
| 1768 | WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state));
|
| 1769 | igbvf_down(adapter);
|
| 1770 |
|
| 1771 | igbvf_free_irq(adapter);
|
| 1772 |
|
| 1773 | igbvf_free_tx_resources(adapter->tx_ring);
|
| 1774 | igbvf_free_rx_resources(adapter->rx_ring);
|
| 1775 |
|
| 1776 | return 0;
|
| 1777 | }
|
| 1778 |
|
| 1779 | |
| 1780 | * igbvf_set_mac - Change the Ethernet Address of the NIC
|
| 1781 | * @netdev: network interface device structure
|
| 1782 | * @p: pointer to an address structure
|
| 1783 | *
|
| 1784 | * Returns 0 on success, negative on failure
|
| 1785 | *
|
| 1786 | static int igbvf_set_mac(struct net_device *netdev, void *p)
|
| 1787 | {
|
| 1788 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 1789 | struct e1000_hw *hw = &adapter->hw;
|
| 1790 | struct sockaddr *addr = p;
|
| 1791 |
|
| 1792 | if (!is_valid_ether_addr(addr->sa_data))
|
| 1793 | return -EADDRNOTAVAIL;
|
| 1794 |
|
| 1795 | memcpy(hw->mac.addr, addr->sa_data, netdev->addr_len);
|
| 1796 |
|
| 1797 | spin_lock_bh(&hw->mbx_lock);
|
| 1798 |
|
| 1799 | hw->mac.ops.rar_set(hw, hw->mac.addr, 0);
|
| 1800 |
|
| 1801 | spin_unlock_bh(&hw->mbx_lock);
|
| 1802 |
|
| 1803 | if (!ether_addr_equal(addr->sa_data, hw->mac.addr))
|
| 1804 | return -EADDRNOTAVAIL;
|
| 1805 |
|
| 1806 | eth_hw_addr_set(netdev, addr->sa_data);
|
| 1807 |
|
| 1808 | return 0;
|
| 1809 | }
|
| 1810 |
|
| 1811 | #define UPDATE_VF_COUNTER(reg, name) \
|
| 1812 | { \
|
| 1813 | u32 current_counter = er32(reg); \
|
| 1814 | if (current_counter < adapter->stats.last_##name) \
|
| 1815 | adapter->stats.name += 0x100000000LL; \
|
| 1816 | adapter->stats.last_##name = current_counter; \
|
| 1817 | adapter->stats.name &= 0xFFFFFFFF00000000LL; \
|
| 1818 | adapter->stats.name |= current_counter; \
|
| 1819 | }
|
| 1820 |
|
| 1821 | |
| 1822 | * igbvf_update_stats - Update the board statistics counters
|
| 1823 | * @adapter: board private structure
|
| 1824 | *
|
| 1825 | void igbvf_update_stats(struct igbvf_adapter *adapter)
|
| 1826 | {
|
| 1827 | struct e1000_hw *hw = &adapter->hw;
|
| 1828 | struct pci_dev *pdev = adapter->pdev;
|
| 1829 |
|
| 1830 | |
| 1831 | * or if the pci connection is down.
|
| 1832 |
|
| 1833 | if (adapter->link_speed == 0)
|
| 1834 | return;
|
| 1835 |
|
| 1836 | if (test_bit(__IGBVF_RESETTING, &adapter->state))
|
| 1837 | return;
|
| 1838 |
|
| 1839 | if (pci_channel_offline(pdev))
|
| 1840 | return;
|
| 1841 |
|
| 1842 | UPDATE_VF_COUNTER(VFGPRC, gprc);
|
| 1843 | UPDATE_VF_COUNTER(VFGORC, gorc);
|
| 1844 | UPDATE_VF_COUNTER(VFGPTC, gptc);
|
| 1845 | UPDATE_VF_COUNTER(VFGOTC, gotc);
|
| 1846 | UPDATE_VF_COUNTER(VFMPRC, mprc);
|
| 1847 | UPDATE_VF_COUNTER(VFGOTLBC, gotlbc);
|
| 1848 | UPDATE_VF_COUNTER(VFGPTLBC, gptlbc);
|
| 1849 | UPDATE_VF_COUNTER(VFGORLBC, gorlbc);
|
| 1850 | UPDATE_VF_COUNTER(VFGPRLBC, gprlbc);
|
| 1851 |
|
| 1852 |
|
| 1853 | adapter->netdev->stats.multicast = adapter->stats.mprc;
|
| 1854 | }
|
| 1855 |
|
| 1856 | static void igbvf_print_link_info(struct igbvf_adapter *adapter)
|
| 1857 | {
|
| 1858 | dev_info(&adapter->pdev->dev, "Link is Up %d Mbps %s Duplex\n",
|
| 1859 | adapter->link_speed,
|
| 1860 | adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
|
| 1861 | }
|
| 1862 |
|
| 1863 | static bool igbvf_has_link(struct igbvf_adapter *adapter)
|
| 1864 | {
|
| 1865 | struct e1000_hw *hw = &adapter->hw;
|
| 1866 | s32 ret_val = E1000_SUCCESS;
|
| 1867 | bool link_active;
|
| 1868 |
|
| 1869 |
|
| 1870 | if (test_bit(__IGBVF_DOWN, &adapter->state))
|
| 1871 | return false;
|
| 1872 |
|
| 1873 | spin_lock_bh(&hw->mbx_lock);
|
| 1874 |
|
| 1875 | ret_val = hw->mac.ops.check_for_link(hw);
|
| 1876 |
|
| 1877 | spin_unlock_bh(&hw->mbx_lock);
|
| 1878 |
|
| 1879 | link_active = !hw->mac.get_link_status;
|
| 1880 |
|
| 1881 |
|
| 1882 | if (ret_val && time_after(jiffies, adapter->last_reset + (10 * HZ)))
|
| 1883 | schedule_work(&adapter->reset_task);
|
| 1884 |
|
| 1885 | return link_active;
|
| 1886 | }
|
| 1887 |
|
| 1888 | |
| 1889 | * igbvf_watchdog - Timer Call-back
|
| 1890 | * @t: timer list pointer containing private struct
|
| 1891 | *
|
| 1892 | static void igbvf_watchdog(struct timer_list *t)
|
| 1893 | {
|
| 1894 | struct igbvf_adapter *adapter = timer_container_of(adapter, t,
|
| 1895 | watchdog_timer);
|
| 1896 |
|
| 1897 |
|
| 1898 | schedule_work(&adapter->watchdog_task);
|
| 1899 | }
|
| 1900 |
|
| 1901 | static void igbvf_watchdog_task(struct work_struct *work)
|
| 1902 | {
|
| 1903 | struct igbvf_adapter *adapter = container_of(work,
|
| 1904 | struct igbvf_adapter,
|
| 1905 | watchdog_task);
|
| 1906 | struct net_device *netdev = adapter->netdev;
|
| 1907 | struct e1000_mac_info *mac = &adapter->hw.mac;
|
| 1908 | struct igbvf_ring *tx_ring = adapter->tx_ring;
|
| 1909 | struct e1000_hw *hw = &adapter->hw;
|
| 1910 | u32 link;
|
| 1911 | int tx_pending = 0;
|
| 1912 |
|
| 1913 | link = igbvf_has_link(adapter);
|
| 1914 |
|
| 1915 | if (link) {
|
| 1916 | if (!netif_carrier_ok(netdev)) {
|
| 1917 | mac->ops.get_link_up_info(&adapter->hw,
|
| 1918 | &adapter->link_speed,
|
| 1919 | &adapter->link_duplex);
|
| 1920 | igbvf_print_link_info(adapter);
|
| 1921 |
|
| 1922 | netif_carrier_on(netdev);
|
| 1923 | netif_wake_queue(netdev);
|
| 1924 | }
|
| 1925 | } else {
|
| 1926 | if (netif_carrier_ok(netdev)) {
|
| 1927 | adapter->link_speed = 0;
|
| 1928 | adapter->link_duplex = 0;
|
| 1929 | dev_info(&adapter->pdev->dev, "Link is Down\n");
|
| 1930 | netif_carrier_off(netdev);
|
| 1931 | netif_stop_queue(netdev);
|
| 1932 | }
|
| 1933 | }
|
| 1934 |
|
| 1935 | if (netif_carrier_ok(netdev)) {
|
| 1936 | igbvf_update_stats(adapter);
|
| 1937 | } else {
|
| 1938 | tx_pending = (igbvf_desc_unused(tx_ring) + 1 <
|
| 1939 | tx_ring->count);
|
| 1940 | if (tx_pending) {
|
| 1941 | |
| 1942 | * but we've got queued Tx work that's never going
|
| 1943 | * to get done, so reset controller to flush Tx.
|
| 1944 | * (Do the reset outside of interrupt context).
|
| 1945 |
|
| 1946 | adapter->tx_timeout_count++;
|
| 1947 | schedule_work(&adapter->reset_task);
|
| 1948 | }
|
| 1949 | }
|
| 1950 |
|
| 1951 |
|
| 1952 | ew32(EICS, adapter->rx_ring->eims_value);
|
| 1953 |
|
| 1954 |
|
| 1955 | if (!test_bit(__IGBVF_DOWN, &adapter->state))
|
| 1956 | mod_timer(&adapter->watchdog_timer,
|
| 1957 | round_jiffies(jiffies + (2 * HZ)));
|
| 1958 | }
|
| 1959 |
|
| 1960 | #define IGBVF_TX_FLAGS_CSUM 0x00000001
|
| 1961 | #define IGBVF_TX_FLAGS_VLAN 0x00000002
|
| 1962 | #define IGBVF_TX_FLAGS_TSO 0x00000004
|
| 1963 | #define IGBVF_TX_FLAGS_IPV4 0x00000008
|
| 1964 | #define IGBVF_TX_FLAGS_VLAN_MASK 0xffff0000
|
| 1965 | #define IGBVF_TX_FLAGS_VLAN_SHIFT 16
|
| 1966 |
|
| 1967 | static void igbvf_tx_ctxtdesc(struct igbvf_ring *tx_ring, u32 vlan_macip_lens,
|
| 1968 | u32 type_tucmd, u32 mss_l4len_idx)
|
| 1969 | {
|
| 1970 | struct e1000_adv_tx_context_desc *context_desc;
|
| 1971 | struct igbvf_buffer *buffer_info;
|
| 1972 | u16 i = tx_ring->next_to_use;
|
| 1973 |
|
| 1974 | context_desc = IGBVF_TX_CTXTDESC_ADV(*tx_ring, i);
|
| 1975 | buffer_info = &tx_ring->buffer_info[i];
|
| 1976 |
|
| 1977 | i++;
|
| 1978 | tx_ring->next_to_use = (i < tx_ring->count) ? i : 0;
|
| 1979 |
|
| 1980 |
|
| 1981 | type_tucmd |= E1000_TXD_CMD_DEXT | E1000_ADVTXD_DTYP_CTXT;
|
| 1982 |
|
| 1983 | context_desc->vlan_macip_lens = cpu_to_le32(vlan_macip_lens);
|
| 1984 | context_desc->seqnum_seed = 0;
|
| 1985 | context_desc->type_tucmd_mlhl = cpu_to_le32(type_tucmd);
|
| 1986 | context_desc->mss_l4len_idx = cpu_to_le32(mss_l4len_idx);
|
| 1987 |
|
| 1988 | buffer_info->time_stamp = jiffies;
|
| 1989 | buffer_info->dma = 0;
|
| 1990 | }
|
| 1991 |
|
| 1992 | static int igbvf_tso(struct igbvf_ring *tx_ring,
|
| 1993 | struct sk_buff *skb, u32 tx_flags, u8 *hdr_len)
|
| 1994 | {
|
| 1995 | u32 vlan_macip_lens, type_tucmd, mss_l4len_idx;
|
| 1996 | union {
|
| 1997 | struct iphdr *v4;
|
| 1998 | struct ipv6hdr *v6;
|
| 1999 | unsigned char *hdr;
|
| 2000 | } ip;
|
| 2001 | union {
|
| 2002 | struct tcphdr *tcp;
|
| 2003 | unsigned char *hdr;
|
| 2004 | } l4;
|
| 2005 | u32 paylen, l4_offset;
|
| 2006 | int err;
|
| 2007 |
|
| 2008 | if (skb->ip_summed != CHECKSUM_PARTIAL)
|
| 2009 | return 0;
|
| 2010 |
|
| 2011 | if (!skb_is_gso(skb))
|
| 2012 | return 0;
|
| 2013 |
|
| 2014 | err = skb_cow_head(skb, 0);
|
| 2015 | if (err < 0)
|
| 2016 | return err;
|
| 2017 |
|
| 2018 | ip.hdr = skb_network_header(skb);
|
| 2019 | l4.hdr = skb_checksum_start(skb);
|
| 2020 |
|
| 2021 |
|
| 2022 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP;
|
| 2023 |
|
| 2024 |
|
| 2025 | if (ip.v4->version == 4) {
|
| 2026 | unsigned char *csum_start = skb_checksum_start(skb);
|
| 2027 | unsigned char *trans_start = ip.hdr + (ip.v4->ihl * 4);
|
| 2028 |
|
| 2029 | |
| 2030 | * is not a part of the outer IP header
|
| 2031 |
|
| 2032 | ip.v4->check = csum_fold(csum_partial(trans_start,
|
| 2033 | csum_start - trans_start,
|
| 2034 | 0));
|
| 2035 | type_tucmd |= E1000_ADVTXD_TUCMD_IPV4;
|
| 2036 |
|
| 2037 | ip.v4->tot_len = 0;
|
| 2038 | } else {
|
| 2039 | ip.v6->payload_len = 0;
|
| 2040 | }
|
| 2041 |
|
| 2042 |
|
| 2043 | l4_offset = l4.hdr - skb->data;
|
| 2044 |
|
| 2045 |
|
| 2046 | *hdr_len = (l4.tcp->doff * 4) + l4_offset;
|
| 2047 |
|
| 2048 |
|
| 2049 | paylen = skb->len - l4_offset;
|
| 2050 | csum_replace_by_diff(&l4.tcp->check, (__force __wsum)htonl(paylen));
|
| 2051 |
|
| 2052 |
|
| 2053 | mss_l4len_idx = (*hdr_len - l4_offset) << E1000_ADVTXD_L4LEN_SHIFT;
|
| 2054 | mss_l4len_idx |= skb_shinfo(skb)->gso_size << E1000_ADVTXD_MSS_SHIFT;
|
| 2055 |
|
| 2056 |
|
| 2057 | vlan_macip_lens = l4.hdr - ip.hdr;
|
| 2058 | vlan_macip_lens |= (ip.hdr - skb->data) << E1000_ADVTXD_MACLEN_SHIFT;
|
| 2059 | vlan_macip_lens |= tx_flags & IGBVF_TX_FLAGS_VLAN_MASK;
|
| 2060 |
|
| 2061 | igbvf_tx_ctxtdesc(tx_ring, vlan_macip_lens, type_tucmd, mss_l4len_idx);
|
| 2062 |
|
| 2063 | return 1;
|
| 2064 | }
|
| 2065 |
|
| 2066 | static bool igbvf_tx_csum(struct igbvf_ring *tx_ring, struct sk_buff *skb,
|
| 2067 | u32 tx_flags, __be16 protocol)
|
| 2068 | {
|
| 2069 | u32 vlan_macip_lens = 0;
|
| 2070 | u32 type_tucmd = 0;
|
| 2071 |
|
| 2072 | if (skb->ip_summed != CHECKSUM_PARTIAL) {
|
| 2073 | csum_failed:
|
| 2074 | if (!(tx_flags & IGBVF_TX_FLAGS_VLAN))
|
| 2075 | return false;
|
| 2076 | goto no_csum;
|
| 2077 | }
|
| 2078 |
|
| 2079 | switch (skb->csum_offset) {
|
| 2080 | case offsetof(struct tcphdr, check):
|
| 2081 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_TCP;
|
| 2082 | fallthrough;
|
| 2083 | case offsetof(struct udphdr, check):
|
| 2084 | break;
|
| 2085 | case offsetof(struct sctphdr, checksum):
|
| 2086 |
|
| 2087 | if (skb_csum_is_sctp(skb)) {
|
| 2088 | type_tucmd = E1000_ADVTXD_TUCMD_L4T_SCTP;
|
| 2089 | break;
|
| 2090 | }
|
| 2091 | fallthrough;
|
| 2092 | default:
|
| 2093 | skb_checksum_help(skb);
|
| 2094 | goto csum_failed;
|
| 2095 | }
|
| 2096 |
|
| 2097 | vlan_macip_lens = skb_checksum_start_offset(skb) -
|
| 2098 | skb_network_offset(skb);
|
| 2099 | no_csum:
|
| 2100 | vlan_macip_lens |= skb_network_offset(skb) << E1000_ADVTXD_MACLEN_SHIFT;
|
| 2101 | vlan_macip_lens |= tx_flags & IGBVF_TX_FLAGS_VLAN_MASK;
|
| 2102 |
|
| 2103 | igbvf_tx_ctxtdesc(tx_ring, vlan_macip_lens, type_tucmd, 0);
|
| 2104 | return true;
|
| 2105 | }
|
| 2106 |
|
| 2107 | static int igbvf_maybe_stop_tx(struct net_device *netdev, int size)
|
| 2108 | {
|
| 2109 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2110 |
|
| 2111 |
|
| 2112 | if (igbvf_desc_unused(adapter->tx_ring) >= size)
|
| 2113 | return 0;
|
| 2114 |
|
| 2115 | netif_stop_queue(netdev);
|
| 2116 |
|
| 2117 | |
| 2118 | * smp_mb__after_netif_stop_queue();
|
| 2119 | * but since that doesn't exist yet, just open code it.
|
| 2120 |
|
| 2121 | smp_mb();
|
| 2122 |
|
| 2123 |
|
| 2124 | if (igbvf_desc_unused(adapter->tx_ring) < size)
|
| 2125 | return -EBUSY;
|
| 2126 |
|
| 2127 | netif_wake_queue(netdev);
|
| 2128 |
|
| 2129 | ++adapter->restart_queue;
|
| 2130 | return 0;
|
| 2131 | }
|
| 2132 |
|
| 2133 | #define IGBVF_MAX_TXD_PWR 16
|
| 2134 | #define IGBVF_MAX_DATA_PER_TXD (1u << IGBVF_MAX_TXD_PWR)
|
| 2135 |
|
| 2136 | static inline int igbvf_tx_map_adv(struct igbvf_adapter *adapter,
|
| 2137 | struct igbvf_ring *tx_ring,
|
| 2138 | struct sk_buff *skb)
|
| 2139 | {
|
| 2140 | struct igbvf_buffer *buffer_info;
|
| 2141 | struct pci_dev *pdev = adapter->pdev;
|
| 2142 | unsigned int len = skb_headlen(skb);
|
| 2143 | unsigned int count = 0, i;
|
| 2144 | unsigned int f;
|
| 2145 |
|
| 2146 | i = tx_ring->next_to_use;
|
| 2147 |
|
| 2148 | buffer_info = &tx_ring->buffer_info[i];
|
| 2149 | BUG_ON(len >= IGBVF_MAX_DATA_PER_TXD);
|
| 2150 | buffer_info->length = len;
|
| 2151 |
|
| 2152 | buffer_info->time_stamp = jiffies;
|
| 2153 | buffer_info->mapped_as_page = false;
|
| 2154 | buffer_info->dma = dma_map_single(&pdev->dev, skb->data, len,
|
| 2155 | DMA_TO_DEVICE);
|
| 2156 | if (dma_mapping_error(&pdev->dev, buffer_info->dma))
|
| 2157 | goto dma_error;
|
| 2158 |
|
| 2159 | for (f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
|
| 2160 | const skb_frag_t *frag;
|
| 2161 |
|
| 2162 | count++;
|
| 2163 | i++;
|
| 2164 | if (i == tx_ring->count)
|
| 2165 | i = 0;
|
| 2166 |
|
| 2167 | frag = &skb_shinfo(skb)->frags[f];
|
| 2168 | len = skb_frag_size(frag);
|
| 2169 |
|
| 2170 | buffer_info = &tx_ring->buffer_info[i];
|
| 2171 | BUG_ON(len >= IGBVF_MAX_DATA_PER_TXD);
|
| 2172 | buffer_info->length = len;
|
| 2173 | buffer_info->time_stamp = jiffies;
|
| 2174 | buffer_info->mapped_as_page = true;
|
| 2175 | buffer_info->dma = skb_frag_dma_map(&pdev->dev, frag, 0, len,
|
| 2176 | DMA_TO_DEVICE);
|
| 2177 | if (dma_mapping_error(&pdev->dev, buffer_info->dma))
|
| 2178 | goto dma_error;
|
| 2179 | }
|
| 2180 |
|
| 2181 | tx_ring->buffer_info[i].skb = skb;
|
| 2182 |
|
| 2183 | return ++count;
|
| 2184 |
|
| 2185 | dma_error:
|
| 2186 | dev_err(&pdev->dev, "TX DMA map failed\n");
|
| 2187 |
|
| 2188 |
|
| 2189 | buffer_info->dma = 0;
|
| 2190 | buffer_info->time_stamp = 0;
|
| 2191 | buffer_info->length = 0;
|
| 2192 | buffer_info->mapped_as_page = false;
|
| 2193 |
|
| 2194 |
|
| 2195 | while (count--) {
|
| 2196 | if (i == 0)
|
| 2197 | i += tx_ring->count;
|
| 2198 | i--;
|
| 2199 | buffer_info = &tx_ring->buffer_info[i];
|
| 2200 | igbvf_put_txbuf(adapter, buffer_info);
|
| 2201 | }
|
| 2202 |
|
| 2203 | return 0;
|
| 2204 | }
|
| 2205 |
|
| 2206 | static inline void igbvf_tx_queue_adv(struct igbvf_adapter *adapter,
|
| 2207 | struct igbvf_ring *tx_ring,
|
| 2208 | int tx_flags, int count,
|
| 2209 | unsigned int first, u32 paylen,
|
| 2210 | u8 hdr_len)
|
| 2211 | {
|
| 2212 | union e1000_adv_tx_desc *tx_desc = NULL;
|
| 2213 | struct igbvf_buffer *buffer_info;
|
| 2214 | u32 olinfo_status = 0, cmd_type_len;
|
| 2215 | unsigned int i;
|
| 2216 |
|
| 2217 | cmd_type_len = (E1000_ADVTXD_DTYP_DATA | E1000_ADVTXD_DCMD_IFCS |
|
| 2218 | E1000_ADVTXD_DCMD_DEXT);
|
| 2219 |
|
| 2220 | if (tx_flags & IGBVF_TX_FLAGS_VLAN)
|
| 2221 | cmd_type_len |= E1000_ADVTXD_DCMD_VLE;
|
| 2222 |
|
| 2223 | if (tx_flags & IGBVF_TX_FLAGS_TSO) {
|
| 2224 | cmd_type_len |= E1000_ADVTXD_DCMD_TSE;
|
| 2225 |
|
| 2226 |
|
| 2227 | olinfo_status |= E1000_TXD_POPTS_TXSM << 8;
|
| 2228 |
|
| 2229 |
|
| 2230 | if (tx_flags & IGBVF_TX_FLAGS_IPV4)
|
| 2231 | olinfo_status |= E1000_TXD_POPTS_IXSM << 8;
|
| 2232 |
|
| 2233 | } else if (tx_flags & IGBVF_TX_FLAGS_CSUM) {
|
| 2234 | olinfo_status |= E1000_TXD_POPTS_TXSM << 8;
|
| 2235 | }
|
| 2236 |
|
| 2237 | olinfo_status |= ((paylen - hdr_len) << E1000_ADVTXD_PAYLEN_SHIFT);
|
| 2238 |
|
| 2239 | i = tx_ring->next_to_use;
|
| 2240 | while (count--) {
|
| 2241 | buffer_info = &tx_ring->buffer_info[i];
|
| 2242 | tx_desc = IGBVF_TX_DESC_ADV(*tx_ring, i);
|
| 2243 | tx_desc->read.buffer_addr = cpu_to_le64(buffer_info->dma);
|
| 2244 | tx_desc->read.cmd_type_len =
|
| 2245 | cpu_to_le32(cmd_type_len | buffer_info->length);
|
| 2246 | tx_desc->read.olinfo_status = cpu_to_le32(olinfo_status);
|
| 2247 | i++;
|
| 2248 | if (i == tx_ring->count)
|
| 2249 | i = 0;
|
| 2250 | }
|
| 2251 |
|
| 2252 | tx_desc->read.cmd_type_len |= cpu_to_le32(adapter->txd_cmd);
|
| 2253 | |
| 2254 | * know there are new descriptors to fetch. (Only
|
| 2255 | * applicable for weak-ordered memory model archs,
|
| 2256 | * such as IA-64).
|
| 2257 |
|
| 2258 | wmb();
|
| 2259 |
|
| 2260 | tx_ring->buffer_info[first].next_to_watch = tx_desc;
|
| 2261 | tx_ring->next_to_use = i;
|
| 2262 | writel(i, adapter->hw.hw_addr + tx_ring->tail);
|
| 2263 | }
|
| 2264 |
|
| 2265 | static netdev_tx_t igbvf_xmit_frame_ring_adv(struct sk_buff *skb,
|
| 2266 | struct net_device *netdev,
|
| 2267 | struct igbvf_ring *tx_ring)
|
| 2268 | {
|
| 2269 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2270 | unsigned int first, tx_flags = 0;
|
| 2271 | u8 hdr_len = 0;
|
| 2272 | int count = 0;
|
| 2273 | int tso = 0;
|
| 2274 | __be16 protocol = vlan_get_protocol(skb);
|
| 2275 |
|
| 2276 | if (test_bit(__IGBVF_DOWN, &adapter->state)) {
|
| 2277 | dev_kfree_skb_any(skb);
|
| 2278 | return NETDEV_TX_OK;
|
| 2279 | }
|
| 2280 |
|
| 2281 | if (skb->len <= 0) {
|
| 2282 | dev_kfree_skb_any(skb);
|
| 2283 | return NETDEV_TX_OK;
|
| 2284 | }
|
| 2285 |
|
| 2286 | |
| 2287 | * + 2 desc gap to keep tail from touching head,
|
| 2288 | * + 1 desc for skb->data,
|
| 2289 | * + 1 desc for context descriptor,
|
| 2290 | * head, otherwise try next time
|
| 2291 |
|
| 2292 | if (igbvf_maybe_stop_tx(netdev, skb_shinfo(skb)->nr_frags + 4)) {
|
| 2293 |
|
| 2294 | return NETDEV_TX_BUSY;
|
| 2295 | }
|
| 2296 |
|
| 2297 | if (skb_vlan_tag_present(skb)) {
|
| 2298 | tx_flags |= IGBVF_TX_FLAGS_VLAN;
|
| 2299 | tx_flags |= (skb_vlan_tag_get(skb) <<
|
| 2300 | IGBVF_TX_FLAGS_VLAN_SHIFT);
|
| 2301 | }
|
| 2302 |
|
| 2303 | if (protocol == htons(ETH_P_IP))
|
| 2304 | tx_flags |= IGBVF_TX_FLAGS_IPV4;
|
| 2305 |
|
| 2306 | first = tx_ring->next_to_use;
|
| 2307 |
|
| 2308 | tso = igbvf_tso(tx_ring, skb, tx_flags, &hdr_len);
|
| 2309 | if (unlikely(tso < 0)) {
|
| 2310 | dev_kfree_skb_any(skb);
|
| 2311 | return NETDEV_TX_OK;
|
| 2312 | }
|
| 2313 |
|
| 2314 | if (tso)
|
| 2315 | tx_flags |= IGBVF_TX_FLAGS_TSO;
|
| 2316 | else if (igbvf_tx_csum(tx_ring, skb, tx_flags, protocol) &&
|
| 2317 | (skb->ip_summed == CHECKSUM_PARTIAL))
|
| 2318 | tx_flags |= IGBVF_TX_FLAGS_CSUM;
|
| 2319 |
|
| 2320 | |
| 2321 | * has occurred and we need to rewind the descriptor queue
|
| 2322 |
|
| 2323 | count = igbvf_tx_map_adv(adapter, tx_ring, skb);
|
| 2324 |
|
| 2325 | if (count) {
|
| 2326 | igbvf_tx_queue_adv(adapter, tx_ring, tx_flags, count,
|
| 2327 | first, skb->len, hdr_len);
|
| 2328 |
|
| 2329 | igbvf_maybe_stop_tx(netdev, MAX_SKB_FRAGS + 4);
|
| 2330 | } else {
|
| 2331 | dev_kfree_skb_any(skb);
|
| 2332 | tx_ring->buffer_info[first].time_stamp = 0;
|
| 2333 | tx_ring->next_to_use = first;
|
| 2334 | }
|
| 2335 |
|
| 2336 | return NETDEV_TX_OK;
|
| 2337 | }
|
| 2338 |
|
| 2339 | static netdev_tx_t igbvf_xmit_frame(struct sk_buff *skb,
|
| 2340 | struct net_device *netdev)
|
| 2341 | {
|
| 2342 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2343 | struct igbvf_ring *tx_ring;
|
| 2344 |
|
| 2345 | if (test_bit(__IGBVF_DOWN, &adapter->state)) {
|
| 2346 | dev_kfree_skb_any(skb);
|
| 2347 | return NETDEV_TX_OK;
|
| 2348 | }
|
| 2349 |
|
| 2350 | tx_ring = &adapter->tx_ring[0];
|
| 2351 |
|
| 2352 | return igbvf_xmit_frame_ring_adv(skb, netdev, tx_ring);
|
| 2353 | }
|
| 2354 |
|
| 2355 | |
| 2356 | * igbvf_tx_timeout - Respond to a Tx Hang
|
| 2357 | * @netdev: network interface device structure
|
| 2358 | * @txqueue: queue timing out (unused)
|
| 2359 | *
|
| 2360 | static void igbvf_tx_timeout(struct net_device *netdev, unsigned int __always_unused txqueue)
|
| 2361 | {
|
| 2362 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2363 |
|
| 2364 |
|
| 2365 | adapter->tx_timeout_count++;
|
| 2366 | schedule_work(&adapter->reset_task);
|
| 2367 | }
|
| 2368 |
|
| 2369 | static void igbvf_reset_task(struct work_struct *work)
|
| 2370 | {
|
| 2371 | struct igbvf_adapter *adapter;
|
| 2372 |
|
| 2373 | adapter = container_of(work, struct igbvf_adapter, reset_task);
|
| 2374 |
|
| 2375 | igbvf_reinit_locked(adapter);
|
| 2376 | }
|
| 2377 |
|
| 2378 | |
| 2379 | * igbvf_change_mtu - Change the Maximum Transfer Unit
|
| 2380 | * @netdev: network interface device structure
|
| 2381 | * @new_mtu: new value for maximum frame size
|
| 2382 | *
|
| 2383 | * Returns 0 on success, negative on failure
|
| 2384 | *
|
| 2385 | static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)
|
| 2386 | {
|
| 2387 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2388 | int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
|
| 2389 |
|
| 2390 | while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state))
|
| 2391 | usleep_range(1000, 2000);
|
| 2392 |
|
| 2393 | adapter->max_frame_size = max_frame;
|
| 2394 | if (netif_running(netdev))
|
| 2395 | igbvf_down(adapter);
|
| 2396 |
|
| 2397 | |
| 2398 | * means we reserve 2 more, this pushes us to allocate from the next
|
| 2399 | * larger slab size.
|
| 2400 | * i.e. RXBUFFER_2048 --> size-4096 slab
|
| 2401 | * However with the new *_jumbo_rx* routines, jumbo receives will use
|
| 2402 | * fragmented skbs
|
| 2403 |
|
| 2404 |
|
| 2405 | if (max_frame <= 1024)
|
| 2406 | adapter->rx_buffer_len = 1024;
|
| 2407 | else if (max_frame <= 2048)
|
| 2408 | adapter->rx_buffer_len = 2048;
|
| 2409 | else
|
| 2410 | #if (PAGE_SIZE / 2) > 16384
|
| 2411 | adapter->rx_buffer_len = 16384;
|
| 2412 | #else
|
| 2413 | adapter->rx_buffer_len = PAGE_SIZE / 2;
|
| 2414 | #endif
|
| 2415 |
|
| 2416 |
|
| 2417 | if ((max_frame == ETH_FRAME_LEN + ETH_FCS_LEN) ||
|
| 2418 | (max_frame == ETH_FRAME_LEN + VLAN_HLEN + ETH_FCS_LEN))
|
| 2419 | adapter->rx_buffer_len = ETH_FRAME_LEN + VLAN_HLEN +
|
| 2420 | ETH_FCS_LEN;
|
| 2421 |
|
| 2422 | netdev_dbg(netdev, "changing MTU from %d to %d\n",
|
| 2423 | netdev->mtu, new_mtu);
|
| 2424 | WRITE_ONCE(netdev->mtu, new_mtu);
|
| 2425 |
|
| 2426 | if (netif_running(netdev))
|
| 2427 | igbvf_up(adapter);
|
| 2428 | else
|
| 2429 | igbvf_reset(adapter);
|
| 2430 |
|
| 2431 | clear_bit(__IGBVF_RESETTING, &adapter->state);
|
| 2432 |
|
| 2433 | return 0;
|
| 2434 | }
|
| 2435 |
|
| 2436 | static int igbvf_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
|
| 2437 | {
|
| 2438 | switch (cmd) {
|
| 2439 | default:
|
| 2440 | return -EOPNOTSUPP;
|
| 2441 | }
|
| 2442 | }
|
| 2443 |
|
| 2444 | static int igbvf_suspend(struct device *dev_d)
|
| 2445 | {
|
| 2446 | struct net_device *netdev = dev_get_drvdata(dev_d);
|
| 2447 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2448 |
|
| 2449 | netif_device_detach(netdev);
|
| 2450 |
|
| 2451 | if (netif_running(netdev)) {
|
| 2452 | WARN_ON(test_bit(__IGBVF_RESETTING, &adapter->state));
|
| 2453 | igbvf_down(adapter);
|
| 2454 | igbvf_free_irq(adapter);
|
| 2455 | }
|
| 2456 |
|
| 2457 | return 0;
|
| 2458 | }
|
| 2459 |
|
| 2460 | static int igbvf_resume(struct device *dev_d)
|
| 2461 | {
|
| 2462 | struct pci_dev *pdev = to_pci_dev(dev_d);
|
| 2463 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2464 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2465 | u32 err;
|
| 2466 |
|
| 2467 | pci_set_master(pdev);
|
| 2468 |
|
| 2469 | if (netif_running(netdev)) {
|
| 2470 | err = igbvf_request_irq(adapter);
|
| 2471 | if (err)
|
| 2472 | return err;
|
| 2473 | }
|
| 2474 |
|
| 2475 | igbvf_reset(adapter);
|
| 2476 |
|
| 2477 | if (netif_running(netdev))
|
| 2478 | igbvf_up(adapter);
|
| 2479 |
|
| 2480 | netif_device_attach(netdev);
|
| 2481 |
|
| 2482 | return 0;
|
| 2483 | }
|
| 2484 |
|
| 2485 | static void igbvf_shutdown(struct pci_dev *pdev)
|
| 2486 | {
|
| 2487 | igbvf_suspend(&pdev->dev);
|
| 2488 | }
|
| 2489 |
|
| 2490 | #ifdef CONFIG_NET_POLL_CONTROLLER
|
| 2491 | |
| 2492 | * without having to re-enable interrupts. It's not called while
|
| 2493 | * the interrupt routine is executing.
|
| 2494 |
|
| 2495 | static void igbvf_netpoll(struct net_device *netdev)
|
| 2496 | {
|
| 2497 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2498 |
|
| 2499 | disable_irq(adapter->pdev->irq);
|
| 2500 |
|
| 2501 | igbvf_clean_tx_irq(adapter->tx_ring);
|
| 2502 |
|
| 2503 | enable_irq(adapter->pdev->irq);
|
| 2504 | }
|
| 2505 | #endif
|
| 2506 |
|
| 2507 | |
| 2508 | * igbvf_io_error_detected - called when PCI error is detected
|
| 2509 | * @pdev: Pointer to PCI device
|
| 2510 | * @state: The current pci connection state
|
| 2511 | *
|
| 2512 | * This function is called after a PCI bus error affecting
|
| 2513 | * this device has been detected.
|
| 2514 |
|
| 2515 | static pci_ers_result_t igbvf_io_error_detected(struct pci_dev *pdev,
|
| 2516 | pci_channel_state_t state)
|
| 2517 | {
|
| 2518 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2519 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2520 |
|
| 2521 | netif_device_detach(netdev);
|
| 2522 |
|
| 2523 | if (state == pci_channel_io_perm_failure)
|
| 2524 | return PCI_ERS_RESULT_DISCONNECT;
|
| 2525 |
|
| 2526 | if (netif_running(netdev))
|
| 2527 | igbvf_down(adapter);
|
| 2528 | pci_disable_device(pdev);
|
| 2529 |
|
| 2530 |
|
| 2531 | return PCI_ERS_RESULT_NEED_RESET;
|
| 2532 | }
|
| 2533 |
|
| 2534 | |
| 2535 | * igbvf_io_slot_reset - called after the pci bus has been reset.
|
| 2536 | * @pdev: Pointer to PCI device
|
| 2537 | *
|
| 2538 | * Restart the card from scratch, as if from a cold-boot. Implementation
|
| 2539 | * resembles the first-half of the igbvf_resume routine.
|
| 2540 |
|
| 2541 | static pci_ers_result_t igbvf_io_slot_reset(struct pci_dev *pdev)
|
| 2542 | {
|
| 2543 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2544 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2545 |
|
| 2546 | if (pci_enable_device_mem(pdev)) {
|
| 2547 | dev_err(&pdev->dev,
|
| 2548 | "Cannot re-enable PCI device after reset.\n");
|
| 2549 | return PCI_ERS_RESULT_DISCONNECT;
|
| 2550 | }
|
| 2551 | pci_set_master(pdev);
|
| 2552 |
|
| 2553 | igbvf_reset(adapter);
|
| 2554 |
|
| 2555 | return PCI_ERS_RESULT_RECOVERED;
|
| 2556 | }
|
| 2557 |
|
| 2558 | |
| 2559 | * igbvf_io_resume - called when traffic can start flowing again.
|
| 2560 | * @pdev: Pointer to PCI device
|
| 2561 | *
|
| 2562 | * This callback is called when the error recovery driver tells us that
|
| 2563 | * its OK to resume normal operation. Implementation resembles the
|
| 2564 | * second-half of the igbvf_resume routine.
|
| 2565 |
|
| 2566 | static void igbvf_io_resume(struct pci_dev *pdev)
|
| 2567 | {
|
| 2568 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2569 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2570 |
|
| 2571 | if (netif_running(netdev)) {
|
| 2572 | if (igbvf_up(adapter)) {
|
| 2573 | dev_err(&pdev->dev,
|
| 2574 | "can't bring device back up after reset\n");
|
| 2575 | return;
|
| 2576 | }
|
| 2577 | }
|
| 2578 |
|
| 2579 | netif_device_attach(netdev);
|
| 2580 | }
|
| 2581 |
|
| 2582 | |
| 2583 | * igbvf_io_prepare - prepare device driver for PCI reset
|
| 2584 | * @pdev: PCI device information struct
|
| 2585 |
|
| 2586 | static void igbvf_io_prepare(struct pci_dev *pdev)
|
| 2587 | {
|
| 2588 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2589 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2590 |
|
| 2591 | while (test_and_set_bit(__IGBVF_RESETTING, &adapter->state))
|
| 2592 | usleep_range(1000, 2000);
|
| 2593 | igbvf_down(adapter);
|
| 2594 | }
|
| 2595 |
|
| 2596 | |
| 2597 | * igbvf_io_reset_done - PCI reset done, device driver reset can begin
|
| 2598 | * @pdev: PCI device information struct
|
| 2599 |
|
| 2600 | static void igbvf_io_reset_done(struct pci_dev *pdev)
|
| 2601 | {
|
| 2602 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2603 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2604 |
|
| 2605 | igbvf_up(adapter);
|
| 2606 | clear_bit(__IGBVF_RESETTING, &adapter->state);
|
| 2607 | }
|
| 2608 |
|
| 2609 | static void igbvf_print_device_info(struct igbvf_adapter *adapter)
|
| 2610 | {
|
| 2611 | struct e1000_hw *hw = &adapter->hw;
|
| 2612 | struct net_device *netdev = adapter->netdev;
|
| 2613 | struct pci_dev *pdev = adapter->pdev;
|
| 2614 |
|
| 2615 | if (hw->mac.type == e1000_vfadapt_i350)
|
| 2616 | dev_info(&pdev->dev, "Intel(R) I350 Virtual Function\n");
|
| 2617 | else
|
| 2618 | dev_info(&pdev->dev, "Intel(R) 82576 Virtual Function\n");
|
| 2619 | dev_info(&pdev->dev, "Address: %pM\n", netdev->dev_addr);
|
| 2620 | }
|
| 2621 |
|
| 2622 | static int igbvf_set_features(struct net_device *netdev,
|
| 2623 | netdev_features_t features)
|
| 2624 | {
|
| 2625 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2626 |
|
| 2627 | if (features & NETIF_F_RXCSUM)
|
| 2628 | adapter->flags &= ~IGBVF_FLAG_RX_CSUM_DISABLED;
|
| 2629 | else
|
| 2630 | adapter->flags |= IGBVF_FLAG_RX_CSUM_DISABLED;
|
| 2631 |
|
| 2632 | return 0;
|
| 2633 | }
|
| 2634 |
|
| 2635 | #define IGBVF_MAX_MAC_HDR_LEN 127
|
| 2636 | #define IGBVF_MAX_NETWORK_HDR_LEN 511
|
| 2637 |
|
| 2638 | static netdev_features_t
|
| 2639 | igbvf_features_check(struct sk_buff *skb, struct net_device *dev,
|
| 2640 | netdev_features_t features)
|
| 2641 | {
|
| 2642 | unsigned int network_hdr_len, mac_hdr_len;
|
| 2643 |
|
| 2644 |
|
| 2645 | mac_hdr_len = skb_network_offset(skb);
|
| 2646 | if (unlikely(mac_hdr_len > IGBVF_MAX_MAC_HDR_LEN))
|
| 2647 | return features & ~(NETIF_F_HW_CSUM |
|
| 2648 | NETIF_F_SCTP_CRC |
|
| 2649 | NETIF_F_HW_VLAN_CTAG_TX |
|
| 2650 | NETIF_F_TSO |
|
| 2651 | NETIF_F_TSO6);
|
| 2652 |
|
| 2653 | network_hdr_len = skb_checksum_start(skb) - skb_network_header(skb);
|
| 2654 | if (unlikely(network_hdr_len > IGBVF_MAX_NETWORK_HDR_LEN))
|
| 2655 | return features & ~(NETIF_F_HW_CSUM |
|
| 2656 | NETIF_F_SCTP_CRC |
|
| 2657 | NETIF_F_TSO |
|
| 2658 | NETIF_F_TSO6);
|
| 2659 |
|
| 2660 | |
| 2661 | * inner IP ID field, so strip TSO if MANGLEID is not supported.
|
| 2662 |
|
| 2663 | if (skb->encapsulation && !(features & NETIF_F_TSO_MANGLEID))
|
| 2664 | features &= ~NETIF_F_TSO;
|
| 2665 |
|
| 2666 | return features;
|
| 2667 | }
|
| 2668 |
|
| 2669 | static const struct net_device_ops igbvf_netdev_ops = {
|
| 2670 | .ndo_open = igbvf_open,
|
| 2671 | .ndo_stop = igbvf_close,
|
| 2672 | .ndo_start_xmit = igbvf_xmit_frame,
|
| 2673 | .ndo_set_rx_mode = igbvf_set_rx_mode,
|
| 2674 | .ndo_set_mac_address = igbvf_set_mac,
|
| 2675 | .ndo_change_mtu = igbvf_change_mtu,
|
| 2676 | .ndo_eth_ioctl = igbvf_ioctl,
|
| 2677 | .ndo_tx_timeout = igbvf_tx_timeout,
|
| 2678 | .ndo_vlan_rx_add_vid = igbvf_vlan_rx_add_vid,
|
| 2679 | .ndo_vlan_rx_kill_vid = igbvf_vlan_rx_kill_vid,
|
| 2680 | #ifdef CONFIG_NET_POLL_CONTROLLER
|
| 2681 | .ndo_poll_controller = igbvf_netpoll,
|
| 2682 | #endif
|
| 2683 | .ndo_set_features = igbvf_set_features,
|
| 2684 | .ndo_features_check = igbvf_features_check,
|
| 2685 | };
|
| 2686 |
|
| 2687 | |
| 2688 | * igbvf_probe - Device Initialization Routine
|
| 2689 | * @pdev: PCI device information struct
|
| 2690 | * @ent: entry in igbvf_pci_tbl
|
| 2691 | *
|
| 2692 | * Returns 0 on success, negative on failure
|
| 2693 | *
|
| 2694 | * igbvf_probe initializes an adapter identified by a pci_dev structure.
|
| 2695 | * The OS initialization, configuring of the adapter private structure,
|
| 2696 | * and a hardware reset occur.
|
| 2697 | *
|
| 2698 | static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
| 2699 | {
|
| 2700 | struct net_device *netdev;
|
| 2701 | struct igbvf_adapter *adapter;
|
| 2702 | struct e1000_hw *hw;
|
| 2703 | const struct igbvf_info *ei = igbvf_info_tbl[ent->driver_data];
|
| 2704 | int err;
|
| 2705 |
|
| 2706 | err = pci_enable_device_mem(pdev);
|
| 2707 | if (err)
|
| 2708 | return err;
|
| 2709 |
|
| 2710 | err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
|
| 2711 | if (err) {
|
| 2712 | dev_err(&pdev->dev,
|
| 2713 | "No usable DMA configuration, aborting\n");
|
| 2714 | goto err_dma;
|
| 2715 | }
|
| 2716 |
|
| 2717 | err = pci_request_regions(pdev, igbvf_driver_name);
|
| 2718 | if (err)
|
| 2719 | goto err_pci_reg;
|
| 2720 |
|
| 2721 | pci_set_master(pdev);
|
| 2722 |
|
| 2723 | err = -ENOMEM;
|
| 2724 | netdev = alloc_etherdev(sizeof(struct igbvf_adapter));
|
| 2725 | if (!netdev)
|
| 2726 | goto err_alloc_etherdev;
|
| 2727 |
|
| 2728 | SET_NETDEV_DEV(netdev, &pdev->dev);
|
| 2729 |
|
| 2730 | pci_set_drvdata(pdev, netdev);
|
| 2731 | adapter = netdev_priv(netdev);
|
| 2732 | hw = &adapter->hw;
|
| 2733 | adapter->netdev = netdev;
|
| 2734 | adapter->pdev = pdev;
|
| 2735 | adapter->ei = ei;
|
| 2736 | adapter->pba = ei->pba;
|
| 2737 | adapter->flags = ei->flags;
|
| 2738 | adapter->hw.back = adapter;
|
| 2739 | adapter->hw.mac.type = ei->mac;
|
| 2740 | adapter->msg_enable = netif_msg_init(debug, DEFAULT_MSG_ENABLE);
|
| 2741 |
|
| 2742 |
|
| 2743 |
|
| 2744 | hw->vendor_id = pdev->vendor;
|
| 2745 | hw->device_id = pdev->device;
|
| 2746 | hw->subsystem_vendor_id = pdev->subsystem_vendor;
|
| 2747 | hw->subsystem_device_id = pdev->subsystem_device;
|
| 2748 | hw->revision_id = pdev->revision;
|
| 2749 |
|
| 2750 | err = -EIO;
|
| 2751 | adapter->hw.hw_addr = ioremap(pci_resource_start(pdev, 0),
|
| 2752 | pci_resource_len(pdev, 0));
|
| 2753 |
|
| 2754 | if (!adapter->hw.hw_addr)
|
| 2755 | goto err_ioremap;
|
| 2756 |
|
| 2757 | if (ei->get_variants) {
|
| 2758 | err = ei->get_variants(adapter);
|
| 2759 | if (err)
|
| 2760 | goto err_get_variants;
|
| 2761 | }
|
| 2762 |
|
| 2763 |
|
| 2764 | err = igbvf_sw_init(adapter);
|
| 2765 | if (err)
|
| 2766 | goto err_sw_init;
|
| 2767 |
|
| 2768 |
|
| 2769 | netdev->netdev_ops = &igbvf_netdev_ops;
|
| 2770 |
|
| 2771 | igbvf_set_ethtool_ops(netdev);
|
| 2772 | netdev->watchdog_timeo = 5 * HZ;
|
| 2773 | strscpy(netdev->name, pci_name(pdev), sizeof(netdev->name));
|
| 2774 |
|
| 2775 | netdev->hw_features = NETIF_F_SG |
|
| 2776 | NETIF_F_TSO |
|
| 2777 | NETIF_F_TSO6 |
|
| 2778 | NETIF_F_RXCSUM |
|
| 2779 | NETIF_F_HW_CSUM |
|
| 2780 | NETIF_F_SCTP_CRC;
|
| 2781 |
|
| 2782 | #define IGBVF_GSO_PARTIAL_FEATURES (NETIF_F_GSO_GRE | \
|
| 2783 | NETIF_F_GSO_GRE_CSUM | \
|
| 2784 | NETIF_F_GSO_IPXIP4 | \
|
| 2785 | NETIF_F_GSO_IPXIP6 | \
|
| 2786 | NETIF_F_GSO_UDP_TUNNEL | \
|
| 2787 | NETIF_F_GSO_UDP_TUNNEL_CSUM)
|
| 2788 |
|
| 2789 | netdev->gso_partial_features = IGBVF_GSO_PARTIAL_FEATURES;
|
| 2790 | netdev->hw_features |= NETIF_F_GSO_PARTIAL |
|
| 2791 | IGBVF_GSO_PARTIAL_FEATURES;
|
| 2792 |
|
| 2793 | netdev->features = netdev->hw_features | NETIF_F_HIGHDMA;
|
| 2794 |
|
| 2795 | netdev->vlan_features |= netdev->features | NETIF_F_TSO_MANGLEID;
|
| 2796 | netdev->mpls_features |= NETIF_F_HW_CSUM;
|
| 2797 | netdev->hw_enc_features |= netdev->vlan_features;
|
| 2798 |
|
| 2799 |
|
| 2800 | netdev->features |= NETIF_F_HW_VLAN_CTAG_FILTER |
|
| 2801 | NETIF_F_HW_VLAN_CTAG_RX |
|
| 2802 | NETIF_F_HW_VLAN_CTAG_TX;
|
| 2803 |
|
| 2804 |
|
| 2805 | netdev->min_mtu = ETH_MIN_MTU;
|
| 2806 | netdev->max_mtu = MAX_STD_JUMBO_FRAME_SIZE;
|
| 2807 |
|
| 2808 | spin_lock_bh(&hw->mbx_lock);
|
| 2809 |
|
| 2810 |
|
| 2811 | err = hw->mac.ops.reset_hw(hw);
|
| 2812 | if (err) {
|
| 2813 | dev_info(&pdev->dev,
|
| 2814 | "PF still in reset state. Is the PF interface up?\n");
|
| 2815 | } else {
|
| 2816 | err = hw->mac.ops.read_mac_addr(hw);
|
| 2817 | if (err)
|
| 2818 | dev_info(&pdev->dev, "Error reading MAC address.\n");
|
| 2819 | else if (is_zero_ether_addr(adapter->hw.mac.addr))
|
| 2820 | dev_info(&pdev->dev,
|
| 2821 | "MAC address not assigned by administrator.\n");
|
| 2822 | eth_hw_addr_set(netdev, adapter->hw.mac.addr);
|
| 2823 | }
|
| 2824 |
|
| 2825 | spin_unlock_bh(&hw->mbx_lock);
|
| 2826 |
|
| 2827 | if (!is_valid_ether_addr(netdev->dev_addr)) {
|
| 2828 | dev_info(&pdev->dev, "Assigning random MAC address.\n");
|
| 2829 | eth_hw_addr_random(netdev);
|
| 2830 | memcpy(adapter->hw.mac.addr, netdev->dev_addr,
|
| 2831 | netdev->addr_len);
|
| 2832 | }
|
| 2833 |
|
| 2834 | timer_setup(&adapter->watchdog_timer, igbvf_watchdog, 0);
|
| 2835 |
|
| 2836 | INIT_WORK(&adapter->reset_task, igbvf_reset_task);
|
| 2837 | INIT_WORK(&adapter->watchdog_task, igbvf_watchdog_task);
|
| 2838 |
|
| 2839 |
|
| 2840 | adapter->rx_ring->count = 1024;
|
| 2841 | adapter->tx_ring->count = 1024;
|
| 2842 |
|
| 2843 |
|
| 2844 | igbvf_reset(adapter);
|
| 2845 |
|
| 2846 |
|
| 2847 | if (adapter->hw.mac.type == e1000_vfadapt_i350)
|
| 2848 | adapter->flags |= IGBVF_FLAG_RX_LB_VLAN_BSWAP;
|
| 2849 |
|
| 2850 | strcpy(netdev->name, "eth%d");
|
| 2851 | err = register_netdev(netdev);
|
| 2852 | if (err)
|
| 2853 | goto err_hw_init;
|
| 2854 |
|
| 2855 |
|
| 2856 | netif_carrier_off(netdev);
|
| 2857 | netif_stop_queue(netdev);
|
| 2858 |
|
| 2859 | igbvf_print_device_info(adapter);
|
| 2860 |
|
| 2861 | igbvf_initialize_last_counter_stats(adapter);
|
| 2862 |
|
| 2863 | return 0;
|
| 2864 |
|
| 2865 | err_hw_init:
|
| 2866 | netif_napi_del(&adapter->rx_ring->napi);
|
| 2867 | kfree(adapter->tx_ring);
|
| 2868 | kfree(adapter->rx_ring);
|
| 2869 | err_sw_init:
|
| 2870 | igbvf_reset_interrupt_capability(adapter);
|
| 2871 | err_get_variants:
|
| 2872 | iounmap(adapter->hw.hw_addr);
|
| 2873 | err_ioremap:
|
| 2874 | free_netdev(netdev);
|
| 2875 | err_alloc_etherdev:
|
| 2876 | pci_release_regions(pdev);
|
| 2877 | err_pci_reg:
|
| 2878 | err_dma:
|
| 2879 | pci_disable_device(pdev);
|
| 2880 | return err;
|
| 2881 | }
|
| 2882 |
|
| 2883 | |
| 2884 | * igbvf_remove - Device Removal Routine
|
| 2885 | * @pdev: PCI device information struct
|
| 2886 | *
|
| 2887 | * igbvf_remove is called by the PCI subsystem to alert the driver
|
| 2888 | * that it should release a PCI device. The could be caused by a
|
| 2889 | * Hot-Plug event, or because the driver is going to be removed from
|
| 2890 | * memory.
|
| 2891 | *
|
| 2892 | static void igbvf_remove(struct pci_dev *pdev)
|
| 2893 | {
|
| 2894 | struct net_device *netdev = pci_get_drvdata(pdev);
|
| 2895 | struct igbvf_adapter *adapter = netdev_priv(netdev);
|
| 2896 | struct e1000_hw *hw = &adapter->hw;
|
| 2897 |
|
| 2898 | |
| 2899 | * disable it from being rescheduled.
|
| 2900 |
|
| 2901 | set_bit(__IGBVF_DOWN, &adapter->state);
|
| 2902 | timer_delete_sync(&adapter->watchdog_timer);
|
| 2903 |
|
| 2904 | cancel_work_sync(&adapter->reset_task);
|
| 2905 | cancel_work_sync(&adapter->watchdog_task);
|
| 2906 |
|
| 2907 | unregister_netdev(netdev);
|
| 2908 |
|
| 2909 | igbvf_reset_interrupt_capability(adapter);
|
| 2910 |
|
| 2911 | |
| 2912 | * Rx ring so that you do not end up with null pointer refs
|
| 2913 |
|
| 2914 | netif_napi_del(&adapter->rx_ring->napi);
|
| 2915 | kfree(adapter->tx_ring);
|
| 2916 | kfree(adapter->rx_ring);
|
| 2917 |
|
| 2918 | iounmap(hw->hw_addr);
|
| 2919 | if (hw->flash_address)
|
| 2920 | iounmap(hw->flash_address);
|
| 2921 | pci_release_regions(pdev);
|
| 2922 |
|
| 2923 | free_netdev(netdev);
|
| 2924 |
|
| 2925 | pci_disable_device(pdev);
|
| 2926 | }
|
| 2927 |
|
| 2928 |
|
| 2929 | static const struct pci_error_handlers igbvf_err_handler = {
|
| 2930 | .error_detected = igbvf_io_error_detected,
|
| 2931 | .slot_reset = igbvf_io_slot_reset,
|
| 2932 | .resume = igbvf_io_resume,
|
| 2933 | .reset_prepare = igbvf_io_prepare,
|
| 2934 | .reset_done = igbvf_io_reset_done,
|
| 2935 | };
|
| 2936 |
|
| 2937 | static const struct pci_device_id igbvf_pci_tbl[] = {
|
| 2938 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_82576_VF), .driver_data = board_vf },
|
| 2939 | { PCI_VDEVICE(INTEL, E1000_DEV_ID_I350_VF), .driver_data = board_i350_vf },
|
| 2940 | { }
|
| 2941 | };
|
| 2942 | MODULE_DEVICE_TABLE(pci, igbvf_pci_tbl);
|
| 2943 |
|
| 2944 | static DEFINE_SIMPLE_DEV_PM_OPS(igbvf_pm_ops, igbvf_suspend, igbvf_resume);
|
| 2945 |
|
| 2946 |
|
| 2947 | static struct pci_driver igbvf_driver = {
|
| 2948 | .name = igbvf_driver_name,
|
| 2949 | .id_table = igbvf_pci_tbl,
|
| 2950 | .probe = igbvf_probe,
|
| 2951 | .remove = igbvf_remove,
|
| 2952 | .driver.pm = pm_sleep_ptr(&igbvf_pm_ops),
|
| 2953 | .shutdown = igbvf_shutdown,
|
| 2954 | .err_handler = &igbvf_err_handler
|
| 2955 | };
|
| 2956 |
|
| 2957 | |
| 2958 | * igbvf_init_module - Driver Registration Routine
|
| 2959 | *
|
| 2960 | * igbvf_init_module is the first routine called when the driver is
|
| 2961 | * loaded. All it does is register with the PCI subsystem.
|
| 2962 | *
|
| 2963 | static int __init igbvf_init_module(void)
|
| 2964 | {
|
| 2965 | int ret;
|
| 2966 |
|
| 2967 | pr_info("%s\n", igbvf_driver_string);
|
| 2968 | pr_info("%s\n", igbvf_copyright);
|
| 2969 |
|
| 2970 | ret = pci_register_driver(&igbvf_driver);
|
| 2971 |
|
| 2972 | return ret;
|
| 2973 | }
|
| 2974 | module_init(igbvf_init_module);
|
| 2975 |
|
| 2976 | |
| 2977 | * igbvf_exit_module - Driver Exit Cleanup Routine
|
| 2978 | *
|
| 2979 | * igbvf_exit_module is called just before the driver is removed
|
| 2980 | * from memory.
|
| 2981 | *
|
| 2982 | static void __exit igbvf_exit_module(void)
|
| 2983 | {
|
| 2984 | pci_unregister_driver(&igbvf_driver);
|
| 2985 | }
|
| 2986 | module_exit(igbvf_exit_module);
|
| 2987 |
|
| 2988 | MODULE_DESCRIPTION("Intel(R) Gigabit Virtual Function Network Driver");
|
| 2989 | MODULE_LICENSE("GPL v2");
|
| 2990 |
|
| 2991 |
|