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