linux/drivers/net/vmxnet3/vmxnet3_drv.c
<<
>>
Prefs
   1/*
   2 * Linux driver for VMware's vmxnet3 ethernet NIC.
   3 *
   4 * Copyright (C) 2008-2009, VMware, Inc. All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License as published by the
   8 * Free Software Foundation; version 2 of the License and no later version.
   9 *
  10 * This program is distributed in the hope that it will be useful, but
  11 * WITHOUT ANY WARRANTY; without even the implied warranty of
  12 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
  13 * NON INFRINGEMENT. See the GNU General Public License for more
  14 * details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  19 *
  20 * The full GNU General Public License is included in this distribution in
  21 * the file called "COPYING".
  22 *
  23 * Maintained by: Shreyas Bhatewara <pv-drivers@vmware.com>
  24 *
  25 */
  26
  27#include "vmxnet3_int.h"
  28
  29char vmxnet3_driver_name[] = "vmxnet3";
  30#define VMXNET3_DRIVER_DESC "VMware vmxnet3 virtual NIC driver"
  31
  32
  33/*
  34 * PCI Device ID Table
  35 * Last entry must be all 0s
  36 */
  37static const struct pci_device_id vmxnet3_pciid_table[] = {
  38        {PCI_VDEVICE(VMWARE, PCI_DEVICE_ID_VMWARE_VMXNET3)},
  39        {0}
  40};
  41
  42MODULE_DEVICE_TABLE(pci, vmxnet3_pciid_table);
  43
  44static atomic_t devices_found;
  45
  46
  47/*
  48 *    Enable/Disable the given intr
  49 */
  50static void
  51vmxnet3_enable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
  52{
  53        VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 0);
  54}
  55
  56
  57static void
  58vmxnet3_disable_intr(struct vmxnet3_adapter *adapter, unsigned intr_idx)
  59{
  60        VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_IMR + intr_idx * 8, 1);
  61}
  62
  63
  64/*
  65 *    Enable/Disable all intrs used by the device
  66 */
  67static void
  68vmxnet3_enable_all_intrs(struct vmxnet3_adapter *adapter)
  69{
  70        int i;
  71
  72        for (i = 0; i < adapter->intr.num_intrs; i++)
  73                vmxnet3_enable_intr(adapter, i);
  74}
  75
  76
  77static void
  78vmxnet3_disable_all_intrs(struct vmxnet3_adapter *adapter)
  79{
  80        int i;
  81
  82        for (i = 0; i < adapter->intr.num_intrs; i++)
  83                vmxnet3_disable_intr(adapter, i);
  84}
  85
  86
  87static void
  88vmxnet3_ack_events(struct vmxnet3_adapter *adapter, u32 events)
  89{
  90        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_ECR, events);
  91}
  92
  93
  94static bool
  95vmxnet3_tq_stopped(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
  96{
  97        return netif_queue_stopped(adapter->netdev);
  98}
  99
 100
 101static void
 102vmxnet3_tq_start(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
 103{
 104        tq->stopped = false;
 105        netif_start_queue(adapter->netdev);
 106}
 107
 108
 109static void
 110vmxnet3_tq_wake(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
 111{
 112        tq->stopped = false;
 113        netif_wake_queue(adapter->netdev);
 114}
 115
 116
 117static void
 118vmxnet3_tq_stop(struct vmxnet3_tx_queue *tq, struct vmxnet3_adapter *adapter)
 119{
 120        tq->stopped = true;
 121        tq->num_stop++;
 122        netif_stop_queue(adapter->netdev);
 123}
 124
 125
 126/*
 127 * Check the link state. This may start or stop the tx queue.
 128 */
 129static void
 130vmxnet3_check_link(struct vmxnet3_adapter *adapter)
 131{
 132        u32 ret;
 133
 134        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_GET_LINK);
 135        ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
 136        adapter->link_speed = ret >> 16;
 137        if (ret & 1) { /* Link is up. */
 138                printk(KERN_INFO "%s: NIC Link is Up %d Mbps\n",
 139                       adapter->netdev->name, adapter->link_speed);
 140                if (!netif_carrier_ok(adapter->netdev))
 141                        netif_carrier_on(adapter->netdev);
 142
 143                vmxnet3_tq_start(&adapter->tx_queue, adapter);
 144        } else {
 145                printk(KERN_INFO "%s: NIC Link is Down\n",
 146                       adapter->netdev->name);
 147                if (netif_carrier_ok(adapter->netdev))
 148                        netif_carrier_off(adapter->netdev);
 149
 150                vmxnet3_tq_stop(&adapter->tx_queue, adapter);
 151        }
 152}
 153
 154
 155static void
 156vmxnet3_process_events(struct vmxnet3_adapter *adapter)
 157{
 158        u32 events = adapter->shared->ecr;
 159        if (!events)
 160                return;
 161
 162        vmxnet3_ack_events(adapter, events);
 163
 164        /* Check if link state has changed */
 165        if (events & VMXNET3_ECR_LINK)
 166                vmxnet3_check_link(adapter);
 167
 168        /* Check if there is an error on xmit/recv queues */
 169        if (events & (VMXNET3_ECR_TQERR | VMXNET3_ECR_RQERR)) {
 170                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
 171                                       VMXNET3_CMD_GET_QUEUE_STATUS);
 172
 173                if (adapter->tqd_start->status.stopped) {
 174                        printk(KERN_ERR "%s: tq error 0x%x\n",
 175                               adapter->netdev->name,
 176                               adapter->tqd_start->status.error);
 177                }
 178                if (adapter->rqd_start->status.stopped) {
 179                        printk(KERN_ERR "%s: rq error 0x%x\n",
 180                               adapter->netdev->name,
 181                               adapter->rqd_start->status.error);
 182                }
 183
 184                schedule_work(&adapter->work);
 185        }
 186}
 187
 188
 189static void
 190vmxnet3_unmap_tx_buf(struct vmxnet3_tx_buf_info *tbi,
 191                     struct pci_dev *pdev)
 192{
 193        if (tbi->map_type == VMXNET3_MAP_SINGLE)
 194                pci_unmap_single(pdev, tbi->dma_addr, tbi->len,
 195                                 PCI_DMA_TODEVICE);
 196        else if (tbi->map_type == VMXNET3_MAP_PAGE)
 197                pci_unmap_page(pdev, tbi->dma_addr, tbi->len,
 198                               PCI_DMA_TODEVICE);
 199        else
 200                BUG_ON(tbi->map_type != VMXNET3_MAP_NONE);
 201
 202        tbi->map_type = VMXNET3_MAP_NONE; /* to help debugging */
 203}
 204
 205
 206static int
 207vmxnet3_unmap_pkt(u32 eop_idx, struct vmxnet3_tx_queue *tq,
 208                  struct pci_dev *pdev, struct vmxnet3_adapter *adapter)
 209{
 210        struct sk_buff *skb;
 211        int entries = 0;
 212
 213        /* no out of order completion */
 214        BUG_ON(tq->buf_info[eop_idx].sop_idx != tq->tx_ring.next2comp);
 215        BUG_ON(tq->tx_ring.base[eop_idx].txd.eop != 1);
 216
 217        skb = tq->buf_info[eop_idx].skb;
 218        BUG_ON(skb == NULL);
 219        tq->buf_info[eop_idx].skb = NULL;
 220
 221        VMXNET3_INC_RING_IDX_ONLY(eop_idx, tq->tx_ring.size);
 222
 223        while (tq->tx_ring.next2comp != eop_idx) {
 224                vmxnet3_unmap_tx_buf(tq->buf_info + tq->tx_ring.next2comp,
 225                                     pdev);
 226
 227                /* update next2comp w/o tx_lock. Since we are marking more,
 228                 * instead of less, tx ring entries avail, the worst case is
 229                 * that the tx routine incorrectly re-queues a pkt due to
 230                 * insufficient tx ring entries.
 231                 */
 232                vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
 233                entries++;
 234        }
 235
 236        dev_kfree_skb_any(skb);
 237        return entries;
 238}
 239
 240
 241static int
 242vmxnet3_tq_tx_complete(struct vmxnet3_tx_queue *tq,
 243                        struct vmxnet3_adapter *adapter)
 244{
 245        int completed = 0;
 246        union Vmxnet3_GenericDesc *gdesc;
 247
 248        gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
 249        while (gdesc->tcd.gen == tq->comp_ring.gen) {
 250                completed += vmxnet3_unmap_pkt(gdesc->tcd.txdIdx, tq,
 251                                               adapter->pdev, adapter);
 252
 253                vmxnet3_comp_ring_adv_next2proc(&tq->comp_ring);
 254                gdesc = tq->comp_ring.base + tq->comp_ring.next2proc;
 255        }
 256
 257        if (completed) {
 258                spin_lock(&tq->tx_lock);
 259                if (unlikely(vmxnet3_tq_stopped(tq, adapter) &&
 260                             vmxnet3_cmd_ring_desc_avail(&tq->tx_ring) >
 261                             VMXNET3_WAKE_QUEUE_THRESHOLD(tq) &&
 262                             netif_carrier_ok(adapter->netdev))) {
 263                        vmxnet3_tq_wake(tq, adapter);
 264                }
 265                spin_unlock(&tq->tx_lock);
 266        }
 267        return completed;
 268}
 269
 270
 271static void
 272vmxnet3_tq_cleanup(struct vmxnet3_tx_queue *tq,
 273                   struct vmxnet3_adapter *adapter)
 274{
 275        int i;
 276
 277        while (tq->tx_ring.next2comp != tq->tx_ring.next2fill) {
 278                struct vmxnet3_tx_buf_info *tbi;
 279                union Vmxnet3_GenericDesc *gdesc;
 280
 281                tbi = tq->buf_info + tq->tx_ring.next2comp;
 282                gdesc = tq->tx_ring.base + tq->tx_ring.next2comp;
 283
 284                vmxnet3_unmap_tx_buf(tbi, adapter->pdev);
 285                if (tbi->skb) {
 286                        dev_kfree_skb_any(tbi->skb);
 287                        tbi->skb = NULL;
 288                }
 289                vmxnet3_cmd_ring_adv_next2comp(&tq->tx_ring);
 290        }
 291
 292        /* sanity check, verify all buffers are indeed unmapped and freed */
 293        for (i = 0; i < tq->tx_ring.size; i++) {
 294                BUG_ON(tq->buf_info[i].skb != NULL ||
 295                       tq->buf_info[i].map_type != VMXNET3_MAP_NONE);
 296        }
 297
 298        tq->tx_ring.gen = VMXNET3_INIT_GEN;
 299        tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
 300
 301        tq->comp_ring.gen = VMXNET3_INIT_GEN;
 302        tq->comp_ring.next2proc = 0;
 303}
 304
 305
 306void
 307vmxnet3_tq_destroy(struct vmxnet3_tx_queue *tq,
 308                   struct vmxnet3_adapter *adapter)
 309{
 310        if (tq->tx_ring.base) {
 311                pci_free_consistent(adapter->pdev, tq->tx_ring.size *
 312                                    sizeof(struct Vmxnet3_TxDesc),
 313                                    tq->tx_ring.base, tq->tx_ring.basePA);
 314                tq->tx_ring.base = NULL;
 315        }
 316        if (tq->data_ring.base) {
 317                pci_free_consistent(adapter->pdev, tq->data_ring.size *
 318                                    sizeof(struct Vmxnet3_TxDataDesc),
 319                                    tq->data_ring.base, tq->data_ring.basePA);
 320                tq->data_ring.base = NULL;
 321        }
 322        if (tq->comp_ring.base) {
 323                pci_free_consistent(adapter->pdev, tq->comp_ring.size *
 324                                    sizeof(struct Vmxnet3_TxCompDesc),
 325                                    tq->comp_ring.base, tq->comp_ring.basePA);
 326                tq->comp_ring.base = NULL;
 327        }
 328        kfree(tq->buf_info);
 329        tq->buf_info = NULL;
 330}
 331
 332
 333static void
 334vmxnet3_tq_init(struct vmxnet3_tx_queue *tq,
 335                struct vmxnet3_adapter *adapter)
 336{
 337        int i;
 338
 339        /* reset the tx ring contents to 0 and reset the tx ring states */
 340        memset(tq->tx_ring.base, 0, tq->tx_ring.size *
 341               sizeof(struct Vmxnet3_TxDesc));
 342        tq->tx_ring.next2fill = tq->tx_ring.next2comp = 0;
 343        tq->tx_ring.gen = VMXNET3_INIT_GEN;
 344
 345        memset(tq->data_ring.base, 0, tq->data_ring.size *
 346               sizeof(struct Vmxnet3_TxDataDesc));
 347
 348        /* reset the tx comp ring contents to 0 and reset comp ring states */
 349        memset(tq->comp_ring.base, 0, tq->comp_ring.size *
 350               sizeof(struct Vmxnet3_TxCompDesc));
 351        tq->comp_ring.next2proc = 0;
 352        tq->comp_ring.gen = VMXNET3_INIT_GEN;
 353
 354        /* reset the bookkeeping data */
 355        memset(tq->buf_info, 0, sizeof(tq->buf_info[0]) * tq->tx_ring.size);
 356        for (i = 0; i < tq->tx_ring.size; i++)
 357                tq->buf_info[i].map_type = VMXNET3_MAP_NONE;
 358
 359        /* stats are not reset */
 360}
 361
 362
 363static int
 364vmxnet3_tq_create(struct vmxnet3_tx_queue *tq,
 365                  struct vmxnet3_adapter *adapter)
 366{
 367        BUG_ON(tq->tx_ring.base || tq->data_ring.base ||
 368               tq->comp_ring.base || tq->buf_info);
 369
 370        tq->tx_ring.base = pci_alloc_consistent(adapter->pdev, tq->tx_ring.size
 371                           * sizeof(struct Vmxnet3_TxDesc),
 372                           &tq->tx_ring.basePA);
 373        if (!tq->tx_ring.base) {
 374                printk(KERN_ERR "%s: failed to allocate tx ring\n",
 375                       adapter->netdev->name);
 376                goto err;
 377        }
 378
 379        tq->data_ring.base = pci_alloc_consistent(adapter->pdev,
 380                             tq->data_ring.size *
 381                             sizeof(struct Vmxnet3_TxDataDesc),
 382                             &tq->data_ring.basePA);
 383        if (!tq->data_ring.base) {
 384                printk(KERN_ERR "%s: failed to allocate data ring\n",
 385                       adapter->netdev->name);
 386                goto err;
 387        }
 388
 389        tq->comp_ring.base = pci_alloc_consistent(adapter->pdev,
 390                             tq->comp_ring.size *
 391                             sizeof(struct Vmxnet3_TxCompDesc),
 392                             &tq->comp_ring.basePA);
 393        if (!tq->comp_ring.base) {
 394                printk(KERN_ERR "%s: failed to allocate tx comp ring\n",
 395                       adapter->netdev->name);
 396                goto err;
 397        }
 398
 399        tq->buf_info = kcalloc(tq->tx_ring.size, sizeof(tq->buf_info[0]),
 400                               GFP_KERNEL);
 401        if (!tq->buf_info) {
 402                printk(KERN_ERR "%s: failed to allocate tx bufinfo\n",
 403                       adapter->netdev->name);
 404                goto err;
 405        }
 406
 407        return 0;
 408
 409err:
 410        vmxnet3_tq_destroy(tq, adapter);
 411        return -ENOMEM;
 412}
 413
 414
 415/*
 416 *    starting from ring->next2fill, allocate rx buffers for the given ring
 417 *    of the rx queue and update the rx desc. stop after @num_to_alloc buffers
 418 *    are allocated or allocation fails
 419 */
 420
 421static int
 422vmxnet3_rq_alloc_rx_buf(struct vmxnet3_rx_queue *rq, u32 ring_idx,
 423                        int num_to_alloc, struct vmxnet3_adapter *adapter)
 424{
 425        int num_allocated = 0;
 426        struct vmxnet3_rx_buf_info *rbi_base = rq->buf_info[ring_idx];
 427        struct vmxnet3_cmd_ring *ring = &rq->rx_ring[ring_idx];
 428        u32 val;
 429
 430        while (num_allocated < num_to_alloc) {
 431                struct vmxnet3_rx_buf_info *rbi;
 432                union Vmxnet3_GenericDesc *gd;
 433
 434                rbi = rbi_base + ring->next2fill;
 435                gd = ring->base + ring->next2fill;
 436
 437                if (rbi->buf_type == VMXNET3_RX_BUF_SKB) {
 438                        if (rbi->skb == NULL) {
 439                                rbi->skb = dev_alloc_skb(rbi->len +
 440                                                         NET_IP_ALIGN);
 441                                if (unlikely(rbi->skb == NULL)) {
 442                                        rq->stats.rx_buf_alloc_failure++;
 443                                        break;
 444                                }
 445                                rbi->skb->dev = adapter->netdev;
 446
 447                                skb_reserve(rbi->skb, NET_IP_ALIGN);
 448                                rbi->dma_addr = pci_map_single(adapter->pdev,
 449                                                rbi->skb->data, rbi->len,
 450                                                PCI_DMA_FROMDEVICE);
 451                        } else {
 452                                /* rx buffer skipped by the device */
 453                        }
 454                        val = VMXNET3_RXD_BTYPE_HEAD << VMXNET3_RXD_BTYPE_SHIFT;
 455                } else {
 456                        BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_PAGE ||
 457                               rbi->len  != PAGE_SIZE);
 458
 459                        if (rbi->page == NULL) {
 460                                rbi->page = alloc_page(GFP_ATOMIC);
 461                                if (unlikely(rbi->page == NULL)) {
 462                                        rq->stats.rx_buf_alloc_failure++;
 463                                        break;
 464                                }
 465                                rbi->dma_addr = pci_map_page(adapter->pdev,
 466                                                rbi->page, 0, PAGE_SIZE,
 467                                                PCI_DMA_FROMDEVICE);
 468                        } else {
 469                                /* rx buffers skipped by the device */
 470                        }
 471                        val = VMXNET3_RXD_BTYPE_BODY << VMXNET3_RXD_BTYPE_SHIFT;
 472                }
 473
 474                BUG_ON(rbi->dma_addr == 0);
 475                gd->rxd.addr = rbi->dma_addr;
 476                gd->dword[2] = (ring->gen << VMXNET3_RXD_GEN_SHIFT) | val |
 477                                rbi->len;
 478
 479                num_allocated++;
 480                vmxnet3_cmd_ring_adv_next2fill(ring);
 481        }
 482        rq->uncommitted[ring_idx] += num_allocated;
 483
 484        dev_dbg(&adapter->netdev->dev,
 485                "alloc_rx_buf: %d allocated, next2fill %u, next2comp "
 486                "%u, uncommited %u\n", num_allocated, ring->next2fill,
 487                ring->next2comp, rq->uncommitted[ring_idx]);
 488
 489        /* so that the device can distinguish a full ring and an empty ring */
 490        BUG_ON(num_allocated != 0 && ring->next2fill == ring->next2comp);
 491
 492        return num_allocated;
 493}
 494
 495
 496static void
 497vmxnet3_append_frag(struct sk_buff *skb, struct Vmxnet3_RxCompDesc *rcd,
 498                    struct vmxnet3_rx_buf_info *rbi)
 499{
 500        struct skb_frag_struct *frag = skb_shinfo(skb)->frags +
 501                skb_shinfo(skb)->nr_frags;
 502
 503        BUG_ON(skb_shinfo(skb)->nr_frags >= MAX_SKB_FRAGS);
 504
 505        frag->page = rbi->page;
 506        frag->page_offset = 0;
 507        frag->size = rcd->len;
 508        skb->data_len += frag->size;
 509        skb_shinfo(skb)->nr_frags++;
 510}
 511
 512
 513static void
 514vmxnet3_map_pkt(struct sk_buff *skb, struct vmxnet3_tx_ctx *ctx,
 515                struct vmxnet3_tx_queue *tq, struct pci_dev *pdev,
 516                struct vmxnet3_adapter *adapter)
 517{
 518        u32 dw2, len;
 519        unsigned long buf_offset;
 520        int i;
 521        union Vmxnet3_GenericDesc *gdesc;
 522        struct vmxnet3_tx_buf_info *tbi = NULL;
 523
 524        BUG_ON(ctx->copy_size > skb_headlen(skb));
 525
 526        /* use the previous gen bit for the SOP desc */
 527        dw2 = (tq->tx_ring.gen ^ 0x1) << VMXNET3_TXD_GEN_SHIFT;
 528
 529        ctx->sop_txd = tq->tx_ring.base + tq->tx_ring.next2fill;
 530        gdesc = ctx->sop_txd; /* both loops below can be skipped */
 531
 532        /* no need to map the buffer if headers are copied */
 533        if (ctx->copy_size) {
 534                ctx->sop_txd->txd.addr = tq->data_ring.basePA +
 535                                        tq->tx_ring.next2fill *
 536                                        sizeof(struct Vmxnet3_TxDataDesc);
 537                ctx->sop_txd->dword[2] = dw2 | ctx->copy_size;
 538                ctx->sop_txd->dword[3] = 0;
 539
 540                tbi = tq->buf_info + tq->tx_ring.next2fill;
 541                tbi->map_type = VMXNET3_MAP_NONE;
 542
 543                dev_dbg(&adapter->netdev->dev,
 544                        "txd[%u]: 0x%Lx 0x%x 0x%x\n",
 545                        tq->tx_ring.next2fill, ctx->sop_txd->txd.addr,
 546                        ctx->sop_txd->dword[2], ctx->sop_txd->dword[3]);
 547                vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
 548
 549                /* use the right gen for non-SOP desc */
 550                dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
 551        }
 552
 553        /* linear part can use multiple tx desc if it's big */
 554        len = skb_headlen(skb) - ctx->copy_size;
 555        buf_offset = ctx->copy_size;
 556        while (len) {
 557                u32 buf_size;
 558
 559                buf_size = len > VMXNET3_MAX_TX_BUF_SIZE ?
 560                           VMXNET3_MAX_TX_BUF_SIZE : len;
 561
 562                tbi = tq->buf_info + tq->tx_ring.next2fill;
 563                tbi->map_type = VMXNET3_MAP_SINGLE;
 564                tbi->dma_addr = pci_map_single(adapter->pdev,
 565                                skb->data + buf_offset, buf_size,
 566                                PCI_DMA_TODEVICE);
 567
 568                tbi->len = buf_size; /* this automatically convert 2^14 to 0 */
 569
 570                gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
 571                BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
 572
 573                gdesc->txd.addr = tbi->dma_addr;
 574                gdesc->dword[2] = dw2 | buf_size;
 575                gdesc->dword[3] = 0;
 576
 577                dev_dbg(&adapter->netdev->dev,
 578                        "txd[%u]: 0x%Lx 0x%x 0x%x\n",
 579                        tq->tx_ring.next2fill, gdesc->txd.addr,
 580                        gdesc->dword[2], gdesc->dword[3]);
 581                vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
 582                dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
 583
 584                len -= buf_size;
 585                buf_offset += buf_size;
 586        }
 587
 588        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
 589                struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i];
 590
 591                tbi = tq->buf_info + tq->tx_ring.next2fill;
 592                tbi->map_type = VMXNET3_MAP_PAGE;
 593                tbi->dma_addr = pci_map_page(adapter->pdev, frag->page,
 594                                             frag->page_offset, frag->size,
 595                                             PCI_DMA_TODEVICE);
 596
 597                tbi->len = frag->size;
 598
 599                gdesc = tq->tx_ring.base + tq->tx_ring.next2fill;
 600                BUG_ON(gdesc->txd.gen == tq->tx_ring.gen);
 601
 602                gdesc->txd.addr = tbi->dma_addr;
 603                gdesc->dword[2] = dw2 | frag->size;
 604                gdesc->dword[3] = 0;
 605
 606                dev_dbg(&adapter->netdev->dev,
 607                        "txd[%u]: 0x%llu %u %u\n",
 608                        tq->tx_ring.next2fill, gdesc->txd.addr,
 609                        gdesc->dword[2], gdesc->dword[3]);
 610                vmxnet3_cmd_ring_adv_next2fill(&tq->tx_ring);
 611                dw2 = tq->tx_ring.gen << VMXNET3_TXD_GEN_SHIFT;
 612        }
 613
 614        ctx->eop_txd = gdesc;
 615
 616        /* set the last buf_info for the pkt */
 617        tbi->skb = skb;
 618        tbi->sop_idx = ctx->sop_txd - tq->tx_ring.base;
 619}
 620
 621
 622/*
 623 *    parse and copy relevant protocol headers:
 624 *      For a tso pkt, relevant headers are L2/3/4 including options
 625 *      For a pkt requesting csum offloading, they are L2/3 and may include L4
 626 *      if it's a TCP/UDP pkt
 627 *
 628 * Returns:
 629 *    -1:  error happens during parsing
 630 *     0:  protocol headers parsed, but too big to be copied
 631 *     1:  protocol headers parsed and copied
 632 *
 633 * Other effects:
 634 *    1. related *ctx fields are updated.
 635 *    2. ctx->copy_size is # of bytes copied
 636 *    3. the portion copied is guaranteed to be in the linear part
 637 *
 638 */
 639static int
 640vmxnet3_parse_and_copy_hdr(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
 641                           struct vmxnet3_tx_ctx *ctx,
 642                           struct vmxnet3_adapter *adapter)
 643{
 644        struct Vmxnet3_TxDataDesc *tdd;
 645
 646        if (ctx->mss) {
 647                ctx->eth_ip_hdr_size = skb_transport_offset(skb);
 648                ctx->l4_hdr_size = ((struct tcphdr *)
 649                                   skb_transport_header(skb))->doff * 4;
 650                ctx->copy_size = ctx->eth_ip_hdr_size + ctx->l4_hdr_size;
 651        } else {
 652                unsigned int pull_size;
 653
 654                if (skb->ip_summed == CHECKSUM_PARTIAL) {
 655                        ctx->eth_ip_hdr_size = skb_transport_offset(skb);
 656
 657                        if (ctx->ipv4) {
 658                                struct iphdr *iph = (struct iphdr *)
 659                                                    skb_network_header(skb);
 660                                if (iph->protocol == IPPROTO_TCP) {
 661                                        pull_size = ctx->eth_ip_hdr_size +
 662                                                    sizeof(struct tcphdr);
 663
 664                                        if (unlikely(!pskb_may_pull(skb,
 665                                                                pull_size))) {
 666                                                goto err;
 667                                        }
 668                                        ctx->l4_hdr_size = ((struct tcphdr *)
 669                                           skb_transport_header(skb))->doff * 4;
 670                                } else if (iph->protocol == IPPROTO_UDP) {
 671                                        ctx->l4_hdr_size =
 672                                                        sizeof(struct udphdr);
 673                                } else {
 674                                        ctx->l4_hdr_size = 0;
 675                                }
 676                        } else {
 677                                /* for simplicity, don't copy L4 headers */
 678                                ctx->l4_hdr_size = 0;
 679                        }
 680                        ctx->copy_size = ctx->eth_ip_hdr_size +
 681                                         ctx->l4_hdr_size;
 682                } else {
 683                        ctx->eth_ip_hdr_size = 0;
 684                        ctx->l4_hdr_size = 0;
 685                        /* copy as much as allowed */
 686                        ctx->copy_size = min((unsigned int)VMXNET3_HDR_COPY_SIZE
 687                                             , skb_headlen(skb));
 688                }
 689
 690                /* make sure headers are accessible directly */
 691                if (unlikely(!pskb_may_pull(skb, ctx->copy_size)))
 692                        goto err;
 693        }
 694
 695        if (unlikely(ctx->copy_size > VMXNET3_HDR_COPY_SIZE)) {
 696                tq->stats.oversized_hdr++;
 697                ctx->copy_size = 0;
 698                return 0;
 699        }
 700
 701        tdd = tq->data_ring.base + tq->tx_ring.next2fill;
 702
 703        memcpy(tdd->data, skb->data, ctx->copy_size);
 704        dev_dbg(&adapter->netdev->dev,
 705                "copy %u bytes to dataRing[%u]\n",
 706                ctx->copy_size, tq->tx_ring.next2fill);
 707        return 1;
 708
 709err:
 710        return -1;
 711}
 712
 713
 714static void
 715vmxnet3_prepare_tso(struct sk_buff *skb,
 716                    struct vmxnet3_tx_ctx *ctx)
 717{
 718        struct tcphdr *tcph = (struct tcphdr *)skb_transport_header(skb);
 719        if (ctx->ipv4) {
 720                struct iphdr *iph = (struct iphdr *)skb_network_header(skb);
 721                iph->check = 0;
 722                tcph->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, 0,
 723                                                 IPPROTO_TCP, 0);
 724        } else {
 725                struct ipv6hdr *iph = (struct ipv6hdr *)skb_network_header(skb);
 726                tcph->check = ~csum_ipv6_magic(&iph->saddr, &iph->daddr, 0,
 727                                               IPPROTO_TCP, 0);
 728        }
 729}
 730
 731
 732/*
 733 * Transmits a pkt thru a given tq
 734 * Returns:
 735 *    NETDEV_TX_OK:      descriptors are setup successfully
 736 *    NETDEV_TX_OK:      error occured, the pkt is dropped
 737 *    NETDEV_TX_BUSY:    tx ring is full, queue is stopped
 738 *
 739 * Side-effects:
 740 *    1. tx ring may be changed
 741 *    2. tq stats may be updated accordingly
 742 *    3. shared->txNumDeferred may be updated
 743 */
 744
 745static int
 746vmxnet3_tq_xmit(struct sk_buff *skb, struct vmxnet3_tx_queue *tq,
 747                struct vmxnet3_adapter *adapter, struct net_device *netdev)
 748{
 749        int ret;
 750        u32 count;
 751        unsigned long flags;
 752        struct vmxnet3_tx_ctx ctx;
 753        union Vmxnet3_GenericDesc *gdesc;
 754
 755        /* conservatively estimate # of descriptors to use */
 756        count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) +
 757                skb_shinfo(skb)->nr_frags + 1;
 758
 759        ctx.ipv4 = (skb->protocol == __constant_ntohs(ETH_P_IP));
 760
 761        ctx.mss = skb_shinfo(skb)->gso_size;
 762        if (ctx.mss) {
 763                if (skb_header_cloned(skb)) {
 764                        if (unlikely(pskb_expand_head(skb, 0, 0,
 765                                                      GFP_ATOMIC) != 0)) {
 766                                tq->stats.drop_tso++;
 767                                goto drop_pkt;
 768                        }
 769                        tq->stats.copy_skb_header++;
 770                }
 771                vmxnet3_prepare_tso(skb, &ctx);
 772        } else {
 773                if (unlikely(count > VMXNET3_MAX_TXD_PER_PKT)) {
 774
 775                        /* non-tso pkts must not use more than
 776                         * VMXNET3_MAX_TXD_PER_PKT entries
 777                         */
 778                        if (skb_linearize(skb) != 0) {
 779                                tq->stats.drop_too_many_frags++;
 780                                goto drop_pkt;
 781                        }
 782                        tq->stats.linearized++;
 783
 784                        /* recalculate the # of descriptors to use */
 785                        count = VMXNET3_TXD_NEEDED(skb_headlen(skb)) + 1;
 786                }
 787        }
 788
 789        ret = vmxnet3_parse_and_copy_hdr(skb, tq, &ctx, adapter);
 790        if (ret >= 0) {
 791                BUG_ON(ret <= 0 && ctx.copy_size != 0);
 792                /* hdrs parsed, check against other limits */
 793                if (ctx.mss) {
 794                        if (unlikely(ctx.eth_ip_hdr_size + ctx.l4_hdr_size >
 795                                     VMXNET3_MAX_TX_BUF_SIZE)) {
 796                                goto hdr_too_big;
 797                        }
 798                } else {
 799                        if (skb->ip_summed == CHECKSUM_PARTIAL) {
 800                                if (unlikely(ctx.eth_ip_hdr_size +
 801                                             skb->csum_offset >
 802                                             VMXNET3_MAX_CSUM_OFFSET)) {
 803                                        goto hdr_too_big;
 804                                }
 805                        }
 806                }
 807        } else {
 808                tq->stats.drop_hdr_inspect_err++;
 809                goto drop_pkt;
 810        }
 811
 812        spin_lock_irqsave(&tq->tx_lock, flags);
 813
 814        if (count > vmxnet3_cmd_ring_desc_avail(&tq->tx_ring)) {
 815                tq->stats.tx_ring_full++;
 816                dev_dbg(&adapter->netdev->dev,
 817                        "tx queue stopped on %s, next2comp %u"
 818                        " next2fill %u\n", adapter->netdev->name,
 819                        tq->tx_ring.next2comp, tq->tx_ring.next2fill);
 820
 821                vmxnet3_tq_stop(tq, adapter);
 822                spin_unlock_irqrestore(&tq->tx_lock, flags);
 823                return NETDEV_TX_BUSY;
 824        }
 825
 826        /* fill tx descs related to addr & len */
 827        vmxnet3_map_pkt(skb, &ctx, tq, adapter->pdev, adapter);
 828
 829        /* setup the EOP desc */
 830        ctx.eop_txd->dword[3] = VMXNET3_TXD_CQ | VMXNET3_TXD_EOP;
 831
 832        /* setup the SOP desc */
 833        gdesc = ctx.sop_txd;
 834        if (ctx.mss) {
 835                gdesc->txd.hlen = ctx.eth_ip_hdr_size + ctx.l4_hdr_size;
 836                gdesc->txd.om = VMXNET3_OM_TSO;
 837                gdesc->txd.msscof = ctx.mss;
 838                tq->shared->txNumDeferred += (skb->len - gdesc->txd.hlen +
 839                                             ctx.mss - 1) / ctx.mss;
 840        } else {
 841                if (skb->ip_summed == CHECKSUM_PARTIAL) {
 842                        gdesc->txd.hlen = ctx.eth_ip_hdr_size;
 843                        gdesc->txd.om = VMXNET3_OM_CSUM;
 844                        gdesc->txd.msscof = ctx.eth_ip_hdr_size +
 845                                            skb->csum_offset;
 846                } else {
 847                        gdesc->txd.om = 0;
 848                        gdesc->txd.msscof = 0;
 849                }
 850                tq->shared->txNumDeferred++;
 851        }
 852
 853        if (vlan_tx_tag_present(skb)) {
 854                gdesc->txd.ti = 1;
 855                gdesc->txd.tci = vlan_tx_tag_get(skb);
 856        }
 857
 858        wmb();
 859
 860        /* finally flips the GEN bit of the SOP desc */
 861        gdesc->dword[2] ^= VMXNET3_TXD_GEN;
 862        dev_dbg(&adapter->netdev->dev,
 863                "txd[%u]: SOP 0x%Lx 0x%x 0x%x\n",
 864                (u32)((union Vmxnet3_GenericDesc *)ctx.sop_txd -
 865                tq->tx_ring.base), gdesc->txd.addr, gdesc->dword[2],
 866                gdesc->dword[3]);
 867
 868        spin_unlock_irqrestore(&tq->tx_lock, flags);
 869
 870        if (tq->shared->txNumDeferred >= tq->shared->txThreshold) {
 871                tq->shared->txNumDeferred = 0;
 872                VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_TXPROD,
 873                                       tq->tx_ring.next2fill);
 874        }
 875        netdev->trans_start = jiffies;
 876
 877        return NETDEV_TX_OK;
 878
 879hdr_too_big:
 880        tq->stats.drop_oversized_hdr++;
 881drop_pkt:
 882        tq->stats.drop_total++;
 883        dev_kfree_skb(skb);
 884        return NETDEV_TX_OK;
 885}
 886
 887
 888static netdev_tx_t
 889vmxnet3_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
 890{
 891        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
 892        struct vmxnet3_tx_queue *tq = &adapter->tx_queue;
 893
 894        return vmxnet3_tq_xmit(skb, tq, adapter, netdev);
 895}
 896
 897
 898static void
 899vmxnet3_rx_csum(struct vmxnet3_adapter *adapter,
 900                struct sk_buff *skb,
 901                union Vmxnet3_GenericDesc *gdesc)
 902{
 903        if (!gdesc->rcd.cnc && adapter->rxcsum) {
 904                /* typical case: TCP/UDP over IP and both csums are correct */
 905                if ((gdesc->dword[3] & VMXNET3_RCD_CSUM_OK) ==
 906                                                        VMXNET3_RCD_CSUM_OK) {
 907                        skb->ip_summed = CHECKSUM_UNNECESSARY;
 908                        BUG_ON(!(gdesc->rcd.tcp || gdesc->rcd.udp));
 909                        BUG_ON(!(gdesc->rcd.v4  || gdesc->rcd.v6));
 910                        BUG_ON(gdesc->rcd.frg);
 911                } else {
 912                        if (gdesc->rcd.csum) {
 913                                skb->csum = htons(gdesc->rcd.csum);
 914                                skb->ip_summed = CHECKSUM_PARTIAL;
 915                        } else {
 916                                skb->ip_summed = CHECKSUM_NONE;
 917                        }
 918                }
 919        } else {
 920                skb->ip_summed = CHECKSUM_NONE;
 921        }
 922}
 923
 924
 925static void
 926vmxnet3_rx_error(struct vmxnet3_rx_queue *rq, struct Vmxnet3_RxCompDesc *rcd,
 927                 struct vmxnet3_rx_ctx *ctx,  struct vmxnet3_adapter *adapter)
 928{
 929        rq->stats.drop_err++;
 930        if (!rcd->fcs)
 931                rq->stats.drop_fcs++;
 932
 933        rq->stats.drop_total++;
 934
 935        /*
 936         * We do not unmap and chain the rx buffer to the skb.
 937         * We basically pretend this buffer is not used and will be recycled
 938         * by vmxnet3_rq_alloc_rx_buf()
 939         */
 940
 941        /*
 942         * ctx->skb may be NULL if this is the first and the only one
 943         * desc for the pkt
 944         */
 945        if (ctx->skb)
 946                dev_kfree_skb_irq(ctx->skb);
 947
 948        ctx->skb = NULL;
 949}
 950
 951
 952static int
 953vmxnet3_rq_rx_complete(struct vmxnet3_rx_queue *rq,
 954                       struct vmxnet3_adapter *adapter, int quota)
 955{
 956        static u32 rxprod_reg[2] = {VMXNET3_REG_RXPROD, VMXNET3_REG_RXPROD2};
 957        u32 num_rxd = 0;
 958        struct Vmxnet3_RxCompDesc *rcd;
 959        struct vmxnet3_rx_ctx *ctx = &rq->rx_ctx;
 960
 961        rcd = &rq->comp_ring.base[rq->comp_ring.next2proc].rcd;
 962        while (rcd->gen == rq->comp_ring.gen) {
 963                struct vmxnet3_rx_buf_info *rbi;
 964                struct sk_buff *skb;
 965                int num_to_alloc;
 966                struct Vmxnet3_RxDesc *rxd;
 967                u32 idx, ring_idx;
 968
 969                if (num_rxd >= quota) {
 970                        /* we may stop even before we see the EOP desc of
 971                         * the current pkt
 972                         */
 973                        break;
 974                }
 975                num_rxd++;
 976
 977                idx = rcd->rxdIdx;
 978                ring_idx = rcd->rqID == rq->qid ? 0 : 1;
 979
 980                rxd = &rq->rx_ring[ring_idx].base[idx].rxd;
 981                rbi = rq->buf_info[ring_idx] + idx;
 982
 983                BUG_ON(rxd->addr != rbi->dma_addr || rxd->len != rbi->len);
 984
 985                if (unlikely(rcd->eop && rcd->err)) {
 986                        vmxnet3_rx_error(rq, rcd, ctx, adapter);
 987                        goto rcd_done;
 988                }
 989
 990                if (rcd->sop) { /* first buf of the pkt */
 991                        BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_HEAD ||
 992                               rcd->rqID != rq->qid);
 993
 994                        BUG_ON(rbi->buf_type != VMXNET3_RX_BUF_SKB);
 995                        BUG_ON(ctx->skb != NULL || rbi->skb == NULL);
 996
 997                        if (unlikely(rcd->len == 0)) {
 998                                /* Pretend the rx buffer is skipped. */
 999                                BUG_ON(!(rcd->sop && rcd->eop));
1000                                dev_dbg(&adapter->netdev->dev,
1001                                        "rxRing[%u][%u] 0 length\n",
1002                                        ring_idx, idx);
1003                                goto rcd_done;
1004                        }
1005
1006                        ctx->skb = rbi->skb;
1007                        rbi->skb = NULL;
1008
1009                        pci_unmap_single(adapter->pdev, rbi->dma_addr, rbi->len,
1010                                         PCI_DMA_FROMDEVICE);
1011
1012                        skb_put(ctx->skb, rcd->len);
1013                } else {
1014                        BUG_ON(ctx->skb == NULL);
1015                        /* non SOP buffer must be type 1 in most cases */
1016                        if (rbi->buf_type == VMXNET3_RX_BUF_PAGE) {
1017                                BUG_ON(rxd->btype != VMXNET3_RXD_BTYPE_BODY);
1018
1019                                if (rcd->len) {
1020                                        pci_unmap_page(adapter->pdev,
1021                                                       rbi->dma_addr, rbi->len,
1022                                                       PCI_DMA_FROMDEVICE);
1023
1024                                        vmxnet3_append_frag(ctx->skb, rcd, rbi);
1025                                        rbi->page = NULL;
1026                                }
1027                        } else {
1028                                /*
1029                                 * The only time a non-SOP buffer is type 0 is
1030                                 * when it's EOP and error flag is raised, which
1031                                 * has already been handled.
1032                                 */
1033                                BUG_ON(true);
1034                        }
1035                }
1036
1037                skb = ctx->skb;
1038                if (rcd->eop) {
1039                        skb->len += skb->data_len;
1040                        skb->truesize += skb->data_len;
1041
1042                        vmxnet3_rx_csum(adapter, skb,
1043                                        (union Vmxnet3_GenericDesc *)rcd);
1044                        skb->protocol = eth_type_trans(skb, adapter->netdev);
1045
1046                        if (unlikely(adapter->vlan_grp && rcd->ts)) {
1047                                vlan_hwaccel_receive_skb(skb,
1048                                                adapter->vlan_grp, rcd->tci);
1049                        } else {
1050                                netif_receive_skb(skb);
1051                        }
1052
1053                        adapter->netdev->last_rx = jiffies;
1054                        ctx->skb = NULL;
1055                }
1056
1057rcd_done:
1058                /* device may skip some rx descs */
1059                rq->rx_ring[ring_idx].next2comp = idx;
1060                VMXNET3_INC_RING_IDX_ONLY(rq->rx_ring[ring_idx].next2comp,
1061                                          rq->rx_ring[ring_idx].size);
1062
1063                /* refill rx buffers frequently to avoid starving the h/w */
1064                num_to_alloc = vmxnet3_cmd_ring_desc_avail(rq->rx_ring +
1065                                                           ring_idx);
1066                if (unlikely(num_to_alloc > VMXNET3_RX_ALLOC_THRESHOLD(rq,
1067                                                        ring_idx, adapter))) {
1068                        vmxnet3_rq_alloc_rx_buf(rq, ring_idx, num_to_alloc,
1069                                                adapter);
1070
1071                        /* if needed, update the register */
1072                        if (unlikely(rq->shared->updateRxProd)) {
1073                                VMXNET3_WRITE_BAR0_REG(adapter,
1074                                        rxprod_reg[ring_idx] + rq->qid * 8,
1075                                        rq->rx_ring[ring_idx].next2fill);
1076                                rq->uncommitted[ring_idx] = 0;
1077                        }
1078                }
1079
1080                vmxnet3_comp_ring_adv_next2proc(&rq->comp_ring);
1081                rcd = &rq->comp_ring.base[rq->comp_ring.next2proc].rcd;
1082        }
1083
1084        return num_rxd;
1085}
1086
1087
1088static void
1089vmxnet3_rq_cleanup(struct vmxnet3_rx_queue *rq,
1090                   struct vmxnet3_adapter *adapter)
1091{
1092        u32 i, ring_idx;
1093        struct Vmxnet3_RxDesc *rxd;
1094
1095        for (ring_idx = 0; ring_idx < 2; ring_idx++) {
1096                for (i = 0; i < rq->rx_ring[ring_idx].size; i++) {
1097                        rxd = &rq->rx_ring[ring_idx].base[i].rxd;
1098
1099                        if (rxd->btype == VMXNET3_RXD_BTYPE_HEAD &&
1100                                        rq->buf_info[ring_idx][i].skb) {
1101                                pci_unmap_single(adapter->pdev, rxd->addr,
1102                                                 rxd->len, PCI_DMA_FROMDEVICE);
1103                                dev_kfree_skb(rq->buf_info[ring_idx][i].skb);
1104                                rq->buf_info[ring_idx][i].skb = NULL;
1105                        } else if (rxd->btype == VMXNET3_RXD_BTYPE_BODY &&
1106                                        rq->buf_info[ring_idx][i].page) {
1107                                pci_unmap_page(adapter->pdev, rxd->addr,
1108                                               rxd->len, PCI_DMA_FROMDEVICE);
1109                                put_page(rq->buf_info[ring_idx][i].page);
1110                                rq->buf_info[ring_idx][i].page = NULL;
1111                        }
1112                }
1113
1114                rq->rx_ring[ring_idx].gen = VMXNET3_INIT_GEN;
1115                rq->rx_ring[ring_idx].next2fill =
1116                                        rq->rx_ring[ring_idx].next2comp = 0;
1117                rq->uncommitted[ring_idx] = 0;
1118        }
1119
1120        rq->comp_ring.gen = VMXNET3_INIT_GEN;
1121        rq->comp_ring.next2proc = 0;
1122}
1123
1124
1125void vmxnet3_rq_destroy(struct vmxnet3_rx_queue *rq,
1126                        struct vmxnet3_adapter *adapter)
1127{
1128        int i;
1129        int j;
1130
1131        /* all rx buffers must have already been freed */
1132        for (i = 0; i < 2; i++) {
1133                if (rq->buf_info[i]) {
1134                        for (j = 0; j < rq->rx_ring[i].size; j++)
1135                                BUG_ON(rq->buf_info[i][j].page != NULL);
1136                }
1137        }
1138
1139
1140        kfree(rq->buf_info[0]);
1141
1142        for (i = 0; i < 2; i++) {
1143                if (rq->rx_ring[i].base) {
1144                        pci_free_consistent(adapter->pdev, rq->rx_ring[i].size
1145                                            * sizeof(struct Vmxnet3_RxDesc),
1146                                            rq->rx_ring[i].base,
1147                                            rq->rx_ring[i].basePA);
1148                        rq->rx_ring[i].base = NULL;
1149                }
1150                rq->buf_info[i] = NULL;
1151        }
1152
1153        if (rq->comp_ring.base) {
1154                pci_free_consistent(adapter->pdev, rq->comp_ring.size *
1155                                    sizeof(struct Vmxnet3_RxCompDesc),
1156                                    rq->comp_ring.base, rq->comp_ring.basePA);
1157                rq->comp_ring.base = NULL;
1158        }
1159}
1160
1161
1162static int
1163vmxnet3_rq_init(struct vmxnet3_rx_queue *rq,
1164                struct vmxnet3_adapter  *adapter)
1165{
1166        int i;
1167
1168        /* initialize buf_info */
1169        for (i = 0; i < rq->rx_ring[0].size; i++) {
1170
1171                /* 1st buf for a pkt is skbuff */
1172                if (i % adapter->rx_buf_per_pkt == 0) {
1173                        rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_SKB;
1174                        rq->buf_info[0][i].len = adapter->skb_buf_size;
1175                } else { /* subsequent bufs for a pkt is frag */
1176                        rq->buf_info[0][i].buf_type = VMXNET3_RX_BUF_PAGE;
1177                        rq->buf_info[0][i].len = PAGE_SIZE;
1178                }
1179        }
1180        for (i = 0; i < rq->rx_ring[1].size; i++) {
1181                rq->buf_info[1][i].buf_type = VMXNET3_RX_BUF_PAGE;
1182                rq->buf_info[1][i].len = PAGE_SIZE;
1183        }
1184
1185        /* reset internal state and allocate buffers for both rings */
1186        for (i = 0; i < 2; i++) {
1187                rq->rx_ring[i].next2fill = rq->rx_ring[i].next2comp = 0;
1188                rq->uncommitted[i] = 0;
1189
1190                memset(rq->rx_ring[i].base, 0, rq->rx_ring[i].size *
1191                       sizeof(struct Vmxnet3_RxDesc));
1192                rq->rx_ring[i].gen = VMXNET3_INIT_GEN;
1193        }
1194        if (vmxnet3_rq_alloc_rx_buf(rq, 0, rq->rx_ring[0].size - 1,
1195                                    adapter) == 0) {
1196                /* at least has 1 rx buffer for the 1st ring */
1197                return -ENOMEM;
1198        }
1199        vmxnet3_rq_alloc_rx_buf(rq, 1, rq->rx_ring[1].size - 1, adapter);
1200
1201        /* reset the comp ring */
1202        rq->comp_ring.next2proc = 0;
1203        memset(rq->comp_ring.base, 0, rq->comp_ring.size *
1204               sizeof(struct Vmxnet3_RxCompDesc));
1205        rq->comp_ring.gen = VMXNET3_INIT_GEN;
1206
1207        /* reset rxctx */
1208        rq->rx_ctx.skb = NULL;
1209
1210        /* stats are not reset */
1211        return 0;
1212}
1213
1214
1215static int
1216vmxnet3_rq_create(struct vmxnet3_rx_queue *rq, struct vmxnet3_adapter *adapter)
1217{
1218        int i;
1219        size_t sz;
1220        struct vmxnet3_rx_buf_info *bi;
1221
1222        for (i = 0; i < 2; i++) {
1223
1224                sz = rq->rx_ring[i].size * sizeof(struct Vmxnet3_RxDesc);
1225                rq->rx_ring[i].base = pci_alloc_consistent(adapter->pdev, sz,
1226                                                        &rq->rx_ring[i].basePA);
1227                if (!rq->rx_ring[i].base) {
1228                        printk(KERN_ERR "%s: failed to allocate rx ring %d\n",
1229                               adapter->netdev->name, i);
1230                        goto err;
1231                }
1232        }
1233
1234        sz = rq->comp_ring.size * sizeof(struct Vmxnet3_RxCompDesc);
1235        rq->comp_ring.base = pci_alloc_consistent(adapter->pdev, sz,
1236                                                  &rq->comp_ring.basePA);
1237        if (!rq->comp_ring.base) {
1238                printk(KERN_ERR "%s: failed to allocate rx comp ring\n",
1239                       adapter->netdev->name);
1240                goto err;
1241        }
1242
1243        sz = sizeof(struct vmxnet3_rx_buf_info) * (rq->rx_ring[0].size +
1244                                                   rq->rx_ring[1].size);
1245        bi = kmalloc(sz, GFP_KERNEL);
1246        if (!bi) {
1247                printk(KERN_ERR "%s: failed to allocate rx bufinfo\n",
1248                       adapter->netdev->name);
1249                goto err;
1250        }
1251        memset(bi, 0, sz);
1252        rq->buf_info[0] = bi;
1253        rq->buf_info[1] = bi + rq->rx_ring[0].size;
1254
1255        return 0;
1256
1257err:
1258        vmxnet3_rq_destroy(rq, adapter);
1259        return -ENOMEM;
1260}
1261
1262
1263static int
1264vmxnet3_do_poll(struct vmxnet3_adapter *adapter, int budget)
1265{
1266        if (unlikely(adapter->shared->ecr))
1267                vmxnet3_process_events(adapter);
1268
1269        vmxnet3_tq_tx_complete(&adapter->tx_queue, adapter);
1270        return vmxnet3_rq_rx_complete(&adapter->rx_queue, adapter, budget);
1271}
1272
1273
1274static int
1275vmxnet3_poll(struct napi_struct *napi, int budget)
1276{
1277        struct vmxnet3_adapter *adapter = container_of(napi,
1278                                          struct vmxnet3_adapter, napi);
1279        int rxd_done;
1280
1281        rxd_done = vmxnet3_do_poll(adapter, budget);
1282
1283        if (rxd_done < budget) {
1284                napi_complete(napi);
1285                vmxnet3_enable_intr(adapter, 0);
1286        }
1287        return rxd_done;
1288}
1289
1290
1291/* Interrupt handler for vmxnet3  */
1292static irqreturn_t
1293vmxnet3_intr(int irq, void *dev_id)
1294{
1295        struct net_device *dev = dev_id;
1296        struct vmxnet3_adapter *adapter = netdev_priv(dev);
1297
1298        if (unlikely(adapter->intr.type == VMXNET3_IT_INTX)) {
1299                u32 icr = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_ICR);
1300                if (unlikely(icr == 0))
1301                        /* not ours */
1302                        return IRQ_NONE;
1303        }
1304
1305
1306        /* disable intr if needed */
1307        if (adapter->intr.mask_mode == VMXNET3_IMM_ACTIVE)
1308                vmxnet3_disable_intr(adapter, 0);
1309
1310        napi_schedule(&adapter->napi);
1311
1312        return IRQ_HANDLED;
1313}
1314
1315#ifdef CONFIG_NET_POLL_CONTROLLER
1316
1317
1318/* netpoll callback. */
1319static void
1320vmxnet3_netpoll(struct net_device *netdev)
1321{
1322        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1323        int irq;
1324
1325#ifdef CONFIG_PCI_MSI
1326        if (adapter->intr.type == VMXNET3_IT_MSIX)
1327                irq = adapter->intr.msix_entries[0].vector;
1328        else
1329#endif
1330                irq = adapter->pdev->irq;
1331
1332        disable_irq(irq);
1333        vmxnet3_intr(irq, netdev);
1334        enable_irq(irq);
1335}
1336#endif
1337
1338static int
1339vmxnet3_request_irqs(struct vmxnet3_adapter *adapter)
1340{
1341        int err;
1342
1343#ifdef CONFIG_PCI_MSI
1344        if (adapter->intr.type == VMXNET3_IT_MSIX) {
1345                /* we only use 1 MSI-X vector */
1346                err = request_irq(adapter->intr.msix_entries[0].vector,
1347                                  vmxnet3_intr, 0, adapter->netdev->name,
1348                                  adapter->netdev);
1349        } else
1350#endif
1351        if (adapter->intr.type == VMXNET3_IT_MSI) {
1352                err = request_irq(adapter->pdev->irq, vmxnet3_intr, 0,
1353                                  adapter->netdev->name, adapter->netdev);
1354        } else {
1355                err = request_irq(adapter->pdev->irq, vmxnet3_intr,
1356                                  IRQF_SHARED, adapter->netdev->name,
1357                                  adapter->netdev);
1358        }
1359
1360        if (err)
1361                printk(KERN_ERR "Failed to request irq %s (intr type:%d), error"
1362                       ":%d\n", adapter->netdev->name, adapter->intr.type, err);
1363
1364
1365        if (!err) {
1366                int i;
1367                /* init our intr settings */
1368                for (i = 0; i < adapter->intr.num_intrs; i++)
1369                        adapter->intr.mod_levels[i] = UPT1_IML_ADAPTIVE;
1370
1371                /* next setup intr index for all intr sources */
1372                adapter->tx_queue.comp_ring.intr_idx = 0;
1373                adapter->rx_queue.comp_ring.intr_idx = 0;
1374                adapter->intr.event_intr_idx = 0;
1375
1376                printk(KERN_INFO "%s: intr type %u, mode %u, %u vectors "
1377                       "allocated\n", adapter->netdev->name, adapter->intr.type,
1378                       adapter->intr.mask_mode, adapter->intr.num_intrs);
1379        }
1380
1381        return err;
1382}
1383
1384
1385static void
1386vmxnet3_free_irqs(struct vmxnet3_adapter *adapter)
1387{
1388        BUG_ON(adapter->intr.type == VMXNET3_IT_AUTO ||
1389               adapter->intr.num_intrs <= 0);
1390
1391        switch (adapter->intr.type) {
1392#ifdef CONFIG_PCI_MSI
1393        case VMXNET3_IT_MSIX:
1394        {
1395                int i;
1396
1397                for (i = 0; i < adapter->intr.num_intrs; i++)
1398                        free_irq(adapter->intr.msix_entries[i].vector,
1399                                 adapter->netdev);
1400                break;
1401        }
1402#endif
1403        case VMXNET3_IT_MSI:
1404                free_irq(adapter->pdev->irq, adapter->netdev);
1405                break;
1406        case VMXNET3_IT_INTX:
1407                free_irq(adapter->pdev->irq, adapter->netdev);
1408                break;
1409        default:
1410                BUG_ON(true);
1411        }
1412}
1413
1414
1415static void
1416vmxnet3_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp)
1417{
1418        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1419        struct Vmxnet3_DriverShared *shared = adapter->shared;
1420        u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1421
1422        if (grp) {
1423                /* add vlan rx stripping. */
1424                if (adapter->netdev->features & NETIF_F_HW_VLAN_RX) {
1425                        int i;
1426                        struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1427                        adapter->vlan_grp = grp;
1428
1429                        /* update FEATURES to device */
1430                        devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
1431                        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1432                                               VMXNET3_CMD_UPDATE_FEATURE);
1433                        /*
1434                         *  Clear entire vfTable; then enable untagged pkts.
1435                         *  Note: setting one entry in vfTable to non-zero turns
1436                         *  on VLAN rx filtering.
1437                         */
1438                        for (i = 0; i < VMXNET3_VFT_SIZE; i++)
1439                                vfTable[i] = 0;
1440
1441                        VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1442                        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1443                                               VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1444                } else {
1445                        printk(KERN_ERR "%s: vlan_rx_register when device has "
1446                               "no NETIF_F_HW_VLAN_RX\n", netdev->name);
1447                }
1448        } else {
1449                /* remove vlan rx stripping. */
1450                struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1451                adapter->vlan_grp = NULL;
1452
1453                if (devRead->misc.uptFeatures & UPT1_F_RXVLAN) {
1454                        int i;
1455
1456                        for (i = 0; i < VMXNET3_VFT_SIZE; i++) {
1457                                /* clear entire vfTable; this also disables
1458                                 * VLAN rx filtering
1459                                 */
1460                                vfTable[i] = 0;
1461                        }
1462                        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1463                                               VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1464
1465                        /* update FEATURES to device */
1466                        devRead->misc.uptFeatures &= ~UPT1_F_RXVLAN;
1467                        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1468                                               VMXNET3_CMD_UPDATE_FEATURE);
1469                }
1470        }
1471}
1472
1473
1474static void
1475vmxnet3_restore_vlan(struct vmxnet3_adapter *adapter)
1476{
1477        if (adapter->vlan_grp) {
1478                u16 vid;
1479                u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1480                bool activeVlan = false;
1481
1482                for (vid = 0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
1483                        if (vlan_group_get_device(adapter->vlan_grp, vid)) {
1484                                VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1485                                activeVlan = true;
1486                        }
1487                }
1488                if (activeVlan) {
1489                        /* continue to allow untagged pkts */
1490                        VMXNET3_SET_VFTABLE_ENTRY(vfTable, 0);
1491                }
1492        }
1493}
1494
1495
1496static void
1497vmxnet3_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
1498{
1499        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1500        u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1501
1502        VMXNET3_SET_VFTABLE_ENTRY(vfTable, vid);
1503        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1504                               VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1505}
1506
1507
1508static void
1509vmxnet3_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
1510{
1511        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1512        u32 *vfTable = adapter->shared->devRead.rxFilterConf.vfTable;
1513
1514        VMXNET3_CLEAR_VFTABLE_ENTRY(vfTable, vid);
1515        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1516                               VMXNET3_CMD_UPDATE_VLAN_FILTERS);
1517}
1518
1519
1520static u8 *
1521vmxnet3_copy_mc(struct net_device *netdev)
1522{
1523        u8 *buf = NULL;
1524        u32 sz = netdev->mc_count * ETH_ALEN;
1525
1526        /* struct Vmxnet3_RxFilterConf.mfTableLen is u16. */
1527        if (sz <= 0xffff) {
1528                /* We may be called with BH disabled */
1529                buf = kmalloc(sz, GFP_ATOMIC);
1530                if (buf) {
1531                        int i;
1532                        struct dev_mc_list *mc = netdev->mc_list;
1533
1534                        for (i = 0; i < netdev->mc_count; i++) {
1535                                BUG_ON(!mc);
1536                                memcpy(buf + i * ETH_ALEN, mc->dmi_addr,
1537                                       ETH_ALEN);
1538                                mc = mc->next;
1539                        }
1540                }
1541        }
1542        return buf;
1543}
1544
1545
1546static void
1547vmxnet3_set_mc(struct net_device *netdev)
1548{
1549        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1550        struct Vmxnet3_RxFilterConf *rxConf =
1551                                        &adapter->shared->devRead.rxFilterConf;
1552        u8 *new_table = NULL;
1553        u32 new_mode = VMXNET3_RXM_UCAST;
1554
1555        if (netdev->flags & IFF_PROMISC)
1556                new_mode |= VMXNET3_RXM_PROMISC;
1557
1558        if (netdev->flags & IFF_BROADCAST)
1559                new_mode |= VMXNET3_RXM_BCAST;
1560
1561        if (netdev->flags & IFF_ALLMULTI)
1562                new_mode |= VMXNET3_RXM_ALL_MULTI;
1563        else
1564                if (netdev->mc_count > 0) {
1565                        new_table = vmxnet3_copy_mc(netdev);
1566                        if (new_table) {
1567                                new_mode |= VMXNET3_RXM_MCAST;
1568                                rxConf->mfTableLen = netdev->mc_count *
1569                                                     ETH_ALEN;
1570                                rxConf->mfTablePA = virt_to_phys(new_table);
1571                        } else {
1572                                printk(KERN_INFO "%s: failed to copy mcast list"
1573                                       ", setting ALL_MULTI\n", netdev->name);
1574                                new_mode |= VMXNET3_RXM_ALL_MULTI;
1575                        }
1576                }
1577
1578
1579        if (!(new_mode & VMXNET3_RXM_MCAST)) {
1580                rxConf->mfTableLen = 0;
1581                rxConf->mfTablePA = 0;
1582        }
1583
1584        if (new_mode != rxConf->rxMode) {
1585                rxConf->rxMode = new_mode;
1586                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1587                                       VMXNET3_CMD_UPDATE_RX_MODE);
1588        }
1589
1590        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1591                               VMXNET3_CMD_UPDATE_MAC_FILTERS);
1592
1593        kfree(new_table);
1594}
1595
1596
1597/*
1598 *   Set up driver_shared based on settings in adapter.
1599 */
1600
1601static void
1602vmxnet3_setup_driver_shared(struct vmxnet3_adapter *adapter)
1603{
1604        struct Vmxnet3_DriverShared *shared = adapter->shared;
1605        struct Vmxnet3_DSDevRead *devRead = &shared->devRead;
1606        struct Vmxnet3_TxQueueConf *tqc;
1607        struct Vmxnet3_RxQueueConf *rqc;
1608        int i;
1609
1610        memset(shared, 0, sizeof(*shared));
1611
1612        /* driver settings */
1613        shared->magic = VMXNET3_REV1_MAGIC;
1614        devRead->misc.driverInfo.version = VMXNET3_DRIVER_VERSION_NUM;
1615        devRead->misc.driverInfo.gos.gosBits = (sizeof(void *) == 4 ?
1616                                VMXNET3_GOS_BITS_32 : VMXNET3_GOS_BITS_64);
1617        devRead->misc.driverInfo.gos.gosType = VMXNET3_GOS_TYPE_LINUX;
1618        devRead->misc.driverInfo.vmxnet3RevSpt = 1;
1619        devRead->misc.driverInfo.uptVerSpt = 1;
1620
1621        devRead->misc.ddPA = virt_to_phys(adapter);
1622        devRead->misc.ddLen = sizeof(struct vmxnet3_adapter);
1623
1624        /* set up feature flags */
1625        if (adapter->rxcsum)
1626                devRead->misc.uptFeatures |= UPT1_F_RXCSUM;
1627
1628        if (adapter->lro) {
1629                devRead->misc.uptFeatures |= UPT1_F_LRO;
1630                devRead->misc.maxNumRxSG = 1 + MAX_SKB_FRAGS;
1631        }
1632        if ((adapter->netdev->features & NETIF_F_HW_VLAN_RX)
1633                        && adapter->vlan_grp) {
1634                devRead->misc.uptFeatures |= UPT1_F_RXVLAN;
1635        }
1636
1637        devRead->misc.mtu = adapter->netdev->mtu;
1638        devRead->misc.queueDescPA = adapter->queue_desc_pa;
1639        devRead->misc.queueDescLen = sizeof(struct Vmxnet3_TxQueueDesc) +
1640                                     sizeof(struct Vmxnet3_RxQueueDesc);
1641
1642        /* tx queue settings */
1643        BUG_ON(adapter->tx_queue.tx_ring.base == NULL);
1644
1645        devRead->misc.numTxQueues = 1;
1646        tqc = &adapter->tqd_start->conf;
1647        tqc->txRingBasePA   = adapter->tx_queue.tx_ring.basePA;
1648        tqc->dataRingBasePA = adapter->tx_queue.data_ring.basePA;
1649        tqc->compRingBasePA = adapter->tx_queue.comp_ring.basePA;
1650        tqc->ddPA           = virt_to_phys(adapter->tx_queue.buf_info);
1651        tqc->txRingSize     = adapter->tx_queue.tx_ring.size;
1652        tqc->dataRingSize   = adapter->tx_queue.data_ring.size;
1653        tqc->compRingSize   = adapter->tx_queue.comp_ring.size;
1654        tqc->ddLen          = sizeof(struct vmxnet3_tx_buf_info) *
1655                              tqc->txRingSize;
1656        tqc->intrIdx        = adapter->tx_queue.comp_ring.intr_idx;
1657
1658        /* rx queue settings */
1659        devRead->misc.numRxQueues = 1;
1660        rqc = &adapter->rqd_start->conf;
1661        rqc->rxRingBasePA[0] = adapter->rx_queue.rx_ring[0].basePA;
1662        rqc->rxRingBasePA[1] = adapter->rx_queue.rx_ring[1].basePA;
1663        rqc->compRingBasePA  = adapter->rx_queue.comp_ring.basePA;
1664        rqc->ddPA            = virt_to_phys(adapter->rx_queue.buf_info);
1665        rqc->rxRingSize[0]   = adapter->rx_queue.rx_ring[0].size;
1666        rqc->rxRingSize[1]   = adapter->rx_queue.rx_ring[1].size;
1667        rqc->compRingSize    = adapter->rx_queue.comp_ring.size;
1668        rqc->ddLen           = sizeof(struct vmxnet3_rx_buf_info) *
1669                               (rqc->rxRingSize[0] + rqc->rxRingSize[1]);
1670        rqc->intrIdx         = adapter->rx_queue.comp_ring.intr_idx;
1671
1672        /* intr settings */
1673        devRead->intrConf.autoMask = adapter->intr.mask_mode ==
1674                                     VMXNET3_IMM_AUTO;
1675        devRead->intrConf.numIntrs = adapter->intr.num_intrs;
1676        for (i = 0; i < adapter->intr.num_intrs; i++)
1677                devRead->intrConf.modLevels[i] = adapter->intr.mod_levels[i];
1678
1679        devRead->intrConf.eventIntrIdx = adapter->intr.event_intr_idx;
1680
1681        /* rx filter settings */
1682        devRead->rxFilterConf.rxMode = 0;
1683        vmxnet3_restore_vlan(adapter);
1684        /* the rest are already zeroed */
1685}
1686
1687
1688int
1689vmxnet3_activate_dev(struct vmxnet3_adapter *adapter)
1690{
1691        int err;
1692        u32 ret;
1693
1694        dev_dbg(&adapter->netdev->dev,
1695                "%s: skb_buf_size %d, rx_buf_per_pkt %d, ring sizes"
1696                " %u %u %u\n", adapter->netdev->name, adapter->skb_buf_size,
1697                adapter->rx_buf_per_pkt, adapter->tx_queue.tx_ring.size,
1698                adapter->rx_queue.rx_ring[0].size,
1699                adapter->rx_queue.rx_ring[1].size);
1700
1701        vmxnet3_tq_init(&adapter->tx_queue, adapter);
1702        err = vmxnet3_rq_init(&adapter->rx_queue, adapter);
1703        if (err) {
1704                printk(KERN_ERR "Failed to init rx queue for %s: error %d\n",
1705                       adapter->netdev->name, err);
1706                goto rq_err;
1707        }
1708
1709        err = vmxnet3_request_irqs(adapter);
1710        if (err) {
1711                printk(KERN_ERR "Failed to setup irq for %s: error %d\n",
1712                       adapter->netdev->name, err);
1713                goto irq_err;
1714        }
1715
1716        vmxnet3_setup_driver_shared(adapter);
1717
1718        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL,
1719                               VMXNET3_GET_ADDR_LO(adapter->shared_pa));
1720        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH,
1721                               VMXNET3_GET_ADDR_HI(adapter->shared_pa));
1722
1723        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1724                               VMXNET3_CMD_ACTIVATE_DEV);
1725        ret = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
1726
1727        if (ret != 0) {
1728                printk(KERN_ERR "Failed to activate dev %s: error %u\n",
1729                       adapter->netdev->name, ret);
1730                err = -EINVAL;
1731                goto activate_err;
1732        }
1733        VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_RXPROD,
1734                               adapter->rx_queue.rx_ring[0].next2fill);
1735        VMXNET3_WRITE_BAR0_REG(adapter, VMXNET3_REG_RXPROD2,
1736                               adapter->rx_queue.rx_ring[1].next2fill);
1737
1738        /* Apply the rx filter settins last. */
1739        vmxnet3_set_mc(adapter->netdev);
1740
1741        /*
1742         * Check link state when first activating device. It will start the
1743         * tx queue if the link is up.
1744         */
1745        vmxnet3_check_link(adapter);
1746
1747        napi_enable(&adapter->napi);
1748        vmxnet3_enable_all_intrs(adapter);
1749        clear_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
1750        return 0;
1751
1752activate_err:
1753        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAL, 0);
1754        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_DSAH, 0);
1755        vmxnet3_free_irqs(adapter);
1756irq_err:
1757rq_err:
1758        /* free up buffers we allocated */
1759        vmxnet3_rq_cleanup(&adapter->rx_queue, adapter);
1760        return err;
1761}
1762
1763
1764void
1765vmxnet3_reset_dev(struct vmxnet3_adapter *adapter)
1766{
1767        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD, VMXNET3_CMD_RESET_DEV);
1768}
1769
1770
1771int
1772vmxnet3_quiesce_dev(struct vmxnet3_adapter *adapter)
1773{
1774        if (test_and_set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state))
1775                return 0;
1776
1777
1778        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
1779                               VMXNET3_CMD_QUIESCE_DEV);
1780        vmxnet3_disable_all_intrs(adapter);
1781
1782        napi_disable(&adapter->napi);
1783        netif_tx_disable(adapter->netdev);
1784        adapter->link_speed = 0;
1785        netif_carrier_off(adapter->netdev);
1786
1787        vmxnet3_tq_cleanup(&adapter->tx_queue, adapter);
1788        vmxnet3_rq_cleanup(&adapter->rx_queue, adapter);
1789        vmxnet3_free_irqs(adapter);
1790        return 0;
1791}
1792
1793
1794static void
1795vmxnet3_write_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
1796{
1797        u32 tmp;
1798
1799        tmp = *(u32 *)mac;
1800        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACL, tmp);
1801
1802        tmp = (mac[5] << 8) | mac[4];
1803        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_MACH, tmp);
1804}
1805
1806
1807static int
1808vmxnet3_set_mac_addr(struct net_device *netdev, void *p)
1809{
1810        struct sockaddr *addr = p;
1811        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
1812
1813        memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
1814        vmxnet3_write_mac_addr(adapter, addr->sa_data);
1815
1816        return 0;
1817}
1818
1819
1820/* ==================== initialization and cleanup routines ============ */
1821
1822static int
1823vmxnet3_alloc_pci_resources(struct vmxnet3_adapter *adapter, bool *dma64)
1824{
1825        int err;
1826        unsigned long mmio_start, mmio_len;
1827        struct pci_dev *pdev = adapter->pdev;
1828
1829        err = pci_enable_device(pdev);
1830        if (err) {
1831                printk(KERN_ERR "Failed to enable adapter %s: error %d\n",
1832                       pci_name(pdev), err);
1833                return err;
1834        }
1835
1836        if (pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) == 0) {
1837                if (pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)) != 0) {
1838                        printk(KERN_ERR "pci_set_consistent_dma_mask failed "
1839                               "for adapter %s\n", pci_name(pdev));
1840                        err = -EIO;
1841                        goto err_set_mask;
1842                }
1843                *dma64 = true;
1844        } else {
1845                if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32)) != 0) {
1846                        printk(KERN_ERR "pci_set_dma_mask failed for adapter "
1847                               "%s\n",  pci_name(pdev));
1848                        err = -EIO;
1849                        goto err_set_mask;
1850                }
1851                *dma64 = false;
1852        }
1853
1854        err = pci_request_selected_regions(pdev, (1 << 2) - 1,
1855                                           vmxnet3_driver_name);
1856        if (err) {
1857                printk(KERN_ERR "Failed to request region for adapter %s: "
1858                       "error %d\n", pci_name(pdev), err);
1859                goto err_set_mask;
1860        }
1861
1862        pci_set_master(pdev);
1863
1864        mmio_start = pci_resource_start(pdev, 0);
1865        mmio_len = pci_resource_len(pdev, 0);
1866        adapter->hw_addr0 = ioremap(mmio_start, mmio_len);
1867        if (!adapter->hw_addr0) {
1868                printk(KERN_ERR "Failed to map bar0 for adapter %s\n",
1869                       pci_name(pdev));
1870                err = -EIO;
1871                goto err_ioremap;
1872        }
1873
1874        mmio_start = pci_resource_start(pdev, 1);
1875        mmio_len = pci_resource_len(pdev, 1);
1876        adapter->hw_addr1 = ioremap(mmio_start, mmio_len);
1877        if (!adapter->hw_addr1) {
1878                printk(KERN_ERR "Failed to map bar1 for adapter %s\n",
1879                       pci_name(pdev));
1880                err = -EIO;
1881                goto err_bar1;
1882        }
1883        return 0;
1884
1885err_bar1:
1886        iounmap(adapter->hw_addr0);
1887err_ioremap:
1888        pci_release_selected_regions(pdev, (1 << 2) - 1);
1889err_set_mask:
1890        pci_disable_device(pdev);
1891        return err;
1892}
1893
1894
1895static void
1896vmxnet3_free_pci_resources(struct vmxnet3_adapter *adapter)
1897{
1898        BUG_ON(!adapter->pdev);
1899
1900        iounmap(adapter->hw_addr0);
1901        iounmap(adapter->hw_addr1);
1902        pci_release_selected_regions(adapter->pdev, (1 << 2) - 1);
1903        pci_disable_device(adapter->pdev);
1904}
1905
1906
1907static void
1908vmxnet3_adjust_rx_ring_size(struct vmxnet3_adapter *adapter)
1909{
1910        size_t sz;
1911
1912        if (adapter->netdev->mtu <= VMXNET3_MAX_SKB_BUF_SIZE -
1913                                    VMXNET3_MAX_ETH_HDR_SIZE) {
1914                adapter->skb_buf_size = adapter->netdev->mtu +
1915                                        VMXNET3_MAX_ETH_HDR_SIZE;
1916                if (adapter->skb_buf_size < VMXNET3_MIN_T0_BUF_SIZE)
1917                        adapter->skb_buf_size = VMXNET3_MIN_T0_BUF_SIZE;
1918
1919                adapter->rx_buf_per_pkt = 1;
1920        } else {
1921                adapter->skb_buf_size = VMXNET3_MAX_SKB_BUF_SIZE;
1922                sz = adapter->netdev->mtu - VMXNET3_MAX_SKB_BUF_SIZE +
1923                                            VMXNET3_MAX_ETH_HDR_SIZE;
1924                adapter->rx_buf_per_pkt = 1 + (sz + PAGE_SIZE - 1) / PAGE_SIZE;
1925        }
1926
1927        /*
1928         * for simplicity, force the ring0 size to be a multiple of
1929         * rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN
1930         */
1931        sz = adapter->rx_buf_per_pkt * VMXNET3_RING_SIZE_ALIGN;
1932        adapter->rx_queue.rx_ring[0].size = (adapter->rx_queue.rx_ring[0].size +
1933                                             sz - 1) / sz * sz;
1934        adapter->rx_queue.rx_ring[0].size = min_t(u32,
1935                                            adapter->rx_queue.rx_ring[0].size,
1936                                            VMXNET3_RX_RING_MAX_SIZE / sz * sz);
1937}
1938
1939
1940int
1941vmxnet3_create_queues(struct vmxnet3_adapter *adapter, u32 tx_ring_size,
1942                      u32 rx_ring_size, u32 rx_ring2_size)
1943{
1944        int err;
1945
1946        adapter->tx_queue.tx_ring.size   = tx_ring_size;
1947        adapter->tx_queue.data_ring.size = tx_ring_size;
1948        adapter->tx_queue.comp_ring.size = tx_ring_size;
1949        adapter->tx_queue.shared = &adapter->tqd_start->ctrl;
1950        adapter->tx_queue.stopped = true;
1951        err = vmxnet3_tq_create(&adapter->tx_queue, adapter);
1952        if (err)
1953                return err;
1954
1955        adapter->rx_queue.rx_ring[0].size = rx_ring_size;
1956        adapter->rx_queue.rx_ring[1].size = rx_ring2_size;
1957        vmxnet3_adjust_rx_ring_size(adapter);
1958        adapter->rx_queue.comp_ring.size  = adapter->rx_queue.rx_ring[0].size +
1959                                            adapter->rx_queue.rx_ring[1].size;
1960        adapter->rx_queue.qid  = 0;
1961        adapter->rx_queue.qid2 = 1;
1962        adapter->rx_queue.shared = &adapter->rqd_start->ctrl;
1963        err = vmxnet3_rq_create(&adapter->rx_queue, adapter);
1964        if (err)
1965                vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
1966
1967        return err;
1968}
1969
1970static int
1971vmxnet3_open(struct net_device *netdev)
1972{
1973        struct vmxnet3_adapter *adapter;
1974        int err;
1975
1976        adapter = netdev_priv(netdev);
1977
1978        spin_lock_init(&adapter->tx_queue.tx_lock);
1979
1980        err = vmxnet3_create_queues(adapter, VMXNET3_DEF_TX_RING_SIZE,
1981                                    VMXNET3_DEF_RX_RING_SIZE,
1982                                    VMXNET3_DEF_RX_RING_SIZE);
1983        if (err)
1984                goto queue_err;
1985
1986        err = vmxnet3_activate_dev(adapter);
1987        if (err)
1988                goto activate_err;
1989
1990        return 0;
1991
1992activate_err:
1993        vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
1994        vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
1995queue_err:
1996        return err;
1997}
1998
1999
2000static int
2001vmxnet3_close(struct net_device *netdev)
2002{
2003        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2004
2005        /*
2006         * Reset_work may be in the middle of resetting the device, wait for its
2007         * completion.
2008         */
2009        while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2010                msleep(1);
2011
2012        vmxnet3_quiesce_dev(adapter);
2013
2014        vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
2015        vmxnet3_tq_destroy(&adapter->tx_queue, adapter);
2016
2017        clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2018
2019
2020        return 0;
2021}
2022
2023
2024void
2025vmxnet3_force_close(struct vmxnet3_adapter *adapter)
2026{
2027        /*
2028         * we must clear VMXNET3_STATE_BIT_RESETTING, otherwise
2029         * vmxnet3_close() will deadlock.
2030         */
2031        BUG_ON(test_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state));
2032
2033        /* we need to enable NAPI, otherwise dev_close will deadlock */
2034        napi_enable(&adapter->napi);
2035        dev_close(adapter->netdev);
2036}
2037
2038
2039static int
2040vmxnet3_change_mtu(struct net_device *netdev, int new_mtu)
2041{
2042        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2043        int err = 0;
2044
2045        if (new_mtu < VMXNET3_MIN_MTU || new_mtu > VMXNET3_MAX_MTU)
2046                return -EINVAL;
2047
2048        if (new_mtu > 1500 && !adapter->jumbo_frame)
2049                return -EINVAL;
2050
2051        netdev->mtu = new_mtu;
2052
2053        /*
2054         * Reset_work may be in the middle of resetting the device, wait for its
2055         * completion.
2056         */
2057        while (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2058                msleep(1);
2059
2060        if (netif_running(netdev)) {
2061                vmxnet3_quiesce_dev(adapter);
2062                vmxnet3_reset_dev(adapter);
2063
2064                /* we need to re-create the rx queue based on the new mtu */
2065                vmxnet3_rq_destroy(&adapter->rx_queue, adapter);
2066                vmxnet3_adjust_rx_ring_size(adapter);
2067                adapter->rx_queue.comp_ring.size  =
2068                                        adapter->rx_queue.rx_ring[0].size +
2069                                        adapter->rx_queue.rx_ring[1].size;
2070                err = vmxnet3_rq_create(&adapter->rx_queue, adapter);
2071                if (err) {
2072                        printk(KERN_ERR "%s: failed to re-create rx queue,"
2073                                " error %d. Closing it.\n", netdev->name, err);
2074                        goto out;
2075                }
2076
2077                err = vmxnet3_activate_dev(adapter);
2078                if (err) {
2079                        printk(KERN_ERR "%s: failed to re-activate, error %d. "
2080                                "Closing it\n", netdev->name, err);
2081                        goto out;
2082                }
2083        }
2084
2085out:
2086        clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2087        if (err)
2088                vmxnet3_force_close(adapter);
2089
2090        return err;
2091}
2092
2093
2094static void
2095vmxnet3_declare_features(struct vmxnet3_adapter *adapter, bool dma64)
2096{
2097        struct net_device *netdev = adapter->netdev;
2098
2099        netdev->features = NETIF_F_SG |
2100                NETIF_F_HW_CSUM |
2101                NETIF_F_HW_VLAN_TX |
2102                NETIF_F_HW_VLAN_RX |
2103                NETIF_F_HW_VLAN_FILTER |
2104                NETIF_F_TSO |
2105                NETIF_F_TSO6 |
2106                NETIF_F_LRO;
2107
2108        printk(KERN_INFO "features: sg csum vlan jf tso tsoIPv6 lro");
2109
2110        adapter->rxcsum = true;
2111        adapter->jumbo_frame = true;
2112        adapter->lro = true;
2113
2114        if (dma64) {
2115                netdev->features |= NETIF_F_HIGHDMA;
2116                printk(" highDMA");
2117        }
2118
2119        netdev->vlan_features = netdev->features;
2120        printk("\n");
2121}
2122
2123
2124static void
2125vmxnet3_read_mac_addr(struct vmxnet3_adapter *adapter, u8 *mac)
2126{
2127        u32 tmp;
2128
2129        tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACL);
2130        *(u32 *)mac = tmp;
2131
2132        tmp = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_MACH);
2133        mac[4] = tmp & 0xff;
2134        mac[5] = (tmp >> 8) & 0xff;
2135}
2136
2137
2138static void
2139vmxnet3_alloc_intr_resources(struct vmxnet3_adapter *adapter)
2140{
2141        u32 cfg;
2142
2143        /* intr settings */
2144        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2145                               VMXNET3_CMD_GET_CONF_INTR);
2146        cfg = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_CMD);
2147        adapter->intr.type = cfg & 0x3;
2148        adapter->intr.mask_mode = (cfg >> 2) & 0x3;
2149
2150        if (adapter->intr.type == VMXNET3_IT_AUTO) {
2151                int err;
2152
2153#ifdef CONFIG_PCI_MSI
2154                adapter->intr.msix_entries[0].entry = 0;
2155                err = pci_enable_msix(adapter->pdev, adapter->intr.msix_entries,
2156                                      VMXNET3_LINUX_MAX_MSIX_VECT);
2157                if (!err) {
2158                        adapter->intr.num_intrs = 1;
2159                        adapter->intr.type = VMXNET3_IT_MSIX;
2160                        return;
2161                }
2162#endif
2163
2164                err = pci_enable_msi(adapter->pdev);
2165                if (!err) {
2166                        adapter->intr.num_intrs = 1;
2167                        adapter->intr.type = VMXNET3_IT_MSI;
2168                        return;
2169                }
2170        }
2171
2172        adapter->intr.type = VMXNET3_IT_INTX;
2173
2174        /* INT-X related setting */
2175        adapter->intr.num_intrs = 1;
2176}
2177
2178
2179static void
2180vmxnet3_free_intr_resources(struct vmxnet3_adapter *adapter)
2181{
2182        if (adapter->intr.type == VMXNET3_IT_MSIX)
2183                pci_disable_msix(adapter->pdev);
2184        else if (adapter->intr.type == VMXNET3_IT_MSI)
2185                pci_disable_msi(adapter->pdev);
2186        else
2187                BUG_ON(adapter->intr.type != VMXNET3_IT_INTX);
2188}
2189
2190
2191static void
2192vmxnet3_tx_timeout(struct net_device *netdev)
2193{
2194        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2195        adapter->tx_timeout_count++;
2196
2197        printk(KERN_ERR "%s: tx hang\n", adapter->netdev->name);
2198        schedule_work(&adapter->work);
2199}
2200
2201
2202static void
2203vmxnet3_reset_work(struct work_struct *data)
2204{
2205        struct vmxnet3_adapter *adapter;
2206
2207        adapter = container_of(data, struct vmxnet3_adapter, work);
2208
2209        /* if another thread is resetting the device, no need to proceed */
2210        if (test_and_set_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state))
2211                return;
2212
2213        /* if the device is closed, we must leave it alone */
2214        if (netif_running(adapter->netdev)) {
2215                printk(KERN_INFO "%s: resetting\n", adapter->netdev->name);
2216                vmxnet3_quiesce_dev(adapter);
2217                vmxnet3_reset_dev(adapter);
2218                vmxnet3_activate_dev(adapter);
2219        } else {
2220                printk(KERN_INFO "%s: already closed\n", adapter->netdev->name);
2221        }
2222
2223        clear_bit(VMXNET3_STATE_BIT_RESETTING, &adapter->state);
2224}
2225
2226
2227static int __devinit
2228vmxnet3_probe_device(struct pci_dev *pdev,
2229                     const struct pci_device_id *id)
2230{
2231        static const struct net_device_ops vmxnet3_netdev_ops = {
2232                .ndo_open = vmxnet3_open,
2233                .ndo_stop = vmxnet3_close,
2234                .ndo_start_xmit = vmxnet3_xmit_frame,
2235                .ndo_set_mac_address = vmxnet3_set_mac_addr,
2236                .ndo_change_mtu = vmxnet3_change_mtu,
2237                .ndo_get_stats = vmxnet3_get_stats,
2238                .ndo_tx_timeout = vmxnet3_tx_timeout,
2239                .ndo_set_multicast_list = vmxnet3_set_mc,
2240                .ndo_vlan_rx_register = vmxnet3_vlan_rx_register,
2241                .ndo_vlan_rx_add_vid = vmxnet3_vlan_rx_add_vid,
2242                .ndo_vlan_rx_kill_vid = vmxnet3_vlan_rx_kill_vid,
2243#ifdef CONFIG_NET_POLL_CONTROLLER
2244                .ndo_poll_controller = vmxnet3_netpoll,
2245#endif
2246        };
2247        int err;
2248        bool dma64 = false; /* stupid gcc */
2249        u32 ver;
2250        struct net_device *netdev;
2251        struct vmxnet3_adapter *adapter;
2252        u8 mac[ETH_ALEN];
2253
2254        netdev = alloc_etherdev(sizeof(struct vmxnet3_adapter));
2255        if (!netdev) {
2256                printk(KERN_ERR "Failed to alloc ethernet device for adapter "
2257                        "%s\n", pci_name(pdev));
2258                return -ENOMEM;
2259        }
2260
2261        pci_set_drvdata(pdev, netdev);
2262        adapter = netdev_priv(netdev);
2263        adapter->netdev = netdev;
2264        adapter->pdev = pdev;
2265
2266        adapter->shared = pci_alloc_consistent(adapter->pdev,
2267                          sizeof(struct Vmxnet3_DriverShared),
2268                          &adapter->shared_pa);
2269        if (!adapter->shared) {
2270                printk(KERN_ERR "Failed to allocate memory for %s\n",
2271                        pci_name(pdev));
2272                err = -ENOMEM;
2273                goto err_alloc_shared;
2274        }
2275
2276        adapter->tqd_start = pci_alloc_consistent(adapter->pdev,
2277                             sizeof(struct Vmxnet3_TxQueueDesc) +
2278                             sizeof(struct Vmxnet3_RxQueueDesc),
2279                             &adapter->queue_desc_pa);
2280
2281        if (!adapter->tqd_start) {
2282                printk(KERN_ERR "Failed to allocate memory for %s\n",
2283                        pci_name(pdev));
2284                err = -ENOMEM;
2285                goto err_alloc_queue_desc;
2286        }
2287        adapter->rqd_start = (struct Vmxnet3_RxQueueDesc *)(adapter->tqd_start
2288                                                            + 1);
2289
2290        adapter->pm_conf = kmalloc(sizeof(struct Vmxnet3_PMConf), GFP_KERNEL);
2291        if (adapter->pm_conf == NULL) {
2292                printk(KERN_ERR "Failed to allocate memory for %s\n",
2293                        pci_name(pdev));
2294                err = -ENOMEM;
2295                goto err_alloc_pm;
2296        }
2297
2298        err = vmxnet3_alloc_pci_resources(adapter, &dma64);
2299        if (err < 0)
2300                goto err_alloc_pci;
2301
2302        ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_VRRS);
2303        if (ver & 1) {
2304                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_VRRS, 1);
2305        } else {
2306                printk(KERN_ERR "Incompatible h/w version (0x%x) for adapter"
2307                       " %s\n", ver, pci_name(pdev));
2308                err = -EBUSY;
2309                goto err_ver;
2310        }
2311
2312        ver = VMXNET3_READ_BAR1_REG(adapter, VMXNET3_REG_UVRS);
2313        if (ver & 1) {
2314                VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_UVRS, 1);
2315        } else {
2316                printk(KERN_ERR "Incompatible upt version (0x%x) for "
2317                       "adapter %s\n", ver, pci_name(pdev));
2318                err = -EBUSY;
2319                goto err_ver;
2320        }
2321
2322        vmxnet3_declare_features(adapter, dma64);
2323
2324        adapter->dev_number = atomic_read(&devices_found);
2325        vmxnet3_alloc_intr_resources(adapter);
2326
2327        vmxnet3_read_mac_addr(adapter, mac);
2328        memcpy(netdev->dev_addr,  mac, netdev->addr_len);
2329
2330        netdev->netdev_ops = &vmxnet3_netdev_ops;
2331        netdev->watchdog_timeo = 5 * HZ;
2332        vmxnet3_set_ethtool_ops(netdev);
2333
2334        INIT_WORK(&adapter->work, vmxnet3_reset_work);
2335
2336        netif_napi_add(netdev, &adapter->napi, vmxnet3_poll, 64);
2337        SET_NETDEV_DEV(netdev, &pdev->dev);
2338        err = register_netdev(netdev);
2339
2340        if (err) {
2341                printk(KERN_ERR "Failed to register adapter %s\n",
2342                        pci_name(pdev));
2343                goto err_register;
2344        }
2345
2346        set_bit(VMXNET3_STATE_BIT_QUIESCED, &adapter->state);
2347        atomic_inc(&devices_found);
2348        return 0;
2349
2350err_register:
2351        vmxnet3_free_intr_resources(adapter);
2352err_ver:
2353        vmxnet3_free_pci_resources(adapter);
2354err_alloc_pci:
2355        kfree(adapter->pm_conf);
2356err_alloc_pm:
2357        pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_TxQueueDesc) +
2358                            sizeof(struct Vmxnet3_RxQueueDesc),
2359                            adapter->tqd_start, adapter->queue_desc_pa);
2360err_alloc_queue_desc:
2361        pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared),
2362                            adapter->shared, adapter->shared_pa);
2363err_alloc_shared:
2364        pci_set_drvdata(pdev, NULL);
2365        free_netdev(netdev);
2366        return err;
2367}
2368
2369
2370static void __devexit
2371vmxnet3_remove_device(struct pci_dev *pdev)
2372{
2373        struct net_device *netdev = pci_get_drvdata(pdev);
2374        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2375
2376        flush_scheduled_work();
2377
2378        unregister_netdev(netdev);
2379
2380        vmxnet3_free_intr_resources(adapter);
2381        vmxnet3_free_pci_resources(adapter);
2382        kfree(adapter->pm_conf);
2383        pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_TxQueueDesc) +
2384                            sizeof(struct Vmxnet3_RxQueueDesc),
2385                            adapter->tqd_start, adapter->queue_desc_pa);
2386        pci_free_consistent(adapter->pdev, sizeof(struct Vmxnet3_DriverShared),
2387                            adapter->shared, adapter->shared_pa);
2388        free_netdev(netdev);
2389}
2390
2391
2392#ifdef CONFIG_PM
2393
2394static int
2395vmxnet3_suspend(struct device *device)
2396{
2397        struct pci_dev *pdev = to_pci_dev(device);
2398        struct net_device *netdev = pci_get_drvdata(pdev);
2399        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2400        struct Vmxnet3_PMConf *pmConf;
2401        struct ethhdr *ehdr;
2402        struct arphdr *ahdr;
2403        u8 *arpreq;
2404        struct in_device *in_dev;
2405        struct in_ifaddr *ifa;
2406        int i = 0;
2407
2408        if (!netif_running(netdev))
2409                return 0;
2410
2411        vmxnet3_disable_all_intrs(adapter);
2412        vmxnet3_free_irqs(adapter);
2413        vmxnet3_free_intr_resources(adapter);
2414
2415        netif_device_detach(netdev);
2416        netif_stop_queue(netdev);
2417
2418        /* Create wake-up filters. */
2419        pmConf = adapter->pm_conf;
2420        memset(pmConf, 0, sizeof(*pmConf));
2421
2422        if (adapter->wol & WAKE_UCAST) {
2423                pmConf->filters[i].patternSize = ETH_ALEN;
2424                pmConf->filters[i].maskSize = 1;
2425                memcpy(pmConf->filters[i].pattern, netdev->dev_addr, ETH_ALEN);
2426                pmConf->filters[i].mask[0] = 0x3F; /* LSB ETH_ALEN bits */
2427
2428                pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
2429                i++;
2430        }
2431
2432        if (adapter->wol & WAKE_ARP) {
2433                in_dev = in_dev_get(netdev);
2434                if (!in_dev)
2435                        goto skip_arp;
2436
2437                ifa = (struct in_ifaddr *)in_dev->ifa_list;
2438                if (!ifa)
2439                        goto skip_arp;
2440
2441                pmConf->filters[i].patternSize = ETH_HLEN + /* Ethernet header*/
2442                        sizeof(struct arphdr) +         /* ARP header */
2443                        2 * ETH_ALEN +          /* 2 Ethernet addresses*/
2444                        2 * sizeof(u32);        /*2 IPv4 addresses */
2445                pmConf->filters[i].maskSize =
2446                        (pmConf->filters[i].patternSize - 1) / 8 + 1;
2447
2448                /* ETH_P_ARP in Ethernet header. */
2449                ehdr = (struct ethhdr *)pmConf->filters[i].pattern;
2450                ehdr->h_proto = htons(ETH_P_ARP);
2451
2452                /* ARPOP_REQUEST in ARP header. */
2453                ahdr = (struct arphdr *)&pmConf->filters[i].pattern[ETH_HLEN];
2454                ahdr->ar_op = htons(ARPOP_REQUEST);
2455                arpreq = (u8 *)(ahdr + 1);
2456
2457                /* The Unicast IPv4 address in 'tip' field. */
2458                arpreq += 2 * ETH_ALEN + sizeof(u32);
2459                *(u32 *)arpreq = ifa->ifa_address;
2460
2461                /* The mask for the relevant bits. */
2462                pmConf->filters[i].mask[0] = 0x00;
2463                pmConf->filters[i].mask[1] = 0x30; /* ETH_P_ARP */
2464                pmConf->filters[i].mask[2] = 0x30; /* ARPOP_REQUEST */
2465                pmConf->filters[i].mask[3] = 0x00;
2466                pmConf->filters[i].mask[4] = 0xC0; /* IPv4 TIP */
2467                pmConf->filters[i].mask[5] = 0x03; /* IPv4 TIP */
2468                in_dev_put(in_dev);
2469
2470                pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_FILTER;
2471                i++;
2472        }
2473
2474skip_arp:
2475        if (adapter->wol & WAKE_MAGIC)
2476                pmConf->wakeUpEvents |= VMXNET3_PM_WAKEUP_MAGIC;
2477
2478        pmConf->numFilters = i;
2479
2480        adapter->shared->devRead.pmConfDesc.confVer = 1;
2481        adapter->shared->devRead.pmConfDesc.confLen = sizeof(*pmConf);
2482        adapter->shared->devRead.pmConfDesc.confPA = virt_to_phys(pmConf);
2483
2484        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2485                               VMXNET3_CMD_UPDATE_PMCFG);
2486
2487        pci_save_state(pdev);
2488        pci_enable_wake(pdev, pci_choose_state(pdev, PMSG_SUSPEND),
2489                        adapter->wol);
2490        pci_disable_device(pdev);
2491        pci_set_power_state(pdev, pci_choose_state(pdev, PMSG_SUSPEND));
2492
2493        return 0;
2494}
2495
2496
2497static int
2498vmxnet3_resume(struct device *device)
2499{
2500        int err;
2501        struct pci_dev *pdev = to_pci_dev(device);
2502        struct net_device *netdev = pci_get_drvdata(pdev);
2503        struct vmxnet3_adapter *adapter = netdev_priv(netdev);
2504        struct Vmxnet3_PMConf *pmConf;
2505
2506        if (!netif_running(netdev))
2507                return 0;
2508
2509        /* Destroy wake-up filters. */
2510        pmConf = adapter->pm_conf;
2511        memset(pmConf, 0, sizeof(*pmConf));
2512
2513        adapter->shared->devRead.pmConfDesc.confVer = 1;
2514        adapter->shared->devRead.pmConfDesc.confLen = sizeof(*pmConf);
2515        adapter->shared->devRead.pmConfDesc.confPA = virt_to_phys(pmConf);
2516
2517        netif_device_attach(netdev);
2518        pci_set_power_state(pdev, PCI_D0);
2519        pci_restore_state(pdev);
2520        err = pci_enable_device_mem(pdev);
2521        if (err != 0)
2522                return err;
2523
2524        pci_enable_wake(pdev, PCI_D0, 0);
2525
2526        VMXNET3_WRITE_BAR1_REG(adapter, VMXNET3_REG_CMD,
2527                               VMXNET3_CMD_UPDATE_PMCFG);
2528        vmxnet3_alloc_intr_resources(adapter);
2529        vmxnet3_request_irqs(adapter);
2530        vmxnet3_enable_all_intrs(adapter);
2531
2532        return 0;
2533}
2534
2535static struct dev_pm_ops vmxnet3_pm_ops = {
2536        .suspend = vmxnet3_suspend,
2537        .resume = vmxnet3_resume,
2538};
2539#endif
2540
2541static struct pci_driver vmxnet3_driver = {
2542        .name           = vmxnet3_driver_name,
2543        .id_table       = vmxnet3_pciid_table,
2544        .probe          = vmxnet3_probe_device,
2545        .remove         = __devexit_p(vmxnet3_remove_device),
2546#ifdef CONFIG_PM
2547        .driver.pm      = &vmxnet3_pm_ops,
2548#endif
2549};
2550
2551
2552static int __init
2553vmxnet3_init_module(void)
2554{
2555        printk(KERN_INFO "%s - version %s\n", VMXNET3_DRIVER_DESC,
2556                VMXNET3_DRIVER_VERSION_REPORT);
2557        return pci_register_driver(&vmxnet3_driver);
2558}
2559
2560module_init(vmxnet3_init_module);
2561
2562
2563static void
2564vmxnet3_exit_module(void)
2565{
2566        pci_unregister_driver(&vmxnet3_driver);
2567}
2568
2569module_exit(vmxnet3_exit_module);
2570
2571MODULE_AUTHOR("VMware, Inc.");
2572MODULE_DESCRIPTION(VMXNET3_DRIVER_DESC);
2573MODULE_LICENSE("GPL v2");
2574MODULE_VERSION(VMXNET3_DRIVER_VERSION_STRING);
2575
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.