linux/drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c
<<
>>
Prefs
   1/* bnx2x_cmn.c: QLogic Everest network driver.
   2 *
   3 * Copyright (c) 2007-2013 Broadcom Corporation
   4 * Copyright (c) 2014 QLogic Corporation
   5 * All rights reserved
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License as published by
   9 * the Free Software Foundation.
  10 *
  11 * Maintained by: Ariel Elior <ariel.elior@qlogic.com>
  12 * Written by: Eliezer Tamir
  13 * Based on code from Michael Chan's bnx2 driver
  14 * UDP CSUM errata workaround by Arik Gendelman
  15 * Slowpath and fastpath rework by Vladislav Zolotarov
  16 * Statistics and Link management by Yitchak Gertner
  17 *
  18 */
  19
  20#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  21
  22#include <linux/etherdevice.h>
  23#include <linux/if_vlan.h>
  24#include <linux/interrupt.h>
  25#include <linux/ip.h>
  26#include <linux/crash_dump.h>
  27#include <net/tcp.h>
  28#include <net/ipv6.h>
  29#include <net/ip6_checksum.h>
  30#include <linux/prefetch.h>
  31#include "bnx2x_cmn.h"
  32#include "bnx2x_init.h"
  33#include "bnx2x_sp.h"
  34
  35static void bnx2x_free_fp_mem_cnic(struct bnx2x *bp);
  36static int bnx2x_alloc_fp_mem_cnic(struct bnx2x *bp);
  37static int bnx2x_alloc_fp_mem(struct bnx2x *bp);
  38static int bnx2x_poll(struct napi_struct *napi, int budget);
  39
  40static void bnx2x_add_all_napi_cnic(struct bnx2x *bp)
  41{
  42        int i;
  43
  44        /* Add NAPI objects */
  45        for_each_rx_queue_cnic(bp, i) {
  46                netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
  47                               bnx2x_poll, NAPI_POLL_WEIGHT);
  48        }
  49}
  50
  51static void bnx2x_add_all_napi(struct bnx2x *bp)
  52{
  53        int i;
  54
  55        /* Add NAPI objects */
  56        for_each_eth_queue(bp, i) {
  57                netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
  58                               bnx2x_poll, NAPI_POLL_WEIGHT);
  59        }
  60}
  61
  62static int bnx2x_calc_num_queues(struct bnx2x *bp)
  63{
  64        int nq = bnx2x_num_queues ? : netif_get_num_default_rss_queues();
  65
  66        /* Reduce memory usage in kdump environment by using only one queue */
  67        if (is_kdump_kernel())
  68                nq = 1;
  69
  70        nq = clamp(nq, 1, BNX2X_MAX_QUEUES(bp));
  71        return nq;
  72}
  73
  74/**
  75 * bnx2x_move_fp - move content of the fastpath structure.
  76 *
  77 * @bp:         driver handle
  78 * @from:       source FP index
  79 * @to:         destination FP index
  80 *
  81 * Makes sure the contents of the bp->fp[to].napi is kept
  82 * intact. This is done by first copying the napi struct from
  83 * the target to the source, and then mem copying the entire
  84 * source onto the target. Update txdata pointers and related
  85 * content.
  86 */
  87static inline void bnx2x_move_fp(struct bnx2x *bp, int from, int to)
  88{
  89        struct bnx2x_fastpath *from_fp = &bp->fp[from];
  90        struct bnx2x_fastpath *to_fp = &bp->fp[to];
  91        struct bnx2x_sp_objs *from_sp_objs = &bp->sp_objs[from];
  92        struct bnx2x_sp_objs *to_sp_objs = &bp->sp_objs[to];
  93        struct bnx2x_fp_stats *from_fp_stats = &bp->fp_stats[from];
  94        struct bnx2x_fp_stats *to_fp_stats = &bp->fp_stats[to];
  95        int old_max_eth_txqs, new_max_eth_txqs;
  96        int old_txdata_index = 0, new_txdata_index = 0;
  97        struct bnx2x_agg_info *old_tpa_info = to_fp->tpa_info;
  98
  99        /* Copy the NAPI object as it has been already initialized */
 100        from_fp->napi = to_fp->napi;
 101
 102        /* Move bnx2x_fastpath contents */
 103        memcpy(to_fp, from_fp, sizeof(*to_fp));
 104        to_fp->index = to;
 105
 106        /* Retain the tpa_info of the original `to' version as we don't want
 107         * 2 FPs to contain the same tpa_info pointer.
 108         */
 109        to_fp->tpa_info = old_tpa_info;
 110
 111        /* move sp_objs contents as well, as their indices match fp ones */
 112        memcpy(to_sp_objs, from_sp_objs, sizeof(*to_sp_objs));
 113
 114        /* move fp_stats contents as well, as their indices match fp ones */
 115        memcpy(to_fp_stats, from_fp_stats, sizeof(*to_fp_stats));
 116
 117        /* Update txdata pointers in fp and move txdata content accordingly:
 118         * Each fp consumes 'max_cos' txdata structures, so the index should be
 119         * decremented by max_cos x delta.
 120         */
 121
 122        old_max_eth_txqs = BNX2X_NUM_ETH_QUEUES(bp) * (bp)->max_cos;
 123        new_max_eth_txqs = (BNX2X_NUM_ETH_QUEUES(bp) - from + to) *
 124                                (bp)->max_cos;
 125        if (from == FCOE_IDX(bp)) {
 126                old_txdata_index = old_max_eth_txqs + FCOE_TXQ_IDX_OFFSET;
 127                new_txdata_index = new_max_eth_txqs + FCOE_TXQ_IDX_OFFSET;
 128        }
 129
 130        memcpy(&bp->bnx2x_txq[new_txdata_index],
 131               &bp->bnx2x_txq[old_txdata_index],
 132               sizeof(struct bnx2x_fp_txdata));
 133        to_fp->txdata_ptr[0] = &bp->bnx2x_txq[new_txdata_index];
 134}
 135
 136/**
 137 * bnx2x_fill_fw_str - Fill buffer with FW version string.
 138 *
 139 * @bp:        driver handle
 140 * @buf:       character buffer to fill with the fw name
 141 * @buf_len:   length of the above buffer
 142 *
 143 */
 144void bnx2x_fill_fw_str(struct bnx2x *bp, char *buf, size_t buf_len)
 145{
 146        if (IS_PF(bp)) {
 147                u8 phy_fw_ver[PHY_FW_VER_LEN];
 148
 149                phy_fw_ver[0] = '\0';
 150                bnx2x_get_ext_phy_fw_version(&bp->link_params,
 151                                             phy_fw_ver, PHY_FW_VER_LEN);
 152                strlcpy(buf, bp->fw_ver, buf_len);
 153                snprintf(buf + strlen(bp->fw_ver), 32 - strlen(bp->fw_ver),
 154                         "bc %d.%d.%d%s%s",
 155                         (bp->common.bc_ver & 0xff0000) >> 16,
 156                         (bp->common.bc_ver & 0xff00) >> 8,
 157                         (bp->common.bc_ver & 0xff),
 158                         ((phy_fw_ver[0] != '\0') ? " phy " : ""), phy_fw_ver);
 159        } else {
 160                bnx2x_vf_fill_fw_str(bp, buf, buf_len);
 161        }
 162}
 163
 164/**
 165 * bnx2x_shrink_eth_fp - guarantees fastpath structures stay intact
 166 *
 167 * @bp: driver handle
 168 * @delta:      number of eth queues which were not allocated
 169 */
 170static void bnx2x_shrink_eth_fp(struct bnx2x *bp, int delta)
 171{
 172        int i, cos, old_eth_num = BNX2X_NUM_ETH_QUEUES(bp);
 173
 174        /* Queue pointer cannot be re-set on an fp-basis, as moving pointer
 175         * backward along the array could cause memory to be overridden
 176         */
 177        for (cos = 1; cos < bp->max_cos; cos++) {
 178                for (i = 0; i < old_eth_num - delta; i++) {
 179                        struct bnx2x_fastpath *fp = &bp->fp[i];
 180                        int new_idx = cos * (old_eth_num - delta) + i;
 181
 182                        memcpy(&bp->bnx2x_txq[new_idx], fp->txdata_ptr[cos],
 183                               sizeof(struct bnx2x_fp_txdata));
 184                        fp->txdata_ptr[cos] = &bp->bnx2x_txq[new_idx];
 185                }
 186        }
 187}
 188
 189int bnx2x_load_count[2][3] = { {0} }; /* per-path: 0-common, 1-port0, 2-port1 */
 190
 191/* free skb in the packet ring at pos idx
 192 * return idx of last bd freed
 193 */
 194static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
 195                             u16 idx, unsigned int *pkts_compl,
 196                             unsigned int *bytes_compl)
 197{
 198        struct sw_tx_bd *tx_buf = &txdata->tx_buf_ring[idx];
 199        struct eth_tx_start_bd *tx_start_bd;
 200        struct eth_tx_bd *tx_data_bd;
 201        struct sk_buff *skb = tx_buf->skb;
 202        u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons;
 203        int nbd;
 204        u16 split_bd_len = 0;
 205
 206        /* prefetch skb end pointer to speedup dev_kfree_skb() */
 207        prefetch(&skb->end);
 208
 209        DP(NETIF_MSG_TX_DONE, "fp[%d]: pkt_idx %d  buff @(%p)->skb %p\n",
 210           txdata->txq_index, idx, tx_buf, skb);
 211
 212        tx_start_bd = &txdata->tx_desc_ring[bd_idx].start_bd;
 213
 214        nbd = le16_to_cpu(tx_start_bd->nbd) - 1;
 215#ifdef BNX2X_STOP_ON_ERROR
 216        if ((nbd - 1) > (MAX_SKB_FRAGS + 2)) {
 217                BNX2X_ERR("BAD nbd!\n");
 218                bnx2x_panic();
 219        }
 220#endif
 221        new_cons = nbd + tx_buf->first_bd;
 222
 223        /* Get the next bd */
 224        bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
 225
 226        /* Skip a parse bd... */
 227        --nbd;
 228        bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
 229
 230        if (tx_buf->flags & BNX2X_HAS_SECOND_PBD) {
 231                /* Skip second parse bd... */
 232                --nbd;
 233                bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
 234        }
 235
 236        /* TSO headers+data bds share a common mapping. See bnx2x_tx_split() */
 237        if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) {
 238                tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd;
 239                split_bd_len = BD_UNMAP_LEN(tx_data_bd);
 240                --nbd;
 241                bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
 242        }
 243
 244        /* unmap first bd */
 245        dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd),
 246                         BD_UNMAP_LEN(tx_start_bd) + split_bd_len,
 247                         DMA_TO_DEVICE);
 248
 249        /* now free frags */
 250        while (nbd > 0) {
 251
 252                tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd;
 253                dma_unmap_page(&bp->pdev->dev, BD_UNMAP_ADDR(tx_data_bd),
 254                               BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE);
 255                if (--nbd)
 256                        bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
 257        }
 258
 259        /* release skb */
 260        WARN_ON(!skb);
 261        if (likely(skb)) {
 262                (*pkts_compl)++;
 263                (*bytes_compl) += skb->len;
 264                dev_kfree_skb_any(skb);
 265        }
 266
 267        tx_buf->first_bd = 0;
 268        tx_buf->skb = NULL;
 269
 270        return new_cons;
 271}
 272
 273int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata)
 274{
 275        struct netdev_queue *txq;
 276        u16 hw_cons, sw_cons, bd_cons = txdata->tx_bd_cons;
 277        unsigned int pkts_compl = 0, bytes_compl = 0;
 278
 279#ifdef BNX2X_STOP_ON_ERROR
 280        if (unlikely(bp->panic))
 281                return -1;
 282#endif
 283
 284        txq = netdev_get_tx_queue(bp->dev, txdata->txq_index);
 285        hw_cons = le16_to_cpu(*txdata->tx_cons_sb);
 286        sw_cons = txdata->tx_pkt_cons;
 287
 288        /* Ensure subsequent loads occur after hw_cons */
 289        smp_rmb();
 290
 291        while (sw_cons != hw_cons) {
 292                u16 pkt_cons;
 293
 294                pkt_cons = TX_BD(sw_cons);
 295
 296                DP(NETIF_MSG_TX_DONE,
 297                   "queue[%d]: hw_cons %u  sw_cons %u  pkt_cons %u\n",
 298                   txdata->txq_index, hw_cons, sw_cons, pkt_cons);
 299
 300                bd_cons = bnx2x_free_tx_pkt(bp, txdata, pkt_cons,
 301                                            &pkts_compl, &bytes_compl);
 302
 303                sw_cons++;
 304        }
 305
 306        netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
 307
 308        txdata->tx_pkt_cons = sw_cons;
 309        txdata->tx_bd_cons = bd_cons;
 310
 311        /* Need to make the tx_bd_cons update visible to start_xmit()
 312         * before checking for netif_tx_queue_stopped().  Without the
 313         * memory barrier, there is a small possibility that
 314         * start_xmit() will miss it and cause the queue to be stopped
 315         * forever.
 316         * On the other hand we need an rmb() here to ensure the proper
 317         * ordering of bit testing in the following
 318         * netif_tx_queue_stopped(txq) call.
 319         */
 320        smp_mb();
 321
 322        if (unlikely(netif_tx_queue_stopped(txq))) {
 323                /* Taking tx_lock() is needed to prevent re-enabling the queue
 324                 * while it's empty. This could have happen if rx_action() gets
 325                 * suspended in bnx2x_tx_int() after the condition before
 326                 * netif_tx_wake_queue(), while tx_action (bnx2x_start_xmit()):
 327                 *
 328                 * stops the queue->sees fresh tx_bd_cons->releases the queue->
 329                 * sends some packets consuming the whole queue again->
 330                 * stops the queue
 331                 */
 332
 333                __netif_tx_lock(txq, smp_processor_id());
 334
 335                if ((netif_tx_queue_stopped(txq)) &&
 336                    (bp->state == BNX2X_STATE_OPEN) &&
 337                    (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT))
 338                        netif_tx_wake_queue(txq);
 339
 340                __netif_tx_unlock(txq);
 341        }
 342        return 0;
 343}
 344
 345static inline void bnx2x_update_last_max_sge(struct bnx2x_fastpath *fp,
 346                                             u16 idx)
 347{
 348        u16 last_max = fp->last_max_sge;
 349
 350        if (SUB_S16(idx, last_max) > 0)
 351                fp->last_max_sge = idx;
 352}
 353
 354static inline void bnx2x_update_sge_prod(struct bnx2x_fastpath *fp,
 355                                         u16 sge_len,
 356                                         struct eth_end_agg_rx_cqe *cqe)
 357{
 358        struct bnx2x *bp = fp->bp;
 359        u16 last_max, last_elem, first_elem;
 360        u16 delta = 0;
 361        u16 i;
 362
 363        if (!sge_len)
 364                return;
 365
 366        /* First mark all used pages */
 367        for (i = 0; i < sge_len; i++)
 368                BIT_VEC64_CLEAR_BIT(fp->sge_mask,
 369                        RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[i])));
 370
 371        DP(NETIF_MSG_RX_STATUS, "fp_cqe->sgl[%d] = %d\n",
 372           sge_len - 1, le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1]));
 373
 374        /* Here we assume that the last SGE index is the biggest */
 375        prefetch((void *)(fp->sge_mask));
 376        bnx2x_update_last_max_sge(fp,
 377                le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1]));
 378
 379        last_max = RX_SGE(fp->last_max_sge);
 380        last_elem = last_max >> BIT_VEC64_ELEM_SHIFT;
 381        first_elem = RX_SGE(fp->rx_sge_prod) >> BIT_VEC64_ELEM_SHIFT;
 382
 383        /* If ring is not full */
 384        if (last_elem + 1 != first_elem)
 385                last_elem++;
 386
 387        /* Now update the prod */
 388        for (i = first_elem; i != last_elem; i = NEXT_SGE_MASK_ELEM(i)) {
 389                if (likely(fp->sge_mask[i]))
 390                        break;
 391
 392                fp->sge_mask[i] = BIT_VEC64_ELEM_ONE_MASK;
 393                delta += BIT_VEC64_ELEM_SZ;
 394        }
 395
 396        if (delta > 0) {
 397                fp->rx_sge_prod += delta;
 398                /* clear page-end entries */
 399                bnx2x_clear_sge_mask_next_elems(fp);
 400        }
 401
 402        DP(NETIF_MSG_RX_STATUS,
 403           "fp->last_max_sge = %d  fp->rx_sge_prod = %d\n",
 404           fp->last_max_sge, fp->rx_sge_prod);
 405}
 406
 407/* Get Toeplitz hash value in the skb using the value from the
 408 * CQE (calculated by HW).
 409 */
 410static u32 bnx2x_get_rxhash(const struct bnx2x *bp,
 411                            const struct eth_fast_path_rx_cqe *cqe,
 412                            enum pkt_hash_types *rxhash_type)
 413{
 414        /* Get Toeplitz hash from CQE */
 415        if ((bp->dev->features & NETIF_F_RXHASH) &&
 416            (cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG)) {
 417                enum eth_rss_hash_type htype;
 418
 419                htype = cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE;
 420                *rxhash_type = ((htype == TCP_IPV4_HASH_TYPE) ||
 421                                (htype == TCP_IPV6_HASH_TYPE)) ?
 422                               PKT_HASH_TYPE_L4 : PKT_HASH_TYPE_L3;
 423
 424                return le32_to_cpu(cqe->rss_hash_result);
 425        }
 426        *rxhash_type = PKT_HASH_TYPE_NONE;
 427        return 0;
 428}
 429
 430static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue,
 431                            u16 cons, u16 prod,
 432                            struct eth_fast_path_rx_cqe *cqe)
 433{
 434        struct bnx2x *bp = fp->bp;
 435        struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons];
 436        struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod];
 437        struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod];
 438        dma_addr_t mapping;
 439        struct bnx2x_agg_info *tpa_info = &fp->tpa_info[queue];
 440        struct sw_rx_bd *first_buf = &tpa_info->first_buf;
 441
 442        /* print error if current state != stop */
 443        if (tpa_info->tpa_state != BNX2X_TPA_STOP)
 444                BNX2X_ERR("start of bin not in stop [%d]\n", queue);
 445
 446        /* Try to map an empty data buffer from the aggregation info  */
 447        mapping = dma_map_single(&bp->pdev->dev,
 448                                 first_buf->data + NET_SKB_PAD,
 449                                 fp->rx_buf_size, DMA_FROM_DEVICE);
 450        /*
 451         *  ...if it fails - move the skb from the consumer to the producer
 452         *  and set the current aggregation state as ERROR to drop it
 453         *  when TPA_STOP arrives.
 454         */
 455
 456        if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
 457                /* Move the BD from the consumer to the producer */
 458                bnx2x_reuse_rx_data(fp, cons, prod);
 459                tpa_info->tpa_state = BNX2X_TPA_ERROR;
 460                return;
 461        }
 462
 463        /* move empty data from pool to prod */
 464        prod_rx_buf->data = first_buf->data;
 465        dma_unmap_addr_set(prod_rx_buf, mapping, mapping);
 466        /* point prod_bd to new data */
 467        prod_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
 468        prod_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
 469
 470        /* move partial skb from cons to pool (don't unmap yet) */
 471        *first_buf = *cons_rx_buf;
 472
 473        /* mark bin state as START */
 474        tpa_info->parsing_flags =
 475                le16_to_cpu(cqe->pars_flags.flags);
 476        tpa_info->vlan_tag = le16_to_cpu(cqe->vlan_tag);
 477        tpa_info->tpa_state = BNX2X_TPA_START;
 478        tpa_info->len_on_bd = le16_to_cpu(cqe->len_on_bd);
 479        tpa_info->placement_offset = cqe->placement_offset;
 480        tpa_info->rxhash = bnx2x_get_rxhash(bp, cqe, &tpa_info->rxhash_type);
 481        if (fp->mode == TPA_MODE_GRO) {
 482                u16 gro_size = le16_to_cpu(cqe->pkt_len_or_gro_seg_len);
 483                tpa_info->full_page = SGE_PAGES / gro_size * gro_size;
 484                tpa_info->gro_size = gro_size;
 485        }
 486
 487#ifdef BNX2X_STOP_ON_ERROR
 488        fp->tpa_queue_used |= (1 << queue);
 489        DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n",
 490           fp->tpa_queue_used);
 491#endif
 492}
 493
 494/* Timestamp option length allowed for TPA aggregation:
 495 *
 496 *              nop nop kind length echo val
 497 */
 498#define TPA_TSTAMP_OPT_LEN      12
 499/**
 500 * bnx2x_set_gro_params - compute GRO values
 501 *
 502 * @skb:                packet skb
 503 * @parsing_flags:      parsing flags from the START CQE
 504 * @len_on_bd:          total length of the first packet for the
 505 *                      aggregation.
 506 * @pkt_len:            length of all segments
 507 *
 508 * Approximate value of the MSS for this aggregation calculated using
 509 * the first packet of it.
 510 * Compute number of aggregated segments, and gso_type.
 511 */
 512static void bnx2x_set_gro_params(struct sk_buff *skb, u16 parsing_flags,
 513                                 u16 len_on_bd, unsigned int pkt_len,
 514                                 u16 num_of_coalesced_segs)
 515{
 516        /* TPA aggregation won't have either IP options or TCP options
 517         * other than timestamp or IPv6 extension headers.
 518         */
 519        u16 hdrs_len = ETH_HLEN + sizeof(struct tcphdr);
 520
 521        if (GET_FLAG(parsing_flags, PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) ==
 522            PRS_FLAG_OVERETH_IPV6) {
 523                hdrs_len += sizeof(struct ipv6hdr);
 524                skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
 525        } else {
 526                hdrs_len += sizeof(struct iphdr);
 527                skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
 528        }
 529
 530        /* Check if there was a TCP timestamp, if there is it's will
 531         * always be 12 bytes length: nop nop kind length echo val.
 532         *
 533         * Otherwise FW would close the aggregation.
 534         */
 535        if (parsing_flags & PARSING_FLAGS_TIME_STAMP_EXIST_FLAG)
 536                hdrs_len += TPA_TSTAMP_OPT_LEN;
 537
 538        skb_shinfo(skb)->gso_size = len_on_bd - hdrs_len;
 539
 540        /* tcp_gro_complete() will copy NAPI_GRO_CB(skb)->count
 541         * to skb_shinfo(skb)->gso_segs
 542         */
 543        NAPI_GRO_CB(skb)->count = num_of_coalesced_segs;
 544}
 545
 546static int bnx2x_alloc_rx_sge(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 547                              u16 index, gfp_t gfp_mask)
 548{
 549        struct sw_rx_page *sw_buf = &fp->rx_page_ring[index];
 550        struct eth_rx_sge *sge = &fp->rx_sge_ring[index];
 551        struct bnx2x_alloc_pool *pool = &fp->page_pool;
 552        dma_addr_t mapping;
 553
 554        if (!pool->page) {
 555                pool->page = alloc_pages(gfp_mask, PAGES_PER_SGE_SHIFT);
 556                if (unlikely(!pool->page))
 557                        return -ENOMEM;
 558
 559                pool->offset = 0;
 560        }
 561
 562        mapping = dma_map_page(&bp->pdev->dev, pool->page,
 563                               pool->offset, SGE_PAGE_SIZE, DMA_FROM_DEVICE);
 564        if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
 565                BNX2X_ERR("Can't map sge\n");
 566                return -ENOMEM;
 567        }
 568
 569        sw_buf->page = pool->page;
 570        sw_buf->offset = pool->offset;
 571
 572        dma_unmap_addr_set(sw_buf, mapping, mapping);
 573
 574        sge->addr_hi = cpu_to_le32(U64_HI(mapping));
 575        sge->addr_lo = cpu_to_le32(U64_LO(mapping));
 576
 577        pool->offset += SGE_PAGE_SIZE;
 578        if (PAGE_SIZE - pool->offset >= SGE_PAGE_SIZE)
 579                get_page(pool->page);
 580        else
 581                pool->page = NULL;
 582        return 0;
 583}
 584
 585static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 586                               struct bnx2x_agg_info *tpa_info,
 587                               u16 pages,
 588                               struct sk_buff *skb,
 589                               struct eth_end_agg_rx_cqe *cqe,
 590                               u16 cqe_idx)
 591{
 592        struct sw_rx_page *rx_pg, old_rx_pg;
 593        u32 i, frag_len, frag_size;
 594        int err, j, frag_id = 0;
 595        u16 len_on_bd = tpa_info->len_on_bd;
 596        u16 full_page = 0, gro_size = 0;
 597
 598        frag_size = le16_to_cpu(cqe->pkt_len) - len_on_bd;
 599
 600        if (fp->mode == TPA_MODE_GRO) {
 601                gro_size = tpa_info->gro_size;
 602                full_page = tpa_info->full_page;
 603        }
 604
 605        /* This is needed in order to enable forwarding support */
 606        if (frag_size)
 607                bnx2x_set_gro_params(skb, tpa_info->parsing_flags, len_on_bd,
 608                                     le16_to_cpu(cqe->pkt_len),
 609                                     le16_to_cpu(cqe->num_of_coalesced_segs));
 610
 611#ifdef BNX2X_STOP_ON_ERROR
 612        if (pages > min_t(u32, 8, MAX_SKB_FRAGS) * SGE_PAGES) {
 613                BNX2X_ERR("SGL length is too long: %d. CQE index is %d\n",
 614                          pages, cqe_idx);
 615                BNX2X_ERR("cqe->pkt_len = %d\n", cqe->pkt_len);
 616                bnx2x_panic();
 617                return -EINVAL;
 618        }
 619#endif
 620
 621        /* Run through the SGL and compose the fragmented skb */
 622        for (i = 0, j = 0; i < pages; i += PAGES_PER_SGE, j++) {
 623                u16 sge_idx = RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[j]));
 624
 625                /* FW gives the indices of the SGE as if the ring is an array
 626                   (meaning that "next" element will consume 2 indices) */
 627                if (fp->mode == TPA_MODE_GRO)
 628                        frag_len = min_t(u32, frag_size, (u32)full_page);
 629                else /* LRO */
 630                        frag_len = min_t(u32, frag_size, (u32)SGE_PAGES);
 631
 632                rx_pg = &fp->rx_page_ring[sge_idx];
 633                old_rx_pg = *rx_pg;
 634
 635                /* If we fail to allocate a substitute page, we simply stop
 636                   where we are and drop the whole packet */
 637                err = bnx2x_alloc_rx_sge(bp, fp, sge_idx, GFP_ATOMIC);
 638                if (unlikely(err)) {
 639                        bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
 640                        return err;
 641                }
 642
 643                dma_unmap_page(&bp->pdev->dev,
 644                               dma_unmap_addr(&old_rx_pg, mapping),
 645                               SGE_PAGE_SIZE, DMA_FROM_DEVICE);
 646                /* Add one frag and update the appropriate fields in the skb */
 647                if (fp->mode == TPA_MODE_LRO)
 648                        skb_fill_page_desc(skb, j, old_rx_pg.page,
 649                                           old_rx_pg.offset, frag_len);
 650                else { /* GRO */
 651                        int rem;
 652                        int offset = 0;
 653                        for (rem = frag_len; rem > 0; rem -= gro_size) {
 654                                int len = rem > gro_size ? gro_size : rem;
 655                                skb_fill_page_desc(skb, frag_id++,
 656                                                   old_rx_pg.page,
 657                                                   old_rx_pg.offset + offset,
 658                                                   len);
 659                                if (offset)
 660                                        get_page(old_rx_pg.page);
 661                                offset += len;
 662                        }
 663                }
 664
 665                skb->data_len += frag_len;
 666                skb->truesize += SGE_PAGES;
 667                skb->len += frag_len;
 668
 669                frag_size -= frag_len;
 670        }
 671
 672        return 0;
 673}
 674
 675static void bnx2x_frag_free(const struct bnx2x_fastpath *fp, void *data)
 676{
 677        if (fp->rx_frag_size)
 678                skb_free_frag(data);
 679        else
 680                kfree(data);
 681}
 682
 683static void *bnx2x_frag_alloc(const struct bnx2x_fastpath *fp, gfp_t gfp_mask)
 684{
 685        if (fp->rx_frag_size) {
 686                /* GFP_KERNEL allocations are used only during initialization */
 687                if (unlikely(gfpflags_allow_blocking(gfp_mask)))
 688                        return (void *)__get_free_page(gfp_mask);
 689
 690                return napi_alloc_frag(fp->rx_frag_size);
 691        }
 692
 693        return kmalloc(fp->rx_buf_size + NET_SKB_PAD, gfp_mask);
 694}
 695
 696#ifdef CONFIG_INET
 697static void bnx2x_gro_ip_csum(struct bnx2x *bp, struct sk_buff *skb)
 698{
 699        const struct iphdr *iph = ip_hdr(skb);
 700        struct tcphdr *th;
 701
 702        skb_set_transport_header(skb, sizeof(struct iphdr));
 703        th = tcp_hdr(skb);
 704
 705        th->check = ~tcp_v4_check(skb->len - skb_transport_offset(skb),
 706                                  iph->saddr, iph->daddr, 0);
 707}
 708
 709static void bnx2x_gro_ipv6_csum(struct bnx2x *bp, struct sk_buff *skb)
 710{
 711        struct ipv6hdr *iph = ipv6_hdr(skb);
 712        struct tcphdr *th;
 713
 714        skb_set_transport_header(skb, sizeof(struct ipv6hdr));
 715        th = tcp_hdr(skb);
 716
 717        th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb),
 718                                  &iph->saddr, &iph->daddr, 0);
 719}
 720
 721static void bnx2x_gro_csum(struct bnx2x *bp, struct sk_buff *skb,
 722                            void (*gro_func)(struct bnx2x*, struct sk_buff*))
 723{
 724        skb_reset_network_header(skb);
 725        gro_func(bp, skb);
 726        tcp_gro_complete(skb);
 727}
 728#endif
 729
 730static void bnx2x_gro_receive(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 731                               struct sk_buff *skb)
 732{
 733#ifdef CONFIG_INET
 734        if (skb_shinfo(skb)->gso_size) {
 735                switch (be16_to_cpu(skb->protocol)) {
 736                case ETH_P_IP:
 737                        bnx2x_gro_csum(bp, skb, bnx2x_gro_ip_csum);
 738                        break;
 739                case ETH_P_IPV6:
 740                        bnx2x_gro_csum(bp, skb, bnx2x_gro_ipv6_csum);
 741                        break;
 742                default:
 743                        netdev_WARN_ONCE(bp->dev,
 744                                         "Error: FW GRO supports only IPv4/IPv6, not 0x%04x\n",
 745                                         be16_to_cpu(skb->protocol));
 746                }
 747        }
 748#endif
 749        skb_record_rx_queue(skb, fp->rx_queue);
 750        napi_gro_receive(&fp->napi, skb);
 751}
 752
 753static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 754                           struct bnx2x_agg_info *tpa_info,
 755                           u16 pages,
 756                           struct eth_end_agg_rx_cqe *cqe,
 757                           u16 cqe_idx)
 758{
 759        struct sw_rx_bd *rx_buf = &tpa_info->first_buf;
 760        u8 pad = tpa_info->placement_offset;
 761        u16 len = tpa_info->len_on_bd;
 762        struct sk_buff *skb = NULL;
 763        u8 *new_data, *data = rx_buf->data;
 764        u8 old_tpa_state = tpa_info->tpa_state;
 765
 766        tpa_info->tpa_state = BNX2X_TPA_STOP;
 767
 768        /* If we there was an error during the handling of the TPA_START -
 769         * drop this aggregation.
 770         */
 771        if (old_tpa_state == BNX2X_TPA_ERROR)
 772                goto drop;
 773
 774        /* Try to allocate the new data */
 775        new_data = bnx2x_frag_alloc(fp, GFP_ATOMIC);
 776        /* Unmap skb in the pool anyway, as we are going to change
 777           pool entry status to BNX2X_TPA_STOP even if new skb allocation
 778           fails. */
 779        dma_unmap_single(&bp->pdev->dev, dma_unmap_addr(rx_buf, mapping),
 780                         fp->rx_buf_size, DMA_FROM_DEVICE);
 781        if (likely(new_data))
 782                skb = build_skb(data, fp->rx_frag_size);
 783
 784        if (likely(skb)) {
 785#ifdef BNX2X_STOP_ON_ERROR
 786                if (pad + len > fp->rx_buf_size) {
 787                        BNX2X_ERR("skb_put is about to fail...  pad %d  len %d  rx_buf_size %d\n",
 788                                  pad, len, fp->rx_buf_size);
 789                        bnx2x_panic();
 790                        return;
 791                }
 792#endif
 793
 794                skb_reserve(skb, pad + NET_SKB_PAD);
 795                skb_put(skb, len);
 796                skb_set_hash(skb, tpa_info->rxhash, tpa_info->rxhash_type);
 797
 798                skb->protocol = eth_type_trans(skb, bp->dev);
 799                skb->ip_summed = CHECKSUM_UNNECESSARY;
 800
 801                if (!bnx2x_fill_frag_skb(bp, fp, tpa_info, pages,
 802                                         skb, cqe, cqe_idx)) {
 803                        if (tpa_info->parsing_flags & PARSING_FLAGS_VLAN)
 804                                __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), tpa_info->vlan_tag);
 805                        bnx2x_gro_receive(bp, fp, skb);
 806                } else {
 807                        DP(NETIF_MSG_RX_STATUS,
 808                           "Failed to allocate new pages - dropping packet!\n");
 809                        dev_kfree_skb_any(skb);
 810                }
 811
 812                /* put new data in bin */
 813                rx_buf->data = new_data;
 814
 815                return;
 816        }
 817        if (new_data)
 818                bnx2x_frag_free(fp, new_data);
 819drop:
 820        /* drop the packet and keep the buffer in the bin */
 821        DP(NETIF_MSG_RX_STATUS,
 822           "Failed to allocate or map a new skb - dropping packet!\n");
 823        bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed++;
 824}
 825
 826static int bnx2x_alloc_rx_data(struct bnx2x *bp, struct bnx2x_fastpath *fp,
 827                               u16 index, gfp_t gfp_mask)
 828{
 829        u8 *data;
 830        struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[index];
 831        struct eth_rx_bd *rx_bd = &fp->rx_desc_ring[index];
 832        dma_addr_t mapping;
 833
 834        data = bnx2x_frag_alloc(fp, gfp_mask);
 835        if (unlikely(data == NULL))
 836                return -ENOMEM;
 837
 838        mapping = dma_map_single(&bp->pdev->dev, data + NET_SKB_PAD,
 839                                 fp->rx_buf_size,
 840                                 DMA_FROM_DEVICE);
 841        if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
 842                bnx2x_frag_free(fp, data);
 843                BNX2X_ERR("Can't map rx data\n");
 844                return -ENOMEM;
 845        }
 846
 847        rx_buf->data = data;
 848        dma_unmap_addr_set(rx_buf, mapping, mapping);
 849
 850        rx_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
 851        rx_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
 852
 853        return 0;
 854}
 855
 856static
 857void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,
 858                                 struct bnx2x_fastpath *fp,
 859                                 struct bnx2x_eth_q_stats *qstats)
 860{
 861        /* Do nothing if no L4 csum validation was done.
 862         * We do not check whether IP csum was validated. For IPv4 we assume
 863         * that if the card got as far as validating the L4 csum, it also
 864         * validated the IP csum. IPv6 has no IP csum.
 865         */
 866        if (cqe->fast_path_cqe.status_flags &
 867            ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)
 868                return;
 869
 870        /* If L4 validation was done, check if an error was found. */
 871
 872        if (cqe->fast_path_cqe.type_error_flags &
 873            (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG |
 874             ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG))
 875                qstats->hw_csum_err++;
 876        else
 877                skb->ip_summed = CHECKSUM_UNNECESSARY;
 878}
 879
 880static int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
 881{
 882        struct bnx2x *bp = fp->bp;
 883        u16 bd_cons, bd_prod, bd_prod_fw, comp_ring_cons;
 884        u16 sw_comp_cons, sw_comp_prod;
 885        int rx_pkt = 0;
 886        union eth_rx_cqe *cqe;
 887        struct eth_fast_path_rx_cqe *cqe_fp;
 888
 889#ifdef BNX2X_STOP_ON_ERROR
 890        if (unlikely(bp->panic))
 891                return 0;
 892#endif
 893        if (budget <= 0)
 894                return rx_pkt;
 895
 896        bd_cons = fp->rx_bd_cons;
 897        bd_prod = fp->rx_bd_prod;
 898        bd_prod_fw = bd_prod;
 899        sw_comp_cons = fp->rx_comp_cons;
 900        sw_comp_prod = fp->rx_comp_prod;
 901
 902        comp_ring_cons = RCQ_BD(sw_comp_cons);
 903        cqe = &fp->rx_comp_ring[comp_ring_cons];
 904        cqe_fp = &cqe->fast_path_cqe;
 905
 906        DP(NETIF_MSG_RX_STATUS,
 907           "queue[%d]: sw_comp_cons %u\n", fp->index, sw_comp_cons);
 908
 909        while (BNX2X_IS_CQE_COMPLETED(cqe_fp)) {
 910                struct sw_rx_bd *rx_buf = NULL;
 911                struct sk_buff *skb;
 912                u8 cqe_fp_flags;
 913                enum eth_rx_cqe_type cqe_fp_type;
 914                u16 len, pad, queue;
 915                u8 *data;
 916                u32 rxhash;
 917                enum pkt_hash_types rxhash_type;
 918
 919#ifdef BNX2X_STOP_ON_ERROR
 920                if (unlikely(bp->panic))
 921                        return 0;
 922#endif
 923
 924                bd_prod = RX_BD(bd_prod);
 925                bd_cons = RX_BD(bd_cons);
 926
 927                /* A rmb() is required to ensure that the CQE is not read
 928                 * before it is written by the adapter DMA.  PCI ordering
 929                 * rules will make sure the other fields are written before
 930                 * the marker at the end of struct eth_fast_path_rx_cqe
 931                 * but without rmb() a weakly ordered processor can process
 932                 * stale data.  Without the barrier TPA state-machine might
 933                 * enter inconsistent state and kernel stack might be
 934                 * provided with incorrect packet description - these lead
 935                 * to various kernel crashed.
 936                 */
 937                rmb();
 938
 939                cqe_fp_flags = cqe_fp->type_error_flags;
 940                cqe_fp_type = cqe_fp_flags & ETH_FAST_PATH_RX_CQE_TYPE;
 941
 942                DP(NETIF_MSG_RX_STATUS,
 943                   "CQE type %x  err %x  status %x  queue %x  vlan %x  len %u\n",
 944                   CQE_TYPE(cqe_fp_flags),
 945                   cqe_fp_flags, cqe_fp->status_flags,
 946                   le32_to_cpu(cqe_fp->rss_hash_result),
 947                   le16_to_cpu(cqe_fp->vlan_tag),
 948                   le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len));
 949
 950                /* is this a slowpath msg? */
 951                if (unlikely(CQE_TYPE_SLOW(cqe_fp_type))) {
 952                        bnx2x_sp_event(fp, cqe);
 953                        goto next_cqe;
 954                }
 955
 956                rx_buf = &fp->rx_buf_ring[bd_cons];
 957                data = rx_buf->data;
 958
 959                if (!CQE_TYPE_FAST(cqe_fp_type)) {
 960                        struct bnx2x_agg_info *tpa_info;
 961                        u16 frag_size, pages;
 962#ifdef BNX2X_STOP_ON_ERROR
 963                        /* sanity check */
 964                        if (fp->mode == TPA_MODE_DISABLED &&
 965                            (CQE_TYPE_START(cqe_fp_type) ||
 966                             CQE_TYPE_STOP(cqe_fp_type)))
 967                                BNX2X_ERR("START/STOP packet while TPA disabled, type %x\n",
 968                                          CQE_TYPE(cqe_fp_type));
 969#endif
 970
 971                        if (CQE_TYPE_START(cqe_fp_type)) {
 972                                u16 queue = cqe_fp->queue_index;
 973                                DP(NETIF_MSG_RX_STATUS,
 974                                   "calling tpa_start on queue %d\n",
 975                                   queue);
 976
 977                                bnx2x_tpa_start(fp, queue,
 978                                                bd_cons, bd_prod,
 979                                                cqe_fp);
 980
 981                                goto next_rx;
 982                        }
 983                        queue = cqe->end_agg_cqe.queue_index;
 984                        tpa_info = &fp->tpa_info[queue];
 985                        DP(NETIF_MSG_RX_STATUS,
 986                           "calling tpa_stop on queue %d\n",
 987                           queue);
 988
 989                        frag_size = le16_to_cpu(cqe->end_agg_cqe.pkt_len) -
 990                                    tpa_info->len_on_bd;
 991
 992                        if (fp->mode == TPA_MODE_GRO)
 993                                pages = (frag_size + tpa_info->full_page - 1) /
 994                                         tpa_info->full_page;
 995                        else
 996                                pages = SGE_PAGE_ALIGN(frag_size) >>
 997                                        SGE_PAGE_SHIFT;
 998
 999                        bnx2x_tpa_stop(bp, fp, tpa_info, pages,
1000                                       &cqe->end_agg_cqe, comp_ring_cons);
1001#ifdef BNX2X_STOP_ON_ERROR
1002                        if (bp->panic)
1003                                return 0;
1004#endif
1005
1006                        bnx2x_update_sge_prod(fp, pages, &cqe->end_agg_cqe);
1007                        goto next_cqe;
1008                }
1009                /* non TPA */
1010                len = le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len);
1011                pad = cqe_fp->placement_offset;
1012                dma_sync_single_for_cpu(&bp->pdev->dev,
1013                                        dma_unmap_addr(rx_buf, mapping),
1014                                        pad + RX_COPY_THRESH,
1015                                        DMA_FROM_DEVICE);
1016                pad += NET_SKB_PAD;
1017                prefetch(data + pad); /* speedup eth_type_trans() */
1018                /* is this an error packet? */
1019                if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
1020                        DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
1021                           "ERROR  flags %x  rx packet %u\n",
1022                           cqe_fp_flags, sw_comp_cons);
1023                        bnx2x_fp_qstats(bp, fp)->rx_err_discard_pkt++;
1024                        goto reuse_rx;
1025                }
1026
1027                /* Since we don't have a jumbo ring
1028                 * copy small packets if mtu > 1500
1029                 */
1030                if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) &&
1031                    (len <= RX_COPY_THRESH)) {
1032                        skb = napi_alloc_skb(&fp->napi, len);
1033                        if (skb == NULL) {
1034                                DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
1035                                   "ERROR  packet dropped because of alloc failure\n");
1036                                bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
1037                                goto reuse_rx;
1038                        }
1039                        memcpy(skb->data, data + pad, len);
1040                        bnx2x_reuse_rx_data(fp, bd_cons, bd_prod);
1041                } else {
1042                        if (likely(bnx2x_alloc_rx_data(bp, fp, bd_prod,
1043                                                       GFP_ATOMIC) == 0)) {
1044                                dma_unmap_single(&bp->pdev->dev,
1045                                                 dma_unmap_addr(rx_buf, mapping),
1046                                                 fp->rx_buf_size,
1047                                                 DMA_FROM_DEVICE);
1048                                skb = build_skb(data, fp->rx_frag_size);
1049                                if (unlikely(!skb)) {
1050                                        bnx2x_frag_free(fp, data);
1051                                        bnx2x_fp_qstats(bp, fp)->
1052                                                        rx_skb_alloc_failed++;
1053                                        goto next_rx;
1054                                }
1055                                skb_reserve(skb, pad);
1056                        } else {
1057                                DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
1058                                   "ERROR  packet dropped because of alloc failure\n");
1059                                bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
1060reuse_rx:
1061                                bnx2x_reuse_rx_data(fp, bd_cons, bd_prod);
1062                                goto next_rx;
1063                        }
1064                }
1065
1066                skb_put(skb, len);
1067                skb->protocol = eth_type_trans(skb, bp->dev);
1068
1069                /* Set Toeplitz hash for a none-LRO skb */
1070                rxhash = bnx2x_get_rxhash(bp, cqe_fp, &rxhash_type);
1071                skb_set_hash(skb, rxhash, rxhash_type);
1072
1073                skb_checksum_none_assert(skb);
1074
1075                if (bp->dev->features & NETIF_F_RXCSUM)
1076                        bnx2x_csum_validate(skb, cqe, fp,
1077                                            bnx2x_fp_qstats(bp, fp));
1078
1079                skb_record_rx_queue(skb, fp->rx_queue);
1080
1081                /* Check if this packet was timestamped */
1082                if (unlikely(cqe->fast_path_cqe.type_error_flags &
1083                             (1 << ETH_FAST_PATH_RX_CQE_PTP_PKT_SHIFT)))
1084                        bnx2x_set_rx_ts(bp, skb);
1085
1086                if (le16_to_cpu(cqe_fp->pars_flags.flags) &
1087                    PARSING_FLAGS_VLAN)
1088                        __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
1089                                               le16_to_cpu(cqe_fp->vlan_tag));
1090
1091                napi_gro_receive(&fp->napi, skb);
1092next_rx:
1093                rx_buf->data = NULL;
1094
1095                bd_cons = NEXT_RX_IDX(bd_cons);
1096                bd_prod = NEXT_RX_IDX(bd_prod);
1097                bd_prod_fw = NEXT_RX_IDX(bd_prod_fw);
1098                rx_pkt++;
1099next_cqe:
1100                sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod);
1101                sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons);
1102
1103                /* mark CQE as free */
1104                BNX2X_SEED_CQE(cqe_fp);
1105
1106                if (rx_pkt == budget)
1107                        break;
1108
1109                comp_ring_cons = RCQ_BD(sw_comp_cons);
1110                cqe = &fp->rx_comp_ring[comp_ring_cons];
1111                cqe_fp = &cqe->fast_path_cqe;
1112        } /* while */
1113
1114        fp->rx_bd_cons = bd_cons;
1115        fp->rx_bd_prod = bd_prod_fw;
1116        fp->rx_comp_cons = sw_comp_cons;
1117        fp->rx_comp_prod = sw_comp_prod;
1118
1119        /* Update producers */
1120        bnx2x_update_rx_prod(bp, fp, bd_prod_fw, sw_comp_prod,
1121                             fp->rx_sge_prod);
1122
1123        return rx_pkt;
1124}
1125
1126static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie)
1127{
1128        struct bnx2x_fastpath *fp = fp_cookie;
1129        struct bnx2x *bp = fp->bp;
1130        u8 cos;
1131
1132        DP(NETIF_MSG_INTR,
1133           "got an MSI-X interrupt on IDX:SB [fp %d fw_sd %d igusb %d]\n",
1134           fp->index, fp->fw_sb_id, fp->igu_sb_id);
1135
1136        bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_DISABLE, 0);
1137
1138#ifdef BNX2X_STOP_ON_ERROR
1139        if (unlikely(bp->panic))
1140                return IRQ_HANDLED;
1141#endif
1142
1143        /* Handle Rx and Tx according to MSI-X vector */
1144        for_each_cos_in_tx_queue(fp, cos)
1145                prefetch(fp->txdata_ptr[cos]->tx_cons_sb);
1146
1147        prefetch(&fp->sb_running_index[SM_RX_ID]);
1148        napi_schedule_irqoff(&bnx2x_fp(bp, fp->index, napi));
1149
1150        return IRQ_HANDLED;
1151}
1152
1153/* HW Lock for shared dual port PHYs */
1154void bnx2x_acquire_phy_lock(struct bnx2x *bp)
1155{
1156        mutex_lock(&bp->port.phy_mutex);
1157
1158        bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
1159}
1160
1161void bnx2x_release_phy_lock(struct bnx2x *bp)
1162{
1163        bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
1164
1165        mutex_unlock(&bp->port.phy_mutex);
1166}
1167
1168/* calculates MF speed according to current linespeed and MF configuration */
1169u16 bnx2x_get_mf_speed(struct bnx2x *bp)
1170{
1171        u16 line_speed = bp->link_vars.line_speed;
1172        if (IS_MF(bp)) {
1173                u16 maxCfg = bnx2x_extract_max_cfg(bp,
1174                                                   bp->mf_config[BP_VN(bp)]);
1175
1176                /* Calculate the current MAX line speed limit for the MF
1177                 * devices
1178                 */
1179                if (IS_MF_PERCENT_BW(bp))
1180                        line_speed = (line_speed * maxCfg) / 100;
1181                else { /* SD mode */
1182                        u16 vn_max_rate = maxCfg * 100;
1183
1184                        if (vn_max_rate < line_speed)
1185                                line_speed = vn_max_rate;
1186                }
1187        }
1188
1189        return line_speed;
1190}
1191
1192/**
1193 * bnx2x_fill_report_data - fill link report data to report
1194 *
1195 * @bp:         driver handle
1196 * @data:       link state to update
1197 *
1198 * It uses a none-atomic bit operations because is called under the mutex.
1199 */
1200static void bnx2x_fill_report_data(struct bnx2x *bp,
1201                                   struct bnx2x_link_report_data *data)
1202{
1203        memset(data, 0, sizeof(*data));
1204
1205        if (IS_PF(bp)) {
1206                /* Fill the report data: effective line speed */
1207                data->line_speed = bnx2x_get_mf_speed(bp);
1208
1209                /* Link is down */
1210                if (!bp->link_vars.link_up || (bp->flags & MF_FUNC_DIS))
1211                        __set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1212                                  &data->link_report_flags);
1213
1214                if (!BNX2X_NUM_ETH_QUEUES(bp))
1215                        __set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1216                                  &data->link_report_flags);
1217
1218                /* Full DUPLEX */
1219                if (bp->link_vars.duplex == DUPLEX_FULL)
1220                        __set_bit(BNX2X_LINK_REPORT_FD,
1221                                  &data->link_report_flags);
1222
1223                /* Rx Flow Control is ON */
1224                if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_RX)
1225                        __set_bit(BNX2X_LINK_REPORT_RX_FC_ON,
1226                                  &data->link_report_flags);
1227
1228                /* Tx Flow Control is ON */
1229                if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_TX)
1230                        __set_bit(BNX2X_LINK_REPORT_TX_FC_ON,
1231                                  &data->link_report_flags);
1232        } else { /* VF */
1233                *data = bp->vf_link_vars;
1234        }
1235}
1236
1237/**
1238 * bnx2x_link_report - report link status to OS.
1239 *
1240 * @bp:         driver handle
1241 *
1242 * Calls the __bnx2x_link_report() under the same locking scheme
1243 * as a link/PHY state managing code to ensure a consistent link
1244 * reporting.
1245 */
1246
1247void bnx2x_link_report(struct bnx2x *bp)
1248{
1249        bnx2x_acquire_phy_lock(bp);
1250        __bnx2x_link_report(bp);
1251        bnx2x_release_phy_lock(bp);
1252}
1253
1254/**
1255 * __bnx2x_link_report - report link status to OS.
1256 *
1257 * @bp:         driver handle
1258 *
1259 * None atomic implementation.
1260 * Should be called under the phy_lock.
1261 */
1262void __bnx2x_link_report(struct bnx2x *bp)
1263{
1264        struct bnx2x_link_report_data cur_data;
1265
1266        if (bp->force_link_down) {
1267                bp->link_vars.link_up = 0;
1268                return;
1269        }
1270
1271        /* reread mf_cfg */
1272        if (IS_PF(bp) && !CHIP_IS_E1(bp))
1273                bnx2x_read_mf_cfg(bp);
1274
1275        /* Read the current link report info */
1276        bnx2x_fill_report_data(bp, &cur_data);
1277
1278        /* Don't report link down or exactly the same link status twice */
1279        if (!memcmp(&cur_data, &bp->last_reported_link, sizeof(cur_data)) ||
1280            (test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1281                      &bp->last_reported_link.link_report_flags) &&
1282             test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1283                      &cur_data.link_report_flags)))
1284                return;
1285
1286        bp->link_cnt++;
1287
1288        /* We are going to report a new link parameters now -
1289         * remember the current data for the next time.
1290         */
1291        memcpy(&bp->last_reported_link, &cur_data, sizeof(cur_data));
1292
1293        /* propagate status to VFs */
1294        if (IS_PF(bp))
1295                bnx2x_iov_link_update(bp);
1296
1297        if (test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1298                     &cur_data.link_report_flags)) {
1299                netif_carrier_off(bp->dev);
1300                netdev_err(bp->dev, "NIC Link is Down\n");
1301                return;
1302        } else {
1303                const char *duplex;
1304                const char *flow;
1305
1306                netif_carrier_on(bp->dev);
1307
1308                if (test_and_clear_bit(BNX2X_LINK_REPORT_FD,
1309                                       &cur_data.link_report_flags))
1310                        duplex = "full";
1311                else
1312                        duplex = "half";
1313
1314                /* Handle the FC at the end so that only these flags would be
1315                 * possibly set. This way we may easily check if there is no FC
1316                 * enabled.
1317                 */
1318                if (cur_data.link_report_flags) {
1319                        if (test_bit(BNX2X_LINK_REPORT_RX_FC_ON,
1320                                     &cur_data.link_report_flags)) {
1321                                if (test_bit(BNX2X_LINK_REPORT_TX_FC_ON,
1322                                     &cur_data.link_report_flags))
1323                                        flow = "ON - receive & transmit";
1324                                else
1325                                        flow = "ON - receive";
1326                        } else {
1327                                flow = "ON - transmit";
1328                        }
1329                } else {
1330                        flow = "none";
1331                }
1332                netdev_info(bp->dev, "NIC Link is Up, %d Mbps %s duplex, Flow control: %s\n",
1333                            cur_data.line_speed, duplex, flow);
1334        }
1335}
1336
1337static void bnx2x_set_next_page_sgl(struct bnx2x_fastpath *fp)
1338{
1339        int i;
1340
1341        for (i = 1; i <= NUM_RX_SGE_PAGES; i++) {
1342                struct eth_rx_sge *sge;
1343
1344                sge = &fp->rx_sge_ring[RX_SGE_CNT * i - 2];
1345                sge->addr_hi =
1346                        cpu_to_le32(U64_HI(fp->rx_sge_mapping +
1347                        BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
1348
1349                sge->addr_lo =
1350                        cpu_to_le32(U64_LO(fp->rx_sge_mapping +
1351                        BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
1352        }
1353}
1354
1355static void bnx2x_free_tpa_pool(struct bnx2x *bp,
1356                                struct bnx2x_fastpath *fp, int last)
1357{
1358        int i;
1359
1360        for (i = 0; i < last; i++) {
1361                struct bnx2x_agg_info *tpa_info = &fp->tpa_info[i];
1362                struct sw_rx_bd *first_buf = &tpa_info->first_buf;
1363                u8 *data = first_buf->data;
1364
1365                if (data == NULL) {
1366                        DP(NETIF_MSG_IFDOWN, "tpa bin %d empty on free\n", i);
1367                        continue;
1368                }
1369                if (tpa_info->tpa_state == BNX2X_TPA_START)
1370                        dma_unmap_single(&bp->pdev->dev,
1371                                         dma_unmap_addr(first_buf, mapping),
1372                                         fp->rx_buf_size, DMA_FROM_DEVICE);
1373                bnx2x_frag_free(fp, data);
1374                first_buf->data = NULL;
1375        }
1376}
1377
1378void bnx2x_init_rx_rings_cnic(struct bnx2x *bp)
1379{
1380        int j;
1381
1382        for_each_rx_queue_cnic(bp, j) {
1383                struct bnx2x_fastpath *fp = &bp->fp[j];
1384
1385                fp->rx_bd_cons = 0;
1386
1387                /* Activate BD ring */
1388                /* Warning!
1389                 * this will generate an interrupt (to the TSTORM)
1390                 * must only be done after chip is initialized
1391                 */
1392                bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod,
1393                                     fp->rx_sge_prod);
1394        }
1395}
1396
1397void bnx2x_init_rx_rings(struct bnx2x *bp)
1398{
1399        int func = BP_FUNC(bp);
1400        u16 ring_prod;
1401        int i, j;
1402
1403        /* Allocate TPA resources */
1404        for_each_eth_queue(bp, j) {
1405                struct bnx2x_fastpath *fp = &bp->fp[j];
1406
1407                DP(NETIF_MSG_IFUP,
1408                   "mtu %d  rx_buf_size %d\n", bp->dev->mtu, fp->rx_buf_size);
1409
1410                if (fp->mode != TPA_MODE_DISABLED) {
1411                        /* Fill the per-aggregation pool */
1412                        for (i = 0; i < MAX_AGG_QS(bp); i++) {
1413                                struct bnx2x_agg_info *tpa_info =
1414                                        &fp->tpa_info[i];
1415                                struct sw_rx_bd *first_buf =
1416                                        &tpa_info->first_buf;
1417
1418                                first_buf->data =
1419                                        bnx2x_frag_alloc(fp, GFP_KERNEL);
1420                                if (!first_buf->data) {
1421                                        BNX2X_ERR("Failed to allocate TPA skb pool for queue[%d] - disabling TPA on this queue!\n",
1422                                                  j);
1423                                        bnx2x_free_tpa_pool(bp, fp, i);
1424                                        fp->mode = TPA_MODE_DISABLED;
1425                                        break;
1426                                }
1427                                dma_unmap_addr_set(first_buf, mapping, 0);
1428                                tpa_info->tpa_state = BNX2X_TPA_STOP;
1429                        }
1430
1431                        /* "next page" elements initialization */
1432                        bnx2x_set_next_page_sgl(fp);
1433
1434                        /* set SGEs bit mask */
1435                        bnx2x_init_sge_ring_bit_mask(fp);
1436
1437                        /* Allocate SGEs and initialize the ring elements */
1438                        for (i = 0, ring_prod = 0;
1439                             i < MAX_RX_SGE_CNT*NUM_RX_SGE_PAGES; i++) {
1440
1441                                if (bnx2x_alloc_rx_sge(bp, fp, ring_prod,
1442                                                       GFP_KERNEL) < 0) {
1443                                        BNX2X_ERR("was only able to allocate %d rx sges\n",
1444                                                  i);
1445                                        BNX2X_ERR("disabling TPA for queue[%d]\n",
1446                                                  j);
1447                                        /* Cleanup already allocated elements */
1448                                        bnx2x_free_rx_sge_range(bp, fp,
1449                                                                ring_prod);
1450                                        bnx2x_free_tpa_pool(bp, fp,
1451                                                            MAX_AGG_QS(bp));
1452                                        fp->mode = TPA_MODE_DISABLED;
1453                                        ring_prod = 0;
1454                                        break;
1455                                }
1456                                ring_prod = NEXT_SGE_IDX(ring_prod);
1457                        }
1458
1459                        fp->rx_sge_prod = ring_prod;
1460                }
1461        }
1462
1463        for_each_eth_queue(bp, j) {
1464                struct bnx2x_fastpath *fp = &bp->fp[j];
1465
1466                fp->rx_bd_cons = 0;
1467
1468                /* Activate BD ring */
1469                /* Warning!
1470                 * this will generate an interrupt (to the TSTORM)
1471                 * must only be done after chip is initialized
1472                 */
1473                bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod,
1474                                     fp->rx_sge_prod);
1475
1476                if (j != 0)
1477                        continue;
1478
1479                if (CHIP_IS_E1(bp)) {
1480                        REG_WR(bp, BAR_USTRORM_INTMEM +
1481                               USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func),
1482                               U64_LO(fp->rx_comp_mapping));
1483                        REG_WR(bp, BAR_USTRORM_INTMEM +
1484                               USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4,
1485                               U64_HI(fp->rx_comp_mapping));
1486                }
1487        }
1488}
1489
1490static void bnx2x_free_tx_skbs_queue(struct bnx2x_fastpath *fp)
1491{
1492        u8 cos;
1493        struct bnx2x *bp = fp->bp;
1494
1495        for_each_cos_in_tx_queue(fp, cos) {
1496                struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
1497                unsigned pkts_compl = 0, bytes_compl = 0;
1498
1499                u16 sw_prod = txdata->tx_pkt_prod;
1500                u16 sw_cons = txdata->tx_pkt_cons;
1501
1502                while (sw_cons != sw_prod) {
1503                        bnx2x_free_tx_pkt(bp, txdata, TX_BD(sw_cons),
1504                                          &pkts_compl, &bytes_compl);
1505                        sw_cons++;
1506                }
1507
1508                netdev_tx_reset_queue(
1509                        netdev_get_tx_queue(bp->dev,
1510                                            txdata->txq_index));
1511        }
1512}
1513
1514static void bnx2x_free_tx_skbs_cnic(struct bnx2x *bp)
1515{
1516        int i;
1517
1518        for_each_tx_queue_cnic(bp, i) {
1519                bnx2x_free_tx_skbs_queue(&bp->fp[i]);
1520        }
1521}
1522
1523static void bnx2x_free_tx_skbs(struct bnx2x *bp)
1524{
1525        int i;
1526
1527        for_each_eth_queue(bp, i) {
1528                bnx2x_free_tx_skbs_queue(&bp->fp[i]);
1529        }
1530}
1531
1532static void bnx2x_free_rx_bds(struct bnx2x_fastpath *fp)
1533{
1534        struct bnx2x *bp = fp->bp;
1535        int i;
1536
1537        /* ring wasn't allocated */
1538        if (fp->rx_buf_ring == NULL)
1539                return;
1540
1541        for (i = 0; i < NUM_RX_BD; i++) {
1542                struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i];
1543                u8 *data = rx_buf->data;
1544
1545                if (data == NULL)
1546                        continue;
1547                dma_unmap_single(&bp->pdev->dev,
1548                                 dma_unmap_addr(rx_buf, mapping),
1549                                 fp->rx_buf_size, DMA_FROM_DEVICE);
1550
1551                rx_buf->data = NULL;
1552                bnx2x_frag_free(fp, data);
1553        }
1554}
1555
1556static void bnx2x_free_rx_skbs_cnic(struct bnx2x *bp)
1557{
1558        int j;
1559
1560        for_each_rx_queue_cnic(bp, j) {
1561                bnx2x_free_rx_bds(&bp->fp[j]);
1562        }
1563}
1564
1565static void bnx2x_free_rx_skbs(struct bnx2x *bp)
1566{
1567        int j;
1568
1569        for_each_eth_queue(bp, j) {
1570                struct bnx2x_fastpath *fp = &bp->fp[j];
1571
1572                bnx2x_free_rx_bds(fp);
1573
1574                if (fp->mode != TPA_MODE_DISABLED)
1575                        bnx2x_free_tpa_pool(bp, fp, MAX_AGG_QS(bp));
1576        }
1577}
1578
1579static void bnx2x_free_skbs_cnic(struct bnx2x *bp)
1580{
1581        bnx2x_free_tx_skbs_cnic(bp);
1582        bnx2x_free_rx_skbs_cnic(bp);
1583}
1584
1585void bnx2x_free_skbs(struct bnx2x *bp)
1586{
1587        bnx2x_free_tx_skbs(bp);
1588        bnx2x_free_rx_skbs(bp);
1589}
1590
1591void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value)
1592{
1593        /* load old values */
1594        u32 mf_cfg = bp->mf_config[BP_VN(bp)];
1595
1596        if (value != bnx2x_extract_max_cfg(bp, mf_cfg)) {
1597                /* leave all but MAX value */
1598                mf_cfg &= ~FUNC_MF_CFG_MAX_BW_MASK;
1599
1600                /* set new MAX value */
1601                mf_cfg |= (value << FUNC_MF_CFG_MAX_BW_SHIFT)
1602                                & FUNC_MF_CFG_MAX_BW_MASK;
1603
1604                bnx2x_fw_command(bp, DRV_MSG_CODE_SET_MF_BW, mf_cfg);
1605        }
1606}
1607
1608/**
1609 * bnx2x_free_msix_irqs - free previously requested MSI-X IRQ vectors
1610 *
1611 * @bp:         driver handle
1612 * @nvecs:      number of vectors to be released
1613 */
1614static void bnx2x_free_msix_irqs(struct bnx2x *bp, int nvecs)
1615{
1616        int i, offset = 0;
1617
1618        if (nvecs == offset)
1619                return;
1620
1621        /* VFs don't have a default SB */
1622        if (IS_PF(bp)) {
1623                free_irq(bp->msix_table[offset].vector, bp->dev);
1624                DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n",
1625                   bp->msix_table[offset].vector);
1626                offset++;
1627        }
1628
1629        if (CNIC_SUPPORT(bp)) {
1630                if (nvecs == offset)
1631                        return;
1632                offset++;
1633        }
1634
1635        for_each_eth_queue(bp, i) {
1636                if (nvecs == offset)
1637                        return;
1638                DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq\n",
1639                   i, bp->msix_table[offset].vector);
1640
1641                free_irq(bp->msix_table[offset++].vector, &bp->fp[i]);
1642        }
1643}
1644
1645void bnx2x_free_irq(struct bnx2x *bp)
1646{
1647        if (bp->flags & USING_MSIX_FLAG &&
1648            !(bp->flags & USING_SINGLE_MSIX_FLAG)) {
1649                int nvecs = BNX2X_NUM_ETH_QUEUES(bp) + CNIC_SUPPORT(bp);
1650
1651                /* vfs don't have a default status block */
1652                if (IS_PF(bp))
1653                        nvecs++;
1654
1655                bnx2x_free_msix_irqs(bp, nvecs);
1656        } else {
1657                free_irq(bp->dev->irq, bp->dev);
1658        }
1659}
1660
1661int bnx2x_enable_msix(struct bnx2x *bp)
1662{
1663        int msix_vec = 0, i, rc;
1664
1665        /* VFs don't have a default status block */
1666        if (IS_PF(bp)) {
1667                bp->msix_table[msix_vec].entry = msix_vec;
1668                BNX2X_DEV_INFO("msix_table[0].entry = %d (slowpath)\n",
1669                               bp->msix_table[0].entry);
1670                msix_vec++;
1671        }
1672
1673        /* Cnic requires an msix vector for itself */
1674        if (CNIC_SUPPORT(bp)) {
1675                bp->msix_table[msix_vec].entry = msix_vec;
1676                BNX2X_DEV_INFO("msix_table[%d].entry = %d (CNIC)\n",
1677                               msix_vec, bp->msix_table[msix_vec].entry);
1678                msix_vec++;
1679        }
1680
1681        /* We need separate vectors for ETH queues only (not FCoE) */
1682        for_each_eth_queue(bp, i) {
1683                bp->msix_table[msix_vec].entry = msix_vec;
1684                BNX2X_DEV_INFO("msix_table[%d].entry = %d (fastpath #%u)\n",
1685                               msix_vec, msix_vec, i);
1686                msix_vec++;
1687        }
1688
1689        DP(BNX2X_MSG_SP, "about to request enable msix with %d vectors\n",
1690           msix_vec);
1691
1692        rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0],
1693                                   BNX2X_MIN_MSIX_VEC_CNT(bp), msix_vec);
1694        /*
1695         * reconfigure number of tx/rx queues according to available
1696         * MSI-X vectors
1697         */
1698        if (rc == -ENOSPC) {
1699                /* Get by with single vector */
1700                rc = pci_enable_msix_range(bp->pdev, &bp->msix_table[0], 1, 1);
1701                if (rc < 0) {
1702                        BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n",
1703                                       rc);
1704                        goto no_msix;
1705                }
1706
1707                BNX2X_DEV_INFO("Using single MSI-X vector\n");
1708                bp->flags |= USING_SINGLE_MSIX_FLAG;
1709
1710                BNX2X_DEV_INFO("set number of queues to 1\n");
1711                bp->num_ethernet_queues = 1;
1712                bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1713        } else if (rc < 0) {
1714                BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
1715                goto no_msix;
1716        } else if (rc < msix_vec) {
1717                /* how less vectors we will have? */
1718                int diff = msix_vec - rc;
1719
1720                BNX2X_DEV_INFO("Trying to use less MSI-X vectors: %d\n", rc);
1721
1722                /*
1723                 * decrease number of queues by number of unallocated entries
1724                 */
1725                bp->num_ethernet_queues -= diff;
1726                bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1727
1728                BNX2X_DEV_INFO("New queue configuration set: %d\n",
1729                               bp->num_queues);
1730        }
1731
1732        bp->flags |= USING_MSIX_FLAG;
1733
1734        return 0;
1735
1736no_msix:
1737        /* fall to INTx if not enough memory */
1738        if (rc == -ENOMEM)
1739                bp->flags |= DISABLE_MSI_FLAG;
1740
1741        return rc;
1742}
1743
1744static int bnx2x_req_msix_irqs(struct bnx2x *bp)
1745{
1746        int i, rc, offset = 0;
1747
1748        /* no default status block for vf */
1749        if (IS_PF(bp)) {
1750                rc = request_irq(bp->msix_table[offset++].vector,
1751                                 bnx2x_msix_sp_int, 0,
1752                                 bp->dev->name, bp->dev);
1753                if (rc) {
1754                        BNX2X_ERR("request sp irq failed\n");
1755                        return -EBUSY;
1756                }
1757        }
1758
1759        if (CNIC_SUPPORT(bp))
1760                offset++;
1761
1762        for_each_eth_queue(bp, i) {
1763                struct bnx2x_fastpath *fp = &bp->fp[i];
1764                snprintf(fp->name, sizeof(fp->name), "%s-fp-%d",
1765                         bp->dev->name, i);
1766
1767                rc = request_irq(bp->msix_table[offset].vector,
1768                                 bnx2x_msix_fp_int, 0, fp->name, fp);
1769                if (rc) {
1770                        BNX2X_ERR("request fp #%d irq (%d) failed  rc %d\n", i,
1771                              bp->msix_table[offset].vector, rc);
1772                        bnx2x_free_msix_irqs(bp, offset);
1773                        return -EBUSY;
1774                }
1775
1776                offset++;
1777        }
1778
1779        i = BNX2X_NUM_ETH_QUEUES(bp);
1780        if (IS_PF(bp)) {
1781                offset = 1 + CNIC_SUPPORT(bp);
1782                netdev_info(bp->dev,
1783                            "using MSI-X  IRQs: sp %d  fp[%d] %d ... fp[%d] %d\n",
1784                            bp->msix_table[0].vector,
1785                            0, bp->msix_table[offset].vector,
1786                            i - 1, bp->msix_table[offset + i - 1].vector);
1787        } else {
1788                offset = CNIC_SUPPORT(bp);
1789                netdev_info(bp->dev,
1790                            "using MSI-X  IRQs: fp[%d] %d ... fp[%d] %d\n",
1791                            0, bp->msix_table[offset].vector,
1792                            i - 1, bp->msix_table[offset + i - 1].vector);
1793        }
1794        return 0;
1795}
1796
1797int bnx2x_enable_msi(struct bnx2x *bp)
1798{
1799        int rc;
1800
1801        rc = pci_enable_msi(bp->pdev);
1802        if (rc) {
1803                BNX2X_DEV_INFO("MSI is not attainable\n");
1804                return -1;
1805        }
1806        bp->flags |= USING_MSI_FLAG;
1807
1808        return 0;
1809}
1810
1811static int bnx2x_req_irq(struct bnx2x *bp)
1812{
1813        unsigned long flags;
1814        unsigned int irq;
1815
1816        if (bp->flags & (USING_MSI_FLAG | USING_MSIX_FLAG))
1817                flags = 0;
1818        else
1819                flags = IRQF_SHARED;
1820
1821        if (bp->flags & USING_MSIX_FLAG)
1822                irq = bp->msix_table[0].vector;
1823        else
1824                irq = bp->pdev->irq;
1825
1826        return request_irq(irq, bnx2x_interrupt, flags, bp->dev->name, bp->dev);
1827}
1828
1829static int bnx2x_setup_irqs(struct bnx2x *bp)
1830{
1831        int rc = 0;
1832        if (bp->flags & USING_MSIX_FLAG &&
1833            !(bp->flags & USING_SINGLE_MSIX_FLAG)) {
1834                rc = bnx2x_req_msix_irqs(bp);
1835                if (rc)
1836                        return rc;
1837        } else {
1838                rc = bnx2x_req_irq(bp);
1839                if (rc) {
1840                        BNX2X_ERR("IRQ request failed  rc %d, aborting\n", rc);
1841                        return rc;
1842                }
1843                if (bp->flags & USING_MSI_FLAG) {
1844                        bp->dev->irq = bp->pdev->irq;
1845                        netdev_info(bp->dev, "using MSI IRQ %d\n",
1846                                    bp->dev->irq);
1847                }
1848                if (bp->flags & USING_MSIX_FLAG) {
1849                        bp->dev->irq = bp->msix_table[0].vector;
1850                        netdev_info(bp->dev, "using MSIX IRQ %d\n",
1851                                    bp->dev->irq);
1852                }
1853        }
1854
1855        return 0;
1856}
1857
1858static void bnx2x_napi_enable_cnic(struct bnx2x *bp)
1859{
1860        int i;
1861
1862        for_each_rx_queue_cnic(bp, i) {
1863                napi_enable(&bnx2x_fp(bp, i, napi));
1864        }
1865}
1866
1867static void bnx2x_napi_enable(struct bnx2x *bp)
1868{
1869        int i;
1870
1871        for_each_eth_queue(bp, i) {
1872                napi_enable(&bnx2x_fp(bp, i, napi));
1873        }
1874}
1875
1876static void bnx2x_napi_disable_cnic(struct bnx2x *bp)
1877{
1878        int i;
1879
1880        for_each_rx_queue_cnic(bp, i) {
1881                napi_disable(&bnx2x_fp(bp, i, napi));
1882        }
1883}
1884
1885static void bnx2x_napi_disable(struct bnx2x *bp)
1886{
1887        int i;
1888
1889        for_each_eth_queue(bp, i) {
1890                napi_disable(&bnx2x_fp(bp, i, napi));
1891        }
1892}
1893
1894void bnx2x_netif_start(struct bnx2x *bp)
1895{
1896        if (netif_running(bp->dev)) {
1897                bnx2x_napi_enable(bp);
1898                if (CNIC_LOADED(bp))
1899                        bnx2x_napi_enable_cnic(bp);
1900                bnx2x_int_enable(bp);
1901                if (bp->state == BNX2X_STATE_OPEN)
1902                        netif_tx_wake_all_queues(bp->dev);
1903        }
1904}
1905
1906void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
1907{
1908        bnx2x_int_disable_sync(bp, disable_hw);
1909        bnx2x_napi_disable(bp);
1910        if (CNIC_LOADED(bp))
1911                bnx2x_napi_disable_cnic(bp);
1912}
1913
1914u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb,
1915                       struct net_device *sb_dev)
1916{
1917        struct bnx2x *bp = netdev_priv(dev);
1918
1919        if (CNIC_LOADED(bp) && !NO_FCOE(bp)) {
1920                struct ethhdr *hdr = (struct ethhdr *)skb->data;
1921                u16 ether_type = ntohs(hdr->h_proto);
1922
1923                /* Skip VLAN tag if present */
1924                if (ether_type == ETH_P_8021Q) {
1925                        struct vlan_ethhdr *vhdr =
1926                                (struct vlan_ethhdr *)skb->data;
1927
1928                        ether_type = ntohs(vhdr->h_vlan_encapsulated_proto);
1929                }
1930
1931                /* If ethertype is FCoE or FIP - use FCoE ring */
1932                if ((ether_type == ETH_P_FCOE) || (ether_type == ETH_P_FIP))
1933                        return bnx2x_fcoe_tx(bp, txq_index);
1934        }
1935
1936        /* select a non-FCoE queue */
1937        return netdev_pick_tx(dev, skb, NULL) % (BNX2X_NUM_ETH_QUEUES(bp));
1938}
1939
1940void bnx2x_set_num_queues(struct bnx2x *bp)
1941{
1942        /* RSS queues */
1943        bp->num_ethernet_queues = bnx2x_calc_num_queues(bp);
1944
1945        /* override in STORAGE SD modes */
1946        if (IS_MF_STORAGE_ONLY(bp))
1947                bp->num_ethernet_queues = 1;
1948
1949        /* Add special queues */
1950        bp->num_cnic_queues = CNIC_SUPPORT(bp); /* For FCOE */
1951        bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1952
1953        BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues);
1954}
1955
1956/**
1957 * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues
1958 *
1959 * @bp:         Driver handle
1960 *
1961 * We currently support for at most 16 Tx queues for each CoS thus we will
1962 * allocate a multiple of 16 for ETH L2 rings according to the value of the
1963 * bp->max_cos.
1964 *
1965 * If there is an FCoE L2 queue the appropriate Tx queue will have the next
1966 * index after all ETH L2 indices.
1967 *
1968 * If the actual number of Tx queues (for each CoS) is less than 16 then there
1969 * will be the holes at the end of each group of 16 ETh L2 indices (0..15,
1970 * 16..31,...) with indices that are not coupled with any real Tx queue.
1971 *
1972 * The proper configuration of skb->queue_mapping is handled by
1973 * bnx2x_select_queue() and __skb_tx_hash().
1974 *
1975 * bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash()
1976 * will return a proper Tx index if TC is enabled (netdev->num_tc > 0).
1977 */
1978static int bnx2x_set_real_num_queues(struct bnx2x *bp, int include_cnic)
1979{
1980        int rc, tx, rx;
1981
1982        tx = BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos;
1983        rx = BNX2X_NUM_ETH_QUEUES(bp);
1984
1985/* account for fcoe queue */
1986        if (include_cnic && !NO_FCOE(bp)) {
1987                rx++;
1988                tx++;
1989        }
1990
1991        rc = netif_set_real_num_tx_queues(bp->dev, tx);
1992        if (rc) {
1993                BNX2X_ERR("Failed to set real number of Tx queues: %d\n", rc);
1994                return rc;
1995        }
1996        rc = netif_set_real_num_rx_queues(bp->dev, rx);
1997        if (rc) {
1998                BNX2X_ERR("Failed to set real number of Rx queues: %d\n", rc);
1999                return rc;
2000        }
2001
2002        DP(NETIF_MSG_IFUP, "Setting real num queues to (tx, rx) (%d, %d)\n",
2003                          tx, rx);
2004
2005        return rc;
2006}
2007
2008static void bnx2x_set_rx_buf_size(struct bnx2x *bp)
2009{
2010        int i;
2011
2012        for_each_queue(bp, i) {
2013                struct bnx2x_fastpath *fp = &bp->fp[i];
2014                u32 mtu;
2015
2016                /* Always use a mini-jumbo MTU for the FCoE L2 ring */
2017                if (IS_FCOE_IDX(i))
2018                        /*
2019                         * Although there are no IP frames expected to arrive to
2020                         * this ring we still want to add an
2021                         * IP_HEADER_ALIGNMENT_PADDING to prevent a buffer
2022                         * overrun attack.
2023                         */
2024                        mtu = BNX2X_FCOE_MINI_JUMBO_MTU;
2025                else
2026                        mtu = bp->dev->mtu;
2027                fp->rx_buf_size = BNX2X_FW_RX_ALIGN_START +
2028                                  IP_HEADER_ALIGNMENT_PADDING +
2029                                  ETH_OVERHEAD +
2030                                  mtu +
2031                                  BNX2X_FW_RX_ALIGN_END;
2032                fp->rx_buf_size = SKB_DATA_ALIGN(fp->rx_buf_size);
2033                /* Note : rx_buf_size doesn't take into account NET_SKB_PAD */
2034                if (fp->rx_buf_size + NET_SKB_PAD <= PAGE_SIZE)
2035                        fp->rx_frag_size = fp->rx_buf_size + NET_SKB_PAD;
2036                else
2037                        fp->rx_frag_size = 0;
2038        }
2039}
2040
2041static int bnx2x_init_rss(struct bnx2x *bp)
2042{
2043        int i;
2044        u8 num_eth_queues = BNX2X_NUM_ETH_QUEUES(bp);
2045
2046        /* Prepare the initial contents for the indirection table if RSS is
2047         * enabled
2048         */
2049        for (i = 0; i < sizeof(bp->rss_conf_obj.ind_table); i++)
2050                bp->rss_conf_obj.ind_table[i] =
2051                        bp->fp->cl_id +
2052                        ethtool_rxfh_indir_default(i, num_eth_queues);
2053
2054        /*
2055         * For 57710 and 57711 SEARCHER configuration (rss_keys) is
2056         * per-port, so if explicit configuration is needed , do it only
2057         * for a PMF.
2058         *
2059         * For 57712 and newer on the other hand it's a per-function
2060         * configuration.
2061         */
2062        return bnx2x_config_rss_eth(bp, bp->port.pmf || !CHIP_IS_E1x(bp));
2063}
2064
2065int bnx2x_rss(struct bnx2x *bp, struct bnx2x_rss_config_obj *rss_obj,
2066              bool config_hash, bool enable)
2067{
2068        struct bnx2x_config_rss_params params = {NULL};
2069
2070        /* Although RSS is meaningless when there is a single HW queue we
2071         * still need it enabled in order to have HW Rx hash generated.
2072         *
2073         * if (!is_eth_multi(bp))
2074         *      bp->multi_mode = ETH_RSS_MODE_DISABLED;
2075         */
2076
2077        params.rss_obj = rss_obj;
2078
2079        __set_bit(RAMROD_COMP_WAIT, &params.ramrod_flags);
2080
2081        if (enable) {
2082                __set_bit(BNX2X_RSS_MODE_REGULAR, &params.rss_flags);
2083
2084                /* RSS configuration */
2085                __set_bit(BNX2X_RSS_IPV4, &params.rss_flags);
2086                __set_bit(BNX2X_RSS_IPV4_TCP, &params.rss_flags);
2087                __set_bit(BNX2X_RSS_IPV6, &params.rss_flags);
2088                __set_bit(BNX2X_RSS_IPV6_TCP, &params.rss_flags);
2089                if (rss_obj->udp_rss_v4)
2090                        __set_bit(BNX2X_RSS_IPV4_UDP, &params.rss_flags);
2091                if (rss_obj->udp_rss_v6)
2092                        __set_bit(BNX2X_RSS_IPV6_UDP, &params.rss_flags);
2093
2094                if (!CHIP_IS_E1x(bp)) {
2095                        /* valid only for TUNN_MODE_VXLAN tunnel mode */
2096                        __set_bit(BNX2X_RSS_IPV4_VXLAN, &params.rss_flags);
2097                        __set_bit(BNX2X_RSS_IPV6_VXLAN, &params.rss_flags);
2098
2099                        /* valid only for TUNN_MODE_GRE tunnel mode */
2100                        __set_bit(BNX2X_RSS_TUNN_INNER_HDRS, &params.rss_flags);
2101                }
2102        } else {
2103                __set_bit(BNX2X_RSS_MODE_DISABLED, &params.rss_flags);
2104        }
2105
2106        /* Hash bits */
2107        params.rss_result_mask = MULTI_MASK;
2108
2109        memcpy(params.ind_table, rss_obj->ind_table, sizeof(params.ind_table));
2110
2111        if (config_hash) {
2112                /* RSS keys */
2113                netdev_rss_key_fill(params.rss_key, T_ETH_RSS_KEY * 4);
2114                __set_bit(BNX2X_RSS_SET_SRCH, &params.rss_flags);
2115        }
2116
2117        if (IS_PF(bp))
2118                return bnx2x_config_rss(bp, &params);
2119        else
2120                return bnx2x_vfpf_config_rss(bp, &params);
2121}
2122
2123static int bnx2x_init_hw(struct bnx2x *bp, u32 load_code)
2124{
2125        struct bnx2x_func_state_params func_params = {NULL};
2126
2127        /* Prepare parameters for function state transitions */
2128        __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
2129
2130        func_params.f_obj = &bp->func_obj;
2131        func_params.cmd = BNX2X_F_CMD_HW_INIT;
2132
2133        func_params.params.hw_init.load_phase = load_code;
2134
2135        return bnx2x_func_state_change(bp, &func_params);
2136}
2137
2138/*
2139 * Cleans the object that have internal lists without sending
2140 * ramrods. Should be run when interrupts are disabled.
2141 */
2142void bnx2x_squeeze_objects(struct bnx2x *bp)
2143{
2144        int rc;
2145        unsigned long ramrod_flags = 0, vlan_mac_flags = 0;
2146        struct bnx2x_mcast_ramrod_params rparam = {NULL};
2147        struct bnx2x_vlan_mac_obj *mac_obj = &bp->sp_objs->mac_obj;
2148
2149        /***************** Cleanup MACs' object first *************************/
2150
2151        /* Wait for completion of requested */
2152        __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
2153        /* Perform a dry cleanup */
2154        __set_bit(RAMROD_DRV_CLR_ONLY, &ramrod_flags);
2155
2156        /* Clean ETH primary MAC */
2157        __set_bit(BNX2X_ETH_MAC, &vlan_mac_flags);
2158        rc = mac_obj->delete_all(bp, &bp->sp_objs->mac_obj, &vlan_mac_flags,
2159                                 &ramrod_flags);
2160        if (rc != 0)
2161                BNX2X_ERR("Failed to clean ETH MACs: %d\n", rc);
2162
2163        /* Cleanup UC list */
2164        vlan_mac_flags = 0;
2165        __set_bit(BNX2X_UC_LIST_MAC, &vlan_mac_flags);
2166        rc = mac_obj->delete_all(bp, mac_obj, &vlan_mac_flags,
2167                                 &ramrod_flags);
2168        if (rc != 0)
2169                BNX2X_ERR("Failed to clean UC list MACs: %d\n", rc);
2170
2171        /***************** Now clean mcast object *****************************/
2172        rparam.mcast_obj = &bp->mcast_obj;
2173        __set_bit(RAMROD_DRV_CLR_ONLY, &rparam.ramrod_flags);
2174
2175        /* Add a DEL command... - Since we're doing a driver cleanup only,
2176         * we take a lock surrounding both the initial send and the CONTs,
2177         * as we don't want a true completion to disrupt us in the middle.
2178         */
2179        netif_addr_lock_bh(bp->dev);
2180        rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
2181        if (rc < 0)
2182                BNX2X_ERR("Failed to add a new DEL command to a multi-cast object: %d\n",
2183                          rc);
2184
2185        /* ...and wait until all pending commands are cleared */
2186        rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT);
2187        while (rc != 0) {
2188                if (rc < 0) {
2189                        BNX2X_ERR("Failed to clean multi-cast object: %d\n",
2190                                  rc);
2191                        netif_addr_unlock_bh(bp->dev);
2192                        return;
2193                }
2194
2195                rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT);
2196        }
2197        netif_addr_unlock_bh(bp->dev);
2198}
2199
2200#ifndef BNX2X_STOP_ON_ERROR
2201#define LOAD_ERROR_EXIT(bp, label) \
2202        do { \
2203                (bp)->state = BNX2X_STATE_ERROR; \
2204                goto label; \
2205        } while (0)
2206
2207#define LOAD_ERROR_EXIT_CNIC(bp, label) \
2208        do { \
2209                bp->cnic_loaded = false; \
2210                goto label; \
2211        } while (0)
2212#else /*BNX2X_STOP_ON_ERROR*/
2213#define LOAD_ERROR_EXIT(bp, label) \
2214        do { \
2215                (bp)->state = BNX2X_STATE_ERROR; \
2216                (bp)->panic = 1; \
2217                return -EBUSY; \
2218        } while (0)
2219#define LOAD_ERROR_EXIT_CNIC(bp, label) \
2220        do { \
2221                bp->cnic_loaded = false; \
2222                (bp)->panic = 1; \
2223                return -EBUSY; \
2224        } while (0)
2225#endif /*BNX2X_STOP_ON_ERROR*/
2226
2227static void bnx2x_free_fw_stats_mem(struct bnx2x *bp)
2228{
2229        BNX2X_PCI_FREE(bp->fw_stats, bp->fw_stats_mapping,
2230                       bp->fw_stats_data_sz + bp->fw_stats_req_sz);
2231        return;
2232}
2233
2234static int bnx2x_alloc_fw_stats_mem(struct bnx2x *bp)
2235{
2236        int num_groups, vf_headroom = 0;
2237        int is_fcoe_stats = NO_FCOE(bp) ? 0 : 1;
2238
2239        /* number of queues for statistics is number of eth queues + FCoE */
2240        u8 num_queue_stats = BNX2X_NUM_ETH_QUEUES(bp) + is_fcoe_stats;
2241
2242        /* Total number of FW statistics requests =
2243         * 1 for port stats + 1 for PF stats + potential 2 for FCoE (fcoe proper
2244         * and fcoe l2 queue) stats + num of queues (which includes another 1
2245         * for fcoe l2 queue if applicable)
2246         */
2247        bp->fw_stats_num = 2 + is_fcoe_stats + num_queue_stats;
2248
2249        /* vf stats appear in the request list, but their data is allocated by
2250         * the VFs themselves. We don't include them in the bp->fw_stats_num as
2251         * it is used to determine where to place the vf stats queries in the
2252         * request struct
2253         */
2254        if (IS_SRIOV(bp))
2255                vf_headroom = bnx2x_vf_headroom(bp);
2256
2257        /* Request is built from stats_query_header and an array of
2258         * stats_query_cmd_group each of which contains
2259         * STATS_QUERY_CMD_COUNT rules. The real number or requests is
2260         * configured in the stats_query_header.
2261         */
2262        num_groups =
2263                (((bp->fw_stats_num + vf_headroom) / STATS_QUERY_CMD_COUNT) +
2264                 (((bp->fw_stats_num + vf_headroom) % STATS_QUERY_CMD_COUNT) ?
2265                 1 : 0));
2266
2267        DP(BNX2X_MSG_SP, "stats fw_stats_num %d, vf headroom %d, num_groups %d\n",
2268           bp->fw_stats_num, vf_headroom, num_groups);
2269        bp->fw_stats_req_sz = sizeof(struct stats_query_header) +
2270                num_groups * sizeof(struct stats_query_cmd_group);
2271
2272        /* Data for statistics requests + stats_counter
2273         * stats_counter holds per-STORM counters that are incremented
2274         * when STORM has finished with the current request.
2275         * memory for FCoE offloaded statistics are counted anyway,
2276         * even if they will not be sent.
2277         * VF stats are not accounted for here as the data of VF stats is stored
2278         * in memory allocated by the VF, not here.
2279         */
2280        bp->fw_stats_data_sz = sizeof(struct per_port_stats) +
2281                sizeof(struct per_pf_stats) +
2282                sizeof(struct fcoe_statistics_params) +
2283                sizeof(struct per_queue_stats) * num_queue_stats +
2284                sizeof(struct stats_counter);
2285
2286        bp->fw_stats = BNX2X_PCI_ALLOC(&bp->fw_stats_mapping,
2287                                       bp->fw_stats_data_sz + bp->fw_stats_req_sz);
2288        if (!bp->fw_stats)
2289                goto alloc_mem_err;
2290
2291        /* Set shortcuts */
2292        bp->fw_stats_req = (struct bnx2x_fw_stats_req *)bp->fw_stats;
2293        bp->fw_stats_req_mapping = bp->fw_stats_mapping;
2294        bp->fw_stats_data = (struct bnx2x_fw_stats_data *)
2295                ((u8 *)bp->fw_stats + bp->fw_stats_req_sz);
2296        bp->fw_stats_data_mapping = bp->fw_stats_mapping +
2297                bp->fw_stats_req_sz;
2298
2299        DP(BNX2X_MSG_SP, "statistics request base address set to %x %x\n",
2300           U64_HI(bp->fw_stats_req_mapping),
2301           U64_LO(bp->fw_stats_req_mapping));
2302        DP(BNX2X_MSG_SP, "statistics data base address set to %x %x\n",
2303           U64_HI(bp->fw_stats_data_mapping),
2304           U64_LO(bp->fw_stats_data_mapping));
2305        return 0;
2306
2307alloc_mem_err:
2308        bnx2x_free_fw_stats_mem(bp);
2309        BNX2X_ERR("Can't allocate FW stats memory\n");
2310        return -ENOMEM;
2311}
2312
2313/* send load request to mcp and analyze response */
2314static int bnx2x_nic_load_request(struct bnx2x *bp, u32 *load_code)
2315{
2316        u32 param;
2317
2318        /* init fw_seq */
2319        bp->fw_seq =
2320                (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
2321                 DRV_MSG_SEQ_NUMBER_MASK);
2322        BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq);
2323
2324        /* Get current FW pulse sequence */
2325        bp->fw_drv_pulse_wr_seq =
2326                (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_pulse_mb) &
2327                 DRV_PULSE_SEQ_MASK);
2328        BNX2X_DEV_INFO("drv_pulse 0x%x\n", bp->fw_drv_pulse_wr_seq);
2329
2330        param = DRV_MSG_CODE_LOAD_REQ_WITH_LFA;
2331
2332        if (IS_MF_SD(bp) && bnx2x_port_after_undi(bp))
2333                param |= DRV_MSG_CODE_LOAD_REQ_FORCE_LFA;
2334
2335        /* load request */
2336        (*load_code) = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ, param);
2337
2338        /* if mcp fails to respond we must abort */
2339        if (!(*load_code)) {
2340                BNX2X_ERR("MCP response failure, aborting\n");
2341                return -EBUSY;
2342        }
2343
2344        /* If mcp refused (e.g. other port is in diagnostic mode) we
2345         * must abort
2346         */
2347        if ((*load_code) == FW_MSG_CODE_DRV_LOAD_REFUSED) {
2348                BNX2X_ERR("MCP refused load request, aborting\n");
2349                return -EBUSY;
2350        }
2351        return 0;
2352}
2353
2354/* check whether another PF has already loaded FW to chip. In
2355 * virtualized environments a pf from another VM may have already
2356 * initialized the device including loading FW
2357 */
2358int bnx2x_compare_fw_ver(struct bnx2x *bp, u32 load_code, bool print_err)
2359{
2360        /* is another pf loaded on this engine? */
2361        if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP &&
2362            load_code != FW_MSG_CODE_DRV_LOAD_COMMON) {
2363                /* build my FW version dword */
2364                u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) +
2365                        (BCM_5710_FW_MINOR_VERSION << 8) +
2366                        (BCM_5710_FW_REVISION_VERSION << 16) +
2367                        (BCM_5710_FW_ENGINEERING_VERSION << 24);
2368
2369                /* read loaded FW from chip */
2370                u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM);
2371
2372                DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x\n",
2373                   loaded_fw, my_fw);
2374
2375                /* abort nic load if version mismatch */
2376                if (my_fw != loaded_fw) {
2377                        if (print_err)
2378                                BNX2X_ERR("bnx2x with FW %x was already loaded which mismatches my %x FW. Aborting\n",
2379                                          loaded_fw, my_fw);
2380                        else
2381                                BNX2X_DEV_INFO("bnx2x with FW %x was already loaded which mismatches my %x FW, possibly due to MF UNDI\n",
2382                                               loaded_fw, my_fw);
2383                        return -EBUSY;
2384                }
2385        }
2386        return 0;
2387}
2388
2389/* returns the "mcp load_code" according to global load_count array */
2390static int bnx2x_nic_load_no_mcp(struct bnx2x *bp, int port)
2391{
2392        int path = BP_PATH(bp);
2393
2394        DP(NETIF_MSG_IFUP, "NO MCP - load counts[%d]      %d, %d, %d\n",
2395           path, bnx2x_load_count[path][0], bnx2x_load_count[path][1],
2396           bnx2x_load_count[path][2]);
2397        bnx2x_load_count[path][0]++;
2398        bnx2x_load_count[path][1 + port]++;
2399        DP(NETIF_MSG_IFUP, "NO MCP - new load counts[%d]  %d, %d, %d\n",
2400           path, bnx2x_load_count[path][0], bnx2x_load_count[path][1],
2401           bnx2x_load_count[path][2]);
2402        if (bnx2x_load_count[path][0] == 1)
2403                return FW_MSG_CODE_DRV_LOAD_COMMON;
2404        else if (bnx2x_load_count[path][1 + port] == 1)
2405                return FW_MSG_CODE_DRV_LOAD_PORT;
2406        else
2407                return FW_MSG_CODE_DRV_LOAD_FUNCTION;
2408}
2409
2410/* mark PMF if applicable */
2411static void bnx2x_nic_load_pmf(struct bnx2x *bp, u32 load_code)
2412{
2413        if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
2414            (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) ||
2415            (load_code == FW_MSG_CODE_DRV_LOAD_PORT)) {
2416                bp->port.pmf = 1;
2417                /* We need the barrier to ensure the ordering between the
2418                 * writing to bp->port.pmf here and reading it from the
2419                 * bnx2x_periodic_task().
2420                 */
2421                smp_mb();
2422        } else {
2423                bp->port.pmf = 0;
2424        }
2425
2426        DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf);
2427}
2428
2429static void bnx2x_nic_load_afex_dcc(struct bnx2x *bp, int load_code)
2430{
2431        if (((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
2432             (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP)) &&
2433            (bp->common.shmem2_base)) {
2434                if (SHMEM2_HAS(bp, dcc_support))
2435                        SHMEM2_WR(bp, dcc_support,
2436                                  (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV |
2437                                   SHMEM_DCC_SUPPORT_BANDWIDTH_ALLOCATION_TLV));
2438                if (SHMEM2_HAS(bp, afex_driver_support))
2439                        SHMEM2_WR(bp, afex_driver_support,
2440                                  SHMEM_AFEX_SUPPORTED_VERSION_ONE);
2441        }
2442
2443        /* Set AFEX default VLAN tag to an invalid value */
2444        bp->afex_def_vlan_tag = -1;
2445}
2446
2447/**
2448 * bnx2x_bz_fp - zero content of the fastpath structure.
2449 *
2450 * @bp:         driver handle
2451 * @index:      fastpath index to be zeroed
2452 *
2453 * Makes sure the contents of the bp->fp[index].napi is kept
2454 * intact.
2455 */
2456static void bnx2x_bz_fp(struct bnx2x *bp, int index)
2457{
2458        struct bnx2x_fastpath *fp = &bp->fp[index];
2459        int cos;
2460        struct napi_struct orig_napi = fp->napi;
2461        struct bnx2x_agg_info *orig_tpa_info = fp->tpa_info;
2462
2463        /* bzero bnx2x_fastpath contents */
2464        if (fp->tpa_info)
2465                memset(fp->tpa_info, 0, ETH_MAX_AGGREGATION_QUEUES_E1H_E2 *
2466                       sizeof(struct bnx2x_agg_info));
2467        memset(fp, 0, sizeof(*fp));
2468
2469        /* Restore the NAPI object as it has been already initialized */
2470        fp->napi = orig_napi;
2471        fp->tpa_info = orig_tpa_info;
2472        fp->bp = bp;
2473        fp->index = index;
2474        if (IS_ETH_FP(fp))
2475                fp->max_cos = bp->max_cos;
2476        else
2477                /* Special queues support only one CoS */
2478                fp->max_cos = 1;
2479
2480        /* Init txdata pointers */
2481        if (IS_FCOE_FP(fp))
2482                fp->txdata_ptr[0] = &bp->bnx2x_txq[FCOE_TXQ_IDX(bp)];
2483        if (IS_ETH_FP(fp))
2484                for_each_cos_in_tx_queue(fp, cos)
2485                        fp->txdata_ptr[cos] = &bp->bnx2x_txq[cos *
2486                                BNX2X_NUM_ETH_QUEUES(bp) + index];
2487
2488        /* set the tpa flag for each queue. The tpa flag determines the queue
2489         * minimal size so it must be set prior to queue memory allocation
2490         */
2491        if (bp->dev->features & NETIF_F_LRO)
2492                fp->mode = TPA_MODE_LRO;
2493        else if (bp->dev->features & NETIF_F_GRO_HW)
2494                fp->mode = TPA_MODE_GRO;
2495        else
2496                fp->mode = TPA_MODE_DISABLED;
2497
2498        /* We don't want TPA if it's disabled in bp
2499         * or if this is an FCoE L2 ring.
2500         */
2501        if (bp->disable_tpa || IS_FCOE_FP(fp))
2502                fp->mode = TPA_MODE_DISABLED;
2503}
2504
2505void bnx2x_set_os_driver_state(struct bnx2x *bp, u32 state)
2506{
2507        u32 cur;
2508
2509        if (!IS_MF_BD(bp) || !SHMEM2_HAS(bp, os_driver_state) || IS_VF(bp))
2510                return;
2511
2512        cur = SHMEM2_RD(bp, os_driver_state[BP_FW_MB_IDX(bp)]);
2513        DP(NETIF_MSG_IFUP, "Driver state %08x-->%08x\n",
2514           cur, state);
2515
2516        SHMEM2_WR(bp, os_driver_state[BP_FW_MB_IDX(bp)], state);
2517}
2518
2519int bnx2x_load_cnic(struct bnx2x *bp)
2520{
2521        int i, rc, port = BP_PORT(bp);
2522
2523        DP(NETIF_MSG_IFUP, "Starting CNIC-related load\n");
2524
2525        mutex_init(&bp->cnic_mutex);
2526
2527        if (IS_PF(bp)) {
2528                rc = bnx2x_alloc_mem_cnic(bp);
2529                if (rc) {
2530                        BNX2X_ERR("Unable to allocate bp memory for cnic\n");
2531                        LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2532                }
2533        }
2534
2535        rc = bnx2x_alloc_fp_mem_cnic(bp);
2536        if (rc) {
2537                BNX2X_ERR("Unable to allocate memory for cnic fps\n");
2538                LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2539        }
2540
2541        /* Update the number of queues with the cnic queues */
2542        rc = bnx2x_set_real_num_queues(bp, 1);
2543        if (rc) {
2544                BNX2X_ERR("Unable to set real_num_queues including cnic\n");
2545                LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2546        }
2547
2548        /* Add all CNIC NAPI objects */
2549        bnx2x_add_all_napi_cnic(bp);
2550        DP(NETIF_MSG_IFUP, "cnic napi added\n");
2551        bnx2x_napi_enable_cnic(bp);
2552
2553        rc = bnx2x_init_hw_func_cnic(bp);
2554        if (rc)
2555                LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic1);
2556
2557        bnx2x_nic_init_cnic(bp);
2558
2559        if (IS_PF(bp)) {
2560                /* Enable Timer scan */
2561                REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 1);
2562
2563                /* setup cnic queues */
2564                for_each_cnic_queue(bp, i) {
2565                        rc = bnx2x_setup_queue(bp, &bp->fp[i], 0);
2566                        if (rc) {
2567                                BNX2X_ERR("Queue setup failed\n");
2568                                LOAD_ERROR_EXIT(bp, load_error_cnic2);
2569                        }
2570                }
2571        }
2572
2573        /* Initialize Rx filter. */
2574        bnx2x_set_rx_mode_inner(bp);
2575
2576        /* re-read iscsi info */
2577        bnx2x_get_iscsi_info(bp);
2578        bnx2x_setup_cnic_irq_info(bp);
2579        bnx2x_setup_cnic_info(bp);
2580        bp->cnic_loaded = true;
2581        if (bp->state == BNX2X_STATE_OPEN)
2582                bnx2x_cnic_notify(bp, CNIC_CTL_START_CMD);
2583
2584        DP(NETIF_MSG_IFUP, "Ending successfully CNIC-related load\n");
2585
2586        return 0;
2587
2588#ifndef BNX2X_STOP_ON_ERROR
2589load_error_cnic2:
2590        /* Disable Timer scan */
2591        REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 0);
2592
2593load_error_cnic1:
2594        bnx2x_napi_disable_cnic(bp);
2595        /* Update the number of queues without the cnic queues */
2596        if (bnx2x_set_real_num_queues(bp, 0))
2597                BNX2X_ERR("Unable to set real_num_queues not including cnic\n");
2598load_error_cnic0:
2599        BNX2X_ERR("CNIC-related load failed\n");
2600        bnx2x_free_fp_mem_cnic(bp);
2601        bnx2x_free_mem_cnic(bp);
2602        return rc;
2603#endif /* ! BNX2X_STOP_ON_ERROR */
2604}
2605
2606/* must be called with rtnl_lock */
2607int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
2608{
2609        int port = BP_PORT(bp);
2610        int i, rc = 0, load_code = 0;
2611
2612        DP(NETIF_MSG_IFUP, "Starting NIC load\n");
2613        DP(NETIF_MSG_IFUP,
2614           "CNIC is %s\n", CNIC_ENABLED(bp) ? "enabled" : "disabled");
2615
2616#ifdef BNX2X_STOP_ON_ERROR
2617        if (unlikely(bp->panic)) {
2618                BNX2X_ERR("Can't load NIC when there is panic\n");
2619                return -EPERM;
2620        }
2621#endif
2622
2623        bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD;
2624
2625        /* zero the structure w/o any lock, before SP handler is initialized */
2626        memset(&bp->last_reported_link, 0, sizeof(bp->last_reported_link));
2627        __set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
2628                &bp->last_reported_link.link_report_flags);
2629
2630        if (IS_PF(bp))
2631                /* must be called before memory allocation and HW init */
2632                bnx2x_ilt_set_info(bp);
2633
2634        /*
2635         * Zero fastpath structures preserving invariants like napi, which are
2636         * allocated only once, fp index, max_cos, bp pointer.
2637         * Also set fp->mode and txdata_ptr.
2638         */
2639        DP(NETIF_MSG_IFUP, "num queues: %d", bp->num_queues);
2640        for_each_queue(bp, i)
2641                bnx2x_bz_fp(bp, i);
2642        memset(bp->bnx2x_txq, 0, (BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS +
2643                                  bp->num_cnic_queues) *
2644                                  sizeof(struct bnx2x_fp_txdata));
2645
2646        bp->fcoe_init = false;
2647
2648        /* Set the receive queues buffer size */
2649        bnx2x_set_rx_buf_size(bp);
2650
2651        if (IS_PF(bp)) {
2652                rc = bnx2x_alloc_mem(bp);
2653                if (rc) {
2654                        BNX2X_ERR("Unable to allocate bp memory\n");
2655                        return rc;
2656                }
2657        }
2658
2659        /* need to be done after alloc mem, since it's self adjusting to amount
2660         * of memory available for RSS queues
2661         */
2662        rc = bnx2x_alloc_fp_mem(bp);
2663        if (rc) {
2664                BNX2X_ERR("Unable to allocate memory for fps\n");
2665                LOAD_ERROR_EXIT(bp, load_error0);
2666        }
2667
2668        /* Allocated memory for FW statistics  */
2669        if (bnx2x_alloc_fw_stats_mem(bp))
2670                LOAD_ERROR_EXIT(bp, load_error0);
2671
2672        /* request pf to initialize status blocks */
2673        if (IS_VF(bp)) {
2674                rc = bnx2x_vfpf_init(bp);
2675                if (rc)
2676                        LOAD_ERROR_EXIT(bp, load_error0);
2677        }
2678
2679        /* As long as bnx2x_alloc_mem() may possibly update
2680         * bp->num_queues, bnx2x_set_real_num_queues() should always
2681         * come after it. At this stage cnic queues are not counted.
2682         */
2683        rc = bnx2x_set_real_num_queues(bp, 0);
2684        if (rc) {
2685                BNX2X_ERR("Unable to set real_num_queues\n");
2686                LOAD_ERROR_EXIT(bp, load_error0);
2687        }
2688
2689        /* configure multi cos mappings in kernel.
2690         * this configuration may be overridden by a multi class queue
2691         * discipline or by a dcbx negotiation result.
2692         */
2693        bnx2x_setup_tc(bp->dev, bp->max_cos);
2694
2695        /* Add all NAPI objects */
2696        bnx2x_add_all_napi(bp);
2697        DP(NETIF_MSG_IFUP, "napi added\n");
2698        bnx2x_napi_enable(bp);
2699
2700        if (IS_PF(bp)) {
2701                /* set pf load just before approaching the MCP */
2702                bnx2x_set_pf_load(bp);
2703
2704                /* if mcp exists send load request and analyze response */
2705                if (!BP_NOMCP(bp)) {
2706                        /* attempt to load pf */
2707                        rc = bnx2x_nic_load_request(bp, &load_code);
2708                        if (rc)
2709                                LOAD_ERROR_EXIT(bp, load_error1);
2710
2711                        /* what did mcp say? */
2712                        rc = bnx2x_compare_fw_ver(bp, load_code, true);
2713                        if (rc) {
2714                                bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2715                                LOAD_ERROR_EXIT(bp, load_error2);
2716                        }
2717                } else {
2718                        load_code = bnx2x_nic_load_no_mcp(bp, port);
2719                }
2720
2721                /* mark pmf if applicable */
2722                bnx2x_nic_load_pmf(bp, load_code);
2723
2724                /* Init Function state controlling object */
2725                bnx2x__init_func_obj(bp);
2726
2727                /* Initialize HW */
2728                rc = bnx2x_init_hw(bp, load_code);
2729                if (rc) {
2730                        BNX2X_ERR("HW init failed, aborting\n");
2731                        bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2732                        LOAD_ERROR_EXIT(bp, load_error2);
2733                }
2734        }
2735
2736        bnx2x_pre_irq_nic_init(bp);
2737
2738        /* Connect to IRQs */
2739        rc = bnx2x_setup_irqs(bp);
2740        if (rc) {
2741                BNX2X_ERR("setup irqs failed\n");
2742                if (IS_PF(bp))
2743                        bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2744                LOAD_ERROR_EXIT(bp, load_error2);
2745        }
2746
2747        /* Init per-function objects */
2748        if (IS_PF(bp)) {
2749                /* Setup NIC internals and enable interrupts */
2750                bnx2x_post_irq_nic_init(bp, load_code);
2751
2752                bnx2x_init_bp_objs(bp);
2753                bnx2x_iov_nic_init(bp);
2754
2755                /* Set AFEX default VLAN tag to an invalid value */
2756                bp->afex_def_vlan_tag = -1;
2757                bnx2x_nic_load_afex_dcc(bp, load_code);
2758                bp->state = BNX2X_STATE_OPENING_WAIT4_PORT;
2759                rc = bnx2x_func_start(bp);
2760                if (rc) {
2761                        BNX2X_ERR("Function start failed!\n");
2762                        bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2763
2764                        LOAD_ERROR_EXIT(bp, load_error3);
2765                }
2766
2767                /* Send LOAD_DONE command to MCP */
2768                if (!BP_NOMCP(bp)) {
2769                        load_code = bnx2x_fw_command(bp,
2770                                                     DRV_MSG_CODE_LOAD_DONE, 0);
2771                        if (!load_code) {
2772                                BNX2X_ERR("MCP response failure, aborting\n");
2773                                rc = -EBUSY;
2774                                LOAD_ERROR_EXIT(bp, load_error3);
2775                        }
2776                }
2777
2778                /* initialize FW coalescing state machines in RAM */
2779                bnx2x_update_coalesce(bp);
2780        }
2781
2782        /* setup the leading queue */
2783        rc = bnx2x_setup_leading(bp);
2784        if (rc) {
2785                BNX2X_ERR("Setup leading failed!\n");
2786                LOAD_ERROR_EXIT(bp, load_error3);
2787        }
2788
2789        /* set up the rest of the queues */
2790        for_each_nondefault_eth_queue(bp, i) {
2791                if (IS_PF(bp))
2792                        rc = bnx2x_setup_queue(bp, &bp->fp[i], false);
2793                else /* VF */
2794                        rc = bnx2x_vfpf_setup_q(bp, &bp->fp[i], false);
2795                if (rc) {
2796                        BNX2X_ERR("Queue %d setup failed\n", i);
2797                        LOAD_ERROR_EXIT(bp, load_error3);
2798                }
2799        }
2800
2801        /* setup rss */
2802        rc = bnx2x_init_rss(bp);
2803        if (rc) {
2804                BNX2X_ERR("PF RSS init failed\n");
2805                LOAD_ERROR_EXIT(bp, load_error3);
2806        }
2807
2808        /* Now when Clients are configured we are ready to work */
2809        bp->state = BNX2X_STATE_OPEN;
2810
2811        /* Configure a ucast MAC */
2812        if (IS_PF(bp))
2813                rc = bnx2x_set_eth_mac(bp, true);
2814        else /* vf */
2815                rc = bnx2x_vfpf_config_mac(bp, bp->dev->dev_addr, bp->fp->index,
2816                                           true);
2817        if (rc) {
2818                BNX2X_ERR("Setting Ethernet MAC failed\n");
2819                LOAD_ERROR_EXIT(bp, load_error3);
2820        }
2821
2822        if (IS_PF(bp) && bp->pending_max) {
2823                bnx2x_update_max_mf_config(bp, bp->pending_max);
2824                bp->pending_max = 0;
2825        }
2826
2827        bp->force_link_down = false;
2828        if (bp->port.pmf) {
2829                rc = bnx2x_initial_phy_init(bp, load_mode);
2830                if (rc)
2831                        LOAD_ERROR_EXIT(bp, load_error3);
2832        }
2833        bp->link_params.feature_config_flags &= ~FEATURE_CONFIG_BOOT_FROM_SAN;
2834
2835        /* Start fast path */
2836
2837        /* Re-configure vlan filters */
2838        rc = bnx2x_vlan_reconfigure_vid(bp);
2839        if (rc)
2840                LOAD_ERROR_EXIT(bp, load_error3);
2841
2842        /* Initialize Rx filter. */
2843        bnx2x_set_rx_mode_inner(bp);
2844
2845        if (bp->flags & PTP_SUPPORTED) {
2846                bnx2x_register_phc(bp);
2847                bnx2x_init_ptp(bp);
2848                bnx2x_configure_ptp_filters(bp);
2849        }
2850        /* Start Tx */
2851        switch (load_mode) {
2852        case LOAD_NORMAL:
2853                /* Tx queue should be only re-enabled */
2854                netif_tx_wake_all_queues(bp->dev);
2855                break;
2856
2857        case LOAD_OPEN:
2858                netif_tx_start_all_queues(bp->dev);
2859                smp_mb__after_atomic();
2860                break;
2861
2862        case LOAD_DIAG:
2863        case LOAD_LOOPBACK_EXT:
2864                bp->state = BNX2X_STATE_DIAG;
2865                break;
2866
2867        default:
2868                break;
2869        }
2870
2871        if (bp->port.pmf)
2872                bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0);
2873        else
2874                bnx2x__link_status_update(bp);
2875
2876        /* start the timer */
2877        mod_timer(&bp->timer, jiffies + bp->current_interval);
2878
2879        if (CNIC_ENABLED(bp))
2880                bnx2x_load_cnic(bp);
2881
2882        if (IS_PF(bp))
2883                bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_GET_DRV_VERSION, 0);
2884
2885        if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
2886                /* mark driver is loaded in shmem2 */
2887                u32 val;
2888                val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
2889                val &= ~DRV_FLAGS_MTU_MASK;
2890                val |= (bp->dev->mtu << DRV_FLAGS_MTU_SHIFT);
2891                SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
2892                          val | DRV_FLAGS_CAPABILITIES_LOADED_SUPPORTED |
2893                          DRV_FLAGS_CAPABILITIES_LOADED_L2);
2894        }
2895
2896        /* Wait for all pending SP commands to complete */
2897        if (IS_PF(bp) && !bnx2x_wait_sp_comp(bp, ~0x0UL)) {
2898                BNX2X_ERR("Timeout waiting for SP elements to complete\n");
2899                bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
2900                return -EBUSY;
2901        }
2902
2903        /* Update driver data for On-Chip MFW dump. */
2904        if (IS_PF(bp))
2905                bnx2x_update_mfw_dump(bp);
2906
2907        /* If PMF - send ADMIN DCBX msg to MFW to initiate DCBX FSM */
2908        if (bp->port.pmf && (bp->state != BNX2X_STATE_DIAG))
2909                bnx2x_dcbx_init(bp, false);
2910
2911        if (!IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp))
2912                bnx2x_set_os_driver_state(bp, OS_DRIVER_STATE_ACTIVE);
2913
2914        DP(NETIF_MSG_IFUP, "Ending successfully NIC load\n");
2915
2916        return 0;
2917
2918#ifndef BNX2X_STOP_ON_ERROR
2919load_error3:
2920        if (IS_PF(bp)) {
2921                bnx2x_int_disable_sync(bp, 1);
2922
2923                /* Clean queueable objects */
2924                bnx2x_squeeze_objects(bp);
2925        }
2926
2927        /* Free SKBs, SGEs, TPA pool and driver internals */
2928        bnx2x_free_skbs(bp);
2929        for_each_rx_queue(bp, i)
2930                bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
2931
2932        /* Release IRQs */
2933        bnx2x_free_irq(bp);
2934load_error2:
2935        if (IS_PF(bp) && !BP_NOMCP(bp)) {
2936                bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
2937                bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
2938        }
2939
2940        bp->port.pmf = 0;
2941load_error1:
2942        bnx2x_napi_disable(bp);
2943        bnx2x_del_all_napi(bp);
2944
2945        /* clear pf_load status, as it was already set */
2946        if (IS_PF(bp))
2947                bnx2x_clear_pf_load(bp);
2948load_error0:
2949        bnx2x_free_fw_stats_mem(bp);
2950        bnx2x_free_fp_mem(bp);
2951        bnx2x_free_mem(bp);
2952
2953        return rc;
2954#endif /* ! BNX2X_STOP_ON_ERROR */
2955}
2956
2957int bnx2x_drain_tx_queues(struct bnx2x *bp)
2958{
2959        u8 rc = 0, cos, i;
2960
2961        /* Wait until tx fastpath tasks complete */
2962        for_each_tx_queue(bp, i) {
2963                struct bnx2x_fastpath *fp = &bp->fp[i];
2964
2965                for_each_cos_in_tx_queue(fp, cos)
2966                        rc = bnx2x_clean_tx_queue(bp, fp->txdata_ptr[cos]);
2967                if (rc)
2968                        return rc;
2969        }
2970        return 0;
2971}
2972
2973/* must be called with rtnl_lock */
2974int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
2975{
2976        int i;
2977        bool global = false;
2978
2979        DP(NETIF_MSG_IFUP, "Starting NIC unload\n");
2980
2981        if (!IS_MF_SD_STORAGE_PERSONALITY_ONLY(bp))
2982                bnx2x_set_os_driver_state(bp, OS_DRIVER_STATE_DISABLED);
2983
2984        /* mark driver is unloaded in shmem2 */
2985        if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
2986                u32 val;
2987                val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
2988                SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
2989                          val & ~DRV_FLAGS_CAPABILITIES_LOADED_L2);
2990        }
2991
2992        if (IS_PF(bp) && bp->recovery_state != BNX2X_RECOVERY_DONE &&
2993            (bp->state == BNX2X_STATE_CLOSED ||
2994             bp->state == BNX2X_STATE_ERROR)) {
2995                /* We can get here if the driver has been unloaded
2996                 * during parity error recovery and is either waiting for a
2997                 * leader to complete or for other functions to unload and
2998                 * then ifdown has been issued. In this case we want to
2999                 * unload and let other functions to complete a recovery
3000                 * process.
3001                 */
3002                bp->recovery_state = BNX2X_RECOVERY_DONE;
3003                bp->is_leader = 0;
3004                bnx2x_release_leader_lock(bp);
3005                smp_mb();
3006
3007                DP(NETIF_MSG_IFDOWN, "Releasing a leadership...\n");
3008                BNX2X_ERR("Can't unload in closed or error state\n");
3009                return -EINVAL;
3010        }
3011
3012        /* Nothing to do during unload if previous bnx2x_nic_load()
3013         * have not completed successfully - all resources are released.
3014         *
3015         * we can get here only after unsuccessful ndo_* callback, during which
3016         * dev->IFF_UP flag is still on.
3017         */
3018        if (bp->state == BNX2X_STATE_CLOSED || bp->state == BNX2X_STATE_ERROR)
3019                return 0;
3020
3021        /* It's important to set the bp->state to the value different from
3022         * BNX2X_STATE_OPEN and only then stop the Tx. Otherwise bnx2x_tx_int()
3023         * may restart the Tx from the NAPI context (see bnx2x_tx_int()).
3024         */
3025        bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT;
3026        smp_mb();
3027
3028        /* indicate to VFs that the PF is going down */
3029        bnx2x_iov_channel_down(bp);
3030
3031        if (CNIC_LOADED(bp))
3032                bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD);
3033
3034        /* Stop Tx */
3035        bnx2x_tx_disable(bp);
3036        netdev_reset_tc(bp->dev);
3037
3038        bp->rx_mode = BNX2X_RX_MODE_NONE;
3039
3040        del_timer_sync(&bp->timer);
3041
3042        if (IS_PF(bp) && !BP_NOMCP(bp)) {
3043                /* Set ALWAYS_ALIVE bit in shmem */
3044                bp->fw_drv_pulse_wr_seq |= DRV_PULSE_ALWAYS_ALIVE;
3045                bnx2x_drv_pulse(bp);
3046                bnx2x_stats_handle(bp, STATS_EVENT_STOP);
3047                bnx2x_save_statistics(bp);
3048        }
3049
3050        /* wait till consumers catch up with producers in all queues.
3051         * If we're recovering, FW can't write to host so no reason
3052         * to wait for the queues to complete all Tx.
3053         */
3054        if (unload_mode != UNLOAD_RECOVERY)
3055                bnx2x_drain_tx_queues(bp);
3056
3057        /* if VF indicate to PF this function is going down (PF will delete sp
3058         * elements and clear initializations
3059         */
3060        if (IS_VF(bp)) {
3061                bnx2x_clear_vlan_info(bp);
3062                bnx2x_vfpf_close_vf(bp);
3063        } else if (unload_mode != UNLOAD_RECOVERY) {
3064                /* if this is a normal/close unload need to clean up chip*/
3065                bnx2x_chip_cleanup(bp, unload_mode, keep_link);
3066        } else {
3067                /* Send the UNLOAD_REQUEST to the MCP */
3068                bnx2x_send_unload_req(bp, unload_mode);
3069
3070                /* Prevent transactions to host from the functions on the
3071                 * engine that doesn't reset global blocks in case of global
3072                 * attention once global blocks are reset and gates are opened
3073                 * (the engine which leader will perform the recovery
3074                 * last).
3075                 */
3076                if (!CHIP_IS_E1x(bp))
3077                        bnx2x_pf_disable(bp);
3078
3079                /* Disable HW interrupts, NAPI */
3080                bnx2x_netif_stop(bp, 1);
3081                /* Delete all NAPI objects */
3082                bnx2x_del_all_napi(bp);
3083                if (CNIC_LOADED(bp))
3084                        bnx2x_del_all_napi_cnic(bp);
3085                /* Release IRQs */
3086                bnx2x_free_irq(bp);
3087
3088                /* Report UNLOAD_DONE to MCP */
3089                bnx2x_send_unload_done(bp, false);
3090        }
3091
3092        /*
3093         * At this stage no more interrupts will arrive so we may safely clean
3094         * the queueable objects here in case they failed to get cleaned so far.
3095         */
3096        if (IS_PF(bp))
3097                bnx2x_squeeze_objects(bp);
3098
3099        /* There should be no more pending SP commands at this stage */
3100        bp->sp_state = 0;
3101
3102        bp->port.pmf = 0;
3103
3104        /* clear pending work in rtnl task */
3105        bp->sp_rtnl_state = 0;
3106        smp_mb();
3107
3108        /* Free SKBs, SGEs, TPA pool and driver internals */
3109        bnx2x_free_skbs(bp);
3110        if (CNIC_LOADED(bp))
3111                bnx2x_free_skbs_cnic(bp);
3112        for_each_rx_queue(bp, i)
3113                bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
3114
3115        bnx2x_free_fp_mem(bp);
3116        if (CNIC_LOADED(bp))
3117                bnx2x_free_fp_mem_cnic(bp);
3118
3119        if (IS_PF(bp)) {
3120                if (CNIC_LOADED(bp))
3121                        bnx2x_free_mem_cnic(bp);
3122        }
3123        bnx2x_free_mem(bp);
3124
3125        bp->state = BNX2X_STATE_CLOSED;
3126        bp->cnic_loaded = false;
3127
3128        /* Clear driver version indication in shmem */
3129        if (IS_PF(bp) && !BP_NOMCP(bp))
3130                bnx2x_update_mng_version(bp);
3131
3132        /* Check if there are pending parity attentions. If there are - set
3133         * RECOVERY_IN_PROGRESS.
3134         */
3135        if (IS_PF(bp) && bnx2x_chk_parity_attn(bp, &global, false)) {
3136                bnx2x_set_reset_in_progress(bp);
3137
3138                /* Set RESET_IS_GLOBAL if needed */
3139                if (global)
3140                        bnx2x_set_reset_global(bp);
3141        }
3142
3143        /* The last driver must disable a "close the gate" if there is no
3144         * parity attention or "process kill" pending.
3145         */
3146        if (IS_PF(bp) &&
3147            !bnx2x_clear_pf_load(bp) &&
3148            bnx2x_reset_is_done(bp, BP_PATH(bp)))
3149                bnx2x_disable_close_the_gate(bp);
3150
3151        DP(NETIF_MSG_IFUP, "Ending NIC unload\n");
3152
3153        return 0;
3154}
3155
3156int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state)
3157{
3158        u16 pmcsr;
3159
3160        /* If there is no power capability, silently succeed */
3161        if (!bp->pdev->pm_cap) {
3162                BNX2X_DEV_INFO("No power capability. Breaking.\n");
3163                return 0;
3164        }
3165
3166        pci_read_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL, &pmcsr);
3167
3168        switch (state) {
3169        case PCI_D0:
3170                pci_write_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL,
3171                                      ((pmcsr & ~PCI_PM_CTRL_STATE_MASK) |
3172                                       PCI_PM_CTRL_PME_STATUS));
3173
3174                if (pmcsr & PCI_PM_CTRL_STATE_MASK)
3175                        /* delay required during transition out of D3hot */
3176                        msleep(20);
3177                break;
3178
3179        case PCI_D3hot:
3180                /* If there are other clients above don't
3181                   shut down the power */
3182                if (atomic_read(&bp->pdev->enable_cnt) != 1)
3183                        return 0;
3184                /* Don't shut down the power for emulation and FPGA */
3185                if (CHIP_REV_IS_SLOW(bp))
3186                        return 0;
3187
3188                pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
3189                pmcsr |= 3;
3190
3191                if (bp->wol)
3192                        pmcsr |= PCI_PM_CTRL_PME_ENABLE;
3193
3194                pci_write_config_word(bp->pdev, bp->pdev->pm_cap + PCI_PM_CTRL,
3195                                      pmcsr);
3196
3197                /* No more memory access after this point until
3198                * device is brought back to D0.
3199                */
3200                break;
3201
3202        default:
3203                dev_err(&bp->pdev->dev, "Can't support state = %d\n", state);
3204                return -EINVAL;
3205        }
3206        return 0;
3207}
3208
3209/*
3210 * net_device service functions
3211 */
3212static int bnx2x_poll(struct napi_struct *napi, int budget)
3213{
3214        struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath,
3215                                                 napi);
3216        struct bnx2x *bp = fp->bp;
3217        int rx_work_done;
3218        u8 cos;
3219
3220#ifdef BNX2X_STOP_ON_ERROR
3221        if (unlikely(bp->panic)) {
3222                napi_complete(napi);
3223                return 0;
3224        }
3225#endif
3226        for_each_cos_in_tx_queue(fp, cos)
3227                if (bnx2x_tx_queue_has_work(fp->txdata_ptr[cos]))
3228                        bnx2x_tx_int(bp, fp->txdata_ptr[cos]);
3229
3230        rx_work_done = (bnx2x_has_rx_work(fp)) ? bnx2x_rx_int(fp, budget) : 0;
3231
3232        if (rx_work_done < budget) {
3233                /* No need to update SB for FCoE L2 ring as long as
3234                 * it's connected to the default SB and the SB
3235                 * has been updated when NAPI was scheduled.
3236                 */
3237                if (IS_FCOE_FP(fp)) {
3238                        napi_complete_done(napi, rx_work_done);
3239                } else {
3240                        bnx2x_update_fpsb_idx(fp);
3241                        /* bnx2x_has_rx_work() reads the status block,
3242                         * thus we need to ensure that status block indices
3243                         * have been actually read (bnx2x_update_fpsb_idx)
3244                         * prior to this check (bnx2x_has_rx_work) so that
3245                         * we won't write the "newer" value of the status block
3246                         * to IGU (if there was a DMA right after
3247                         * bnx2x_has_rx_work and if there is no rmb, the memory
3248                         * reading (bnx2x_update_fpsb_idx) may be postponed
3249                         * to right before bnx2x_ack_sb). In this case there
3250                         * will never be another interrupt until there is
3251                         * another update of the status block, while there
3252                         * is still unhandled work.
3253                         */
3254                        rmb();
3255
3256                        if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
3257                                if (napi_complete_done(napi, rx_work_done)) {
3258                                        /* Re-enable interrupts */
3259                                        DP(NETIF_MSG_RX_STATUS,
3260                                           "Update index to %d\n", fp->fp_hc_idx);
3261                                        bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID,
3262                                                     le16_to_cpu(fp->fp_hc_idx),
3263                                                     IGU_INT_ENABLE, 1);
3264                                }
3265                        } else {
3266                                rx_work_done = budget;
3267                        }
3268                }
3269        }
3270
3271        return rx_work_done;
3272}
3273
3274/* we split the first BD into headers and data BDs
3275 * to ease the pain of our fellow microcode engineers
3276 * we use one mapping for both BDs
3277 */
3278static u16 bnx2x_tx_split(struct bnx2x *bp,
3279                          struct bnx2x_fp_txdata *txdata,
3280                          struct sw_tx_bd *tx_buf,
3281                          struct eth_tx_start_bd **tx_bd, u16 hlen,
3282                          u16 bd_prod)
3283{
3284        struct eth_tx_start_bd *h_tx_bd = *tx_bd;
3285        struct eth_tx_bd *d_tx_bd;
3286        dma_addr_t mapping;
3287        int old_len = le16_to_cpu(h_tx_bd->nbytes);
3288
3289        /* first fix first BD */
3290        h_tx_bd->nbytes = cpu_to_le16(hlen);
3291
3292        DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d (%x:%x)\n",
3293           h_tx_bd->nbytes, h_tx_bd->addr_hi, h_tx_bd->addr_lo);
3294
3295        /* now get a new data BD
3296         * (after the pbd) and fill it */
3297        bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3298        d_tx_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
3299
3300        mapping = HILO_U64(le32_to_cpu(h_tx_bd->addr_hi),
3301                           le32_to_cpu(h_tx_bd->addr_lo)) + hlen;
3302
3303        d_tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
3304        d_tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
3305        d_tx_bd->nbytes = cpu_to_le16(old_len - hlen);
3306
3307        /* this marks the BD as one that has no individual mapping */
3308        tx_buf->flags |= BNX2X_TSO_SPLIT_BD;
3309
3310        DP(NETIF_MSG_TX_QUEUED,
3311           "TSO split data size is %d (%x:%x)\n",
3312           d_tx_bd->nbytes, d_tx_bd->addr_hi, d_tx_bd->addr_lo);
3313
3314        /* update tx_bd */
3315        *tx_bd = (struct eth_tx_start_bd *)d_tx_bd;
3316
3317        return bd_prod;
3318}
3319
3320#define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32)))
3321#define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16)))
3322static __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix)
3323{
3324        __sum16 tsum = (__force __sum16) csum;
3325
3326        if (fix > 0)
3327                tsum = ~csum_fold(csum_sub((__force __wsum) csum,
3328                                  csum_partial(t_header - fix, fix, 0)));
3329
3330        else if (fix < 0)
3331                tsum = ~csum_fold(csum_add((__force __wsum) csum,
3332                                  csum_partial(t_header, -fix, 0)));
3333
3334        return bswab16(tsum);
3335}
3336
3337static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb)
3338{
3339        u32 rc;
3340        __u8 prot = 0;
3341        __be16 protocol;
3342
3343        if (skb->ip_summed != CHECKSUM_PARTIAL)
3344                return XMIT_PLAIN;
3345
3346        protocol = vlan_get_protocol(skb);
3347        if (protocol == htons(ETH_P_IPV6)) {
3348                rc = XMIT_CSUM_V6;
3349                prot = ipv6_hdr(skb)->nexthdr;
3350        } else {
3351                rc = XMIT_CSUM_V4;
3352                prot = ip_hdr(skb)->protocol;
3353        }
3354
3355        if (!CHIP_IS_E1x(bp) && skb->encapsulation) {
3356                if (inner_ip_hdr(skb)->version == 6) {
3357                        rc |= XMIT_CSUM_ENC_V6;
3358                        if (inner_ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
3359                                rc |= XMIT_CSUM_TCP;
3360                } else {
3361                        rc |= XMIT_CSUM_ENC_V4;
3362                        if (inner_ip_hdr(skb)->protocol == IPPROTO_TCP)
3363                                rc |= XMIT_CSUM_TCP;
3364                }
3365        }
3366        if (prot == IPPROTO_TCP)
3367                rc |= XMIT_CSUM_TCP;
3368
3369        if (skb_is_gso(skb)) {
3370                if (skb_is_gso_v6(skb)) {
3371                        rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP);
3372                        if (rc & XMIT_CSUM_ENC)
3373                                rc |= XMIT_GSO_ENC_V6;
3374                } else {
3375                        rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP);
3376                        if (rc & XMIT_CSUM_ENC)
3377                                rc |= XMIT_GSO_ENC_V4;
3378                }
3379        }
3380
3381        return rc;
3382}
3383
3384/* VXLAN: 4 = 1 (for linear data BD) + 3 (2 for PBD and last BD) */
3385#define BNX2X_NUM_VXLAN_TSO_WIN_SUB_BDS         4
3386
3387/* Regular: 3 = 1 (for linear data BD) + 2 (for PBD and last BD) */
3388#define BNX2X_NUM_TSO_WIN_SUB_BDS               3
3389
3390#if (MAX_SKB_FRAGS >= MAX_FETCH_BD - BDS_PER_TX_PKT)
3391/* check if packet requires linearization (packet is too fragmented)
3392   no need to check fragmentation if page size > 8K (there will be no
3393   violation to FW restrictions) */
3394static int bnx2x_pkt_req_lin(struct bnx2x *bp, struct sk_buff *skb,
3395                             u32 xmit_type)
3396{
3397        int first_bd_sz = 0, num_tso_win_sub = BNX2X_NUM_TSO_WIN_SUB_BDS;
3398        int to_copy = 0, hlen = 0;
3399
3400        if (xmit_type & XMIT_GSO_ENC)
3401                num_tso_win_sub = BNX2X_NUM_VXLAN_TSO_WIN_SUB_BDS;
3402
3403        if (skb_shinfo(skb)->nr_frags >= (MAX_FETCH_BD - num_tso_win_sub)) {
3404                if (xmit_type & XMIT_GSO) {
3405                        unsigned short lso_mss = skb_shinfo(skb)->gso_size;
3406                        int wnd_size = MAX_FETCH_BD - num_tso_win_sub;
3407                        /* Number of windows to check */
3408                        int num_wnds = skb_shinfo(skb)->nr_frags - wnd_size;
3409                        int wnd_idx = 0;
3410                        int frag_idx = 0;
3411                        u32 wnd_sum = 0;
3412
3413                        /* Headers length */
3414                        if (xmit_type & XMIT_GSO_ENC)
3415                                hlen = (int)(skb_inner_transport_header(skb) -
3416                                             skb->data) +
3417                                             inner_tcp_hdrlen(skb);
3418                        else
3419                                hlen = (int)(skb_transport_header(skb) -
3420                                             skb->data) + tcp_hdrlen(skb);
3421
3422                        /* Amount of data (w/o headers) on linear part of SKB*/
3423                        first_bd_sz = skb_headlen(skb) - hlen;
3424
3425                        wnd_sum  = first_bd_sz;
3426
3427                        /* Calculate the first sum - it's special */
3428                        for (frag_idx = 0; frag_idx < wnd_size - 1; frag_idx++)
3429                                wnd_sum +=
3430                                        skb_frag_size(&skb_shinfo(skb)->frags[frag_idx]);
3431
3432                        /* If there was data on linear skb data - check it */
3433                        if (first_bd_sz > 0) {
3434                                if (unlikely(wnd_sum < lso_mss)) {
3435                                        to_copy = 1;
3436                                        goto exit_lbl;
3437                                }
3438
3439                                wnd_sum -= first_bd_sz;
3440                        }
3441
3442                        /* Others are easier: run through the frag list and
3443                           check all windows */
3444                        for (wnd_idx = 0; wnd_idx <= num_wnds; wnd_idx++) {
3445                                wnd_sum +=
3446                          skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx + wnd_size - 1]);
3447
3448                                if (unlikely(wnd_sum < lso_mss)) {
3449                                        to_copy = 1;
3450                                        break;
3451                                }
3452                                wnd_sum -=
3453                                        skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx]);
3454                        }
3455                } else {
3456                        /* in non-LSO too fragmented packet should always
3457                           be linearized */
3458                        to_copy = 1;
3459                }
3460        }
3461
3462exit_lbl:
3463        if (unlikely(to_copy))
3464                DP(NETIF_MSG_TX_QUEUED,
3465                   "Linearization IS REQUIRED for %s packet. num_frags %d  hlen %d  first_bd_sz %d\n",
3466                   (xmit_type & XMIT_GSO) ? "LSO" : "non-LSO",
3467                   skb_shinfo(skb)->nr_frags, hlen, first_bd_sz);
3468
3469        return to_copy;
3470}
3471#endif
3472
3473/**
3474 * bnx2x_set_pbd_gso - update PBD in GSO case.
3475 *
3476 * @skb:        packet skb
3477 * @pbd:        parse BD
3478 * @xmit_type:  xmit flags
3479 */
3480static void bnx2x_set_pbd_gso(struct sk_buff *skb,
3481                              struct eth_tx_parse_bd_e1x *pbd,
3482                              u32 xmit_type)
3483{
3484        pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
3485        pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq);
3486        pbd->tcp_flags = pbd_tcp_flags(tcp_hdr(skb));
3487
3488        if (xmit_type & XMIT_GSO_V4) {
3489                pbd->ip_id = bswab16(ip_hdr(skb)->id);
3490                pbd->tcp_pseudo_csum =
3491                        bswab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
3492                                                   ip_hdr(skb)->daddr,
3493                                                   0, IPPROTO_TCP, 0));
3494        } else {
3495                pbd->tcp_pseudo_csum =
3496                        bswab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
3497                                                 &ipv6_hdr(skb)->daddr,
3498                                                 0, IPPROTO_TCP, 0));
3499        }
3500
3501        pbd->global_data |=
3502                cpu_to_le16(ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN);
3503}
3504
3505/**
3506 * bnx2x_set_pbd_csum_enc - update PBD with checksum and return header length
3507 *
3508 * @bp:                 driver handle
3509 * @skb:                packet skb
3510 * @parsing_data:       data to be updated
3511 * @xmit_type:          xmit flags
3512 *
3513 * 57712/578xx related, when skb has encapsulation
3514 */
3515static u8 bnx2x_set_pbd_csum_enc(struct bnx2x *bp, struct sk_buff *skb,
3516                                 u32 *parsing_data, u32 xmit_type)
3517{
3518        *parsing_data |=
3519                ((((u8 *)skb_inner_transport_header(skb) - skb->data) >> 1) <<
3520                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
3521                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
3522
3523        if (xmit_type & XMIT_CSUM_TCP) {
3524                *parsing_data |= ((inner_tcp_hdrlen(skb) / 4) <<
3525                        ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) &
3526                        ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW;
3527
3528                return skb_inner_transport_header(skb) +
3529                        inner_tcp_hdrlen(skb) - skb->data;
3530        }
3531
3532        /* We support checksum offload for TCP and UDP only.
3533         * No need to pass the UDP header length - it's a constant.
3534         */
3535        return skb_inner_transport_header(skb) +
3536                sizeof(struct udphdr) - skb->data;
3537}
3538
3539/**
3540 * bnx2x_set_pbd_csum_e2 - update PBD with checksum and return header length
3541 *
3542 * @bp:                 driver handle
3543 * @skb:                packet skb
3544 * @parsing_data:       data to be updated
3545 * @xmit_type:          xmit flags
3546 *
3547 * 57712/578xx related
3548 */
3549static u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb,
3550                                u32 *parsing_data, u32 xmit_type)
3551{
3552        *parsing_data |=
3553                ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) <<
3554                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
3555                ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
3556
3557        if (xmit_type & XMIT_CSUM_TCP) {
3558                *parsing_data |= ((tcp_hdrlen(skb) / 4) <<
3559                        ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) &
3560                        ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW;
3561
3562                return skb_transport_header(skb) + tcp_hdrlen(skb) - skb->data;
3563        }
3564        /* We support checksum offload for TCP and UDP only.
3565         * No need to pass the UDP header length - it's a constant.
3566         */
3567        return skb_transport_header(skb) + sizeof(struct udphdr) - skb->data;
3568}
3569
3570/* set FW indication according to inner or outer protocols if tunneled */
3571static void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb,
3572                               struct eth_tx_start_bd *tx_start_bd,
3573                               u32 xmit_type)
3574{
3575        tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM;
3576
3577        if (xmit_type & (XMIT_CSUM_ENC_V6 | XMIT_CSUM_V6))
3578                tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IPV6;
3579
3580        if (!(xmit_type & XMIT_CSUM_TCP))
3581                tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IS_UDP;
3582}
3583
3584/**
3585 * bnx2x_set_pbd_csum - update PBD with checksum and return header length
3586 *
3587 * @bp:         driver handle
3588 * @skb:        packet skb
3589 * @pbd:        parse BD to be updated
3590 * @xmit_type:  xmit flags
3591 */
3592static u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
3593                             struct eth_tx_parse_bd_e1x *pbd,
3594                             u32 xmit_type)
3595{
3596        u8 hlen = (skb_network_header(skb) - skb->data) >> 1;
3597
3598        /* for now NS flag is not used in Linux */
3599        pbd->global_data =
3600                cpu_to_le16(hlen |
3601                            ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
3602                             ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT));
3603
3604        pbd->ip_hlen_w = (skb_transport_header(skb) -
3605                        skb_network_header(skb)) >> 1;
3606
3607        hlen += pbd->ip_hlen_w;
3608
3609        /* We support checksum offload for TCP and UDP only */
3610        if (xmit_type & XMIT_CSUM_TCP)
3611                hlen += tcp_hdrlen(skb) / 2;
3612        else
3613                hlen += sizeof(struct udphdr) / 2;
3614
3615        pbd->total_hlen_w = cpu_to_le16(hlen);
3616        hlen = hlen*2;
3617
3618        if (xmit_type & XMIT_CSUM_TCP) {
3619                pbd->tcp_pseudo_csum = bswab16(tcp_hdr(skb)->check);
3620
3621        } else {
3622                s8 fix = SKB_CS_OFF(skb); /* signed! */
3623
3624                DP(NETIF_MSG_TX_QUEUED,
3625                   "hlen %d  fix %d  csum before fix %x\n",
3626                   le16_to_cpu(pbd->total_hlen_w), fix, SKB_CS(skb));
3627
3628                /* HW bug: fixup the CSUM */
3629                pbd->tcp_pseudo_csum =
3630                        bnx2x_csum_fix(skb_transport_header(skb),
3631                                       SKB_CS(skb), fix);
3632
3633                DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n",
3634                   pbd->tcp_pseudo_csum);
3635        }
3636
3637        return hlen;
3638}
3639
3640static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb,
3641                                      struct eth_tx_parse_bd_e2 *pbd_e2,
3642                                      struct eth_tx_parse_2nd_bd *pbd2,
3643                                      u16 *global_data,
3644                                      u32 xmit_type)
3645{
3646        u16 hlen_w = 0;
3647        u8 outerip_off, outerip_len = 0;
3648
3649        /* from outer IP to transport */
3650        hlen_w = (skb_inner_transport_header(skb) -
3651                  skb_network_header(skb)) >> 1;
3652
3653        /* transport len */
3654        hlen_w += inner_tcp_hdrlen(skb) >> 1;
3655
3656        pbd2->fw_ip_hdr_to_payload_w = hlen_w;
3657
3658        /* outer IP header info */
3659        if (xmit_type & XMIT_CSUM_V4) {
3660                struct iphdr *iph = ip_hdr(skb);
3661                u32 csum = (__force u32)(~iph->check) -
3662                           (__force u32)iph->tot_len -
3663                           (__force u32)iph->frag_off;
3664
3665                outerip_len = iph->ihl << 1;
3666
3667                pbd2->fw_ip_csum_wo_len_flags_frag =
3668                        bswab16(csum_fold((__force __wsum)csum));
3669        } else {
3670                pbd2->fw_ip_hdr_to_payload_w =
3671                        hlen_w - ((sizeof(struct ipv6hdr)) >> 1);
3672                pbd_e2->data.tunnel_data.flags |=
3673                        ETH_TUNNEL_DATA_IPV6_OUTER;
3674        }
3675
3676        pbd2->tcp_send_seq = bswab32(inner_tcp_hdr(skb)->seq);
3677
3678        pbd2->tcp_flags = pbd_tcp_flags(inner_tcp_hdr(skb));
3679
3680        /* inner IP header info */
3681        if (xmit_type & XMIT_CSUM_ENC_V4) {
3682                pbd2->hw_ip_id = bswab16(inner_ip_hdr(skb)->id);
3683
3684                pbd_e2->data.tunnel_data.pseudo_csum =
3685                        bswab16(~csum_tcpudp_magic(
3686                                        inner_ip_hdr(skb)->saddr,
3687                                        inner_ip_hdr(skb)->daddr,
3688                                        0, IPPROTO_TCP, 0));
3689        } else {
3690                pbd_e2->data.tunnel_data.pseudo_csum =
3691                        bswab16(~csum_ipv6_magic(
3692                                        &inner_ipv6_hdr(skb)->saddr,
3693                                        &inner_ipv6_hdr(skb)->daddr,
3694                                        0, IPPROTO_TCP, 0));
3695        }
3696
3697        outerip_off = (skb_network_header(skb) - skb->data) >> 1;
3698
3699        *global_data |=
3700                outerip_off |
3701                (outerip_len <<
3702                        ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT) |
3703                ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
3704                        ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT);
3705
3706        if (ip_hdr(skb)->protocol == IPPROTO_UDP) {
3707                SET_FLAG(*global_data, ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST, 1);
3708                pbd2->tunnel_udp_hdr_start_w = skb_transport_offset(skb) >> 1;
3709        }
3710}
3711
3712static inline void bnx2x_set_ipv6_ext_e2(struct sk_buff *skb, u32 *parsing_data,
3713                                         u32 xmit_type)
3714{
3715        struct ipv6hdr *ipv6;
3716
3717        if (!(xmit_type & (XMIT_GSO_ENC_V6 | XMIT_GSO_V6)))
3718                return;
3719
3720        if (xmit_type & XMIT_GSO_ENC_V6)
3721                ipv6 = inner_ipv6_hdr(skb);
3722        else /* XMIT_GSO_V6 */
3723                ipv6 = ipv6_hdr(skb);
3724
3725        if (ipv6->nexthdr == NEXTHDR_IPV6)
3726                *parsing_data |= ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR;
3727}
3728
3729/* called with netif_tx_lock
3730 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call
3731 * netif_wake_queue()
3732 */
3733netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
3734{
3735        struct bnx2x *bp = netdev_priv(dev);
3736
3737        struct netdev_queue *txq;
3738        struct bnx2x_fp_txdata *txdata;
3739        struct sw_tx_bd *tx_buf;
3740        struct eth_tx_start_bd *tx_start_bd, *first_bd;
3741        struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL;
3742        struct eth_tx_parse_bd_e1x *pbd_e1x = NULL;
3743        struct eth_tx_parse_bd_e2 *pbd_e2 = NULL;
3744        struct eth_tx_parse_2nd_bd *pbd2 = NULL;
3745        u32 pbd_e2_parsing_data = 0;
3746        u16 pkt_prod, bd_prod;
3747        int nbd, txq_index;
3748        dma_addr_t mapping;
3749        u32 xmit_type = bnx2x_xmit_type(bp, skb);
3750        int i;
3751        u8 hlen = 0;
3752        __le16 pkt_size = 0;
3753        struct ethhdr *eth;
3754        u8 mac_type = UNICAST_ADDRESS;
3755
3756#ifdef BNX2X_STOP_ON_ERROR
3757        if (unlikely(bp->panic))
3758                return NETDEV_TX_BUSY;
3759#endif
3760
3761        txq_index = skb_get_queue_mapping(skb);
3762        txq = netdev_get_tx_queue(dev, txq_index);
3763
3764        BUG_ON(txq_index >= MAX_ETH_TXQ_IDX(bp) + (CNIC_LOADED(bp) ? 1 : 0));
3765
3766        txdata = &bp->bnx2x_txq[txq_index];
3767
3768        /* enable this debug print to view the transmission queue being used
3769        DP(NETIF_MSG_TX_QUEUED, "indices: txq %d, fp %d, txdata %d\n",
3770           txq_index, fp_index, txdata_index); */
3771
3772        /* enable this debug print to view the transmission details
3773        DP(NETIF_MSG_TX_QUEUED,
3774           "transmitting packet cid %d fp index %d txdata_index %d tx_data ptr %p fp pointer %p\n",
3775           txdata->cid, fp_index, txdata_index, txdata, fp); */
3776
3777        if (unlikely(bnx2x_tx_avail(bp, txdata) <
3778                        skb_shinfo(skb)->nr_frags +
3779                        BDS_PER_TX_PKT +
3780                        NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) {
3781                /* Handle special storage cases separately */
3782                if (txdata->tx_ring_size == 0) {
3783                        struct bnx2x_eth_q_stats *q_stats =
3784                                bnx2x_fp_qstats(bp, txdata->parent_fp);
3785                        q_stats->driver_filtered_tx_pkt++;
3786                        dev_kfree_skb(skb);
3787                        return NETDEV_TX_OK;
3788                }
3789                bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
3790                netif_tx_stop_queue(txq);
3791                BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
3792
3793                return NETDEV_TX_BUSY;
3794        }
3795
3796        DP(NETIF_MSG_TX_QUEUED,
3797           "queue[%d]: SKB: summed %x  protocol %x protocol(%x,%x) gso type %x  xmit_type %x len %d\n",
3798           txq_index, skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr,
3799           ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type,
3800           skb->len);
3801
3802        eth = (struct ethhdr *)skb->data;
3803
3804        /* set flag according to packet type (UNICAST_ADDRESS is default)*/
3805        if (unlikely(is_multicast_ether_addr(eth->h_dest))) {
3806                if (is_broadcast_ether_addr(eth->h_dest))
3807                        mac_type = BROADCAST_ADDRESS;
3808                else
3809                        mac_type = MULTICAST_ADDRESS;
3810        }
3811
3812#if (MAX_SKB_FRAGS >= MAX_FETCH_BD - BDS_PER_TX_PKT)
3813        /* First, check if we need to linearize the skb (due to FW
3814           restrictions). No need to check fragmentation if page size > 8K
3815           (there will be no violation to FW restrictions) */
3816        if (bnx2x_pkt_req_lin(bp, skb, xmit_type)) {
3817                /* Statistics of linearization */
3818                bp->lin_cnt++;
3819                if (skb_linearize(skb) != 0) {
3820                        DP(NETIF_MSG_TX_QUEUED,
3821                           "SKB linearization failed - silently dropping this SKB\n");
3822                        dev_kfree_skb_any(skb);
3823                        return NETDEV_TX_OK;
3824                }
3825        }
3826#endif
3827        /* Map skb linear data for DMA */
3828        mapping = dma_map_single(&bp->pdev->dev, skb->data,
3829                                 skb_headlen(skb), DMA_TO_DEVICE);
3830        if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
3831                DP(NETIF_MSG_TX_QUEUED,
3832                   "SKB mapping failed - silently dropping this SKB\n");
3833                dev_kfree_skb_any(skb);
3834                return NETDEV_TX_OK;
3835        }
3836        /*
3837        Please read carefully. First we use one BD which we mark as start,
3838        then we have a parsing info BD (used for TSO or xsum),
3839        and only then we have the rest of the TSO BDs.
3840        (don't forget to mark the last one as last,
3841        and to unmap only AFTER you write to the BD ...)
3842        And above all, all pdb sizes are in words - NOT DWORDS!
3843        */
3844
3845        /* get current pkt produced now - advance it just before sending packet
3846         * since mapping of pages may fail and cause packet to be dropped
3847         */
3848        pkt_prod = txdata->tx_pkt_prod;
3849        bd_prod = TX_BD(txdata->tx_bd_prod);
3850
3851        /* get a tx_buf and first BD
3852         * tx_start_bd may be changed during SPLIT,
3853         * but first_bd will always stay first
3854         */
3855        tx_buf = &txdata->tx_buf_ring[TX_BD(pkt_prod)];
3856        tx_start_bd = &txdata->tx_desc_ring[bd_prod].start_bd;
3857        first_bd = tx_start_bd;
3858
3859        tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD;
3860
3861        if (unlikely(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
3862                if (!(bp->flags & TX_TIMESTAMPING_EN)) {
3863                        bp->eth_stats.ptp_skip_tx_ts++;
3864                        BNX2X_ERR("Tx timestamping was not enabled, this packet will not be timestamped\n");
3865                } else if (bp->ptp_tx_skb) {
3866                        bp->eth_stats.ptp_skip_tx_ts++;
3867                        netdev_err_once(bp->dev,
3868                                        "Device supports only a single outstanding packet to timestamp, this packet won't be timestamped\n");
3869                } else {
3870                        skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
3871                        /* schedule check for Tx timestamp */
3872                        bp->ptp_tx_skb = skb_get(skb);
3873                        bp->ptp_tx_start = jiffies;
3874                        schedule_work(&bp->ptp_task);
3875                }
3876        }
3877
3878        /* header nbd: indirectly zero other flags! */
3879        tx_start_bd->general_data = 1 << ETH_TX_START_BD_HDR_NBDS_SHIFT;
3880
3881        /* remember the first BD of the packet */
3882        tx_buf->first_bd = txdata->tx_bd_prod;
3883        tx_buf->skb = skb;
3884        tx_buf->flags = 0;
3885
3886        DP(NETIF_MSG_TX_QUEUED,
3887           "sending pkt %u @%p  next_idx %u  bd %u @%p\n",
3888           pkt_prod, tx_buf, txdata->tx_pkt_prod, bd_prod, tx_start_bd);
3889
3890        if (skb_vlan_tag_present(skb)) {
3891                tx_start_bd->vlan_or_ethertype =
3892                    cpu_to_le16(skb_vlan_tag_get(skb));
3893                tx_start_bd->bd_flags.as_bitfield |=
3894                    (X_ETH_OUTBAND_VLAN << ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
3895        } else {
3896                /* when transmitting in a vf, start bd must hold the ethertype
3897                 * for fw to enforce it
3898                 */
3899                u16 vlan_tci = 0;
3900#ifndef BNX2X_STOP_ON_ERROR
3901                if (IS_VF(bp)) {
3902#endif
3903                        /* Still need to consider inband vlan for enforced */
3904                        if (__vlan_get_tag(skb, &vlan_tci)) {
3905                                tx_start_bd->vlan_or_ethertype =
3906                                        cpu_to_le16(ntohs(eth->h_proto));
3907                        } else {
3908                                tx_start_bd->bd_flags.as_bitfield |=
3909                                        (X_ETH_INBAND_VLAN <<
3910                                         ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
3911                                tx_start_bd->vlan_or_ethertype =
3912                                        cpu_to_le16(vlan_tci);
3913                        }
3914#ifndef BNX2X_STOP_ON_ERROR
3915                } else {
3916                        /* used by FW for packet accounting */
3917                        tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
3918                }
3919#endif
3920        }
3921
3922        nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */
3923
3924        /* turn on parsing and get a BD */
3925        bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3926
3927        if (xmit_type & XMIT_CSUM)
3928                bnx2x_set_sbd_csum(bp, skb, tx_start_bd, xmit_type);
3929
3930        if (!CHIP_IS_E1x(bp)) {
3931                pbd_e2 = &txdata->tx_desc_ring[bd_prod].parse_bd_e2;
3932                memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2));
3933
3934                if (xmit_type & XMIT_CSUM_ENC) {
3935                        u16 global_data = 0;
3936
3937                        /* Set PBD in enc checksum offload case */
3938                        hlen = bnx2x_set_pbd_csum_enc(bp, skb,
3939                                                      &pbd_e2_parsing_data,
3940                                                      xmit_type);
3941
3942                        /* turn on 2nd parsing and get a BD */
3943                        bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3944
3945                        pbd2 = &txdata->tx_desc_ring[bd_prod].parse_2nd_bd;
3946
3947                        memset(pbd2, 0, sizeof(*pbd2));
3948
3949                        pbd_e2->data.tunnel_data.ip_hdr_start_inner_w =
3950                                (skb_inner_network_header(skb) -
3951                                 skb->data) >> 1;
3952
3953                        if (xmit_type & XMIT_GSO_ENC)
3954                                bnx2x_update_pbds_gso_enc(skb, pbd_e2, pbd2,
3955                                                          &global_data,
3956                                                          xmit_type);
3957
3958                        pbd2->global_data = cpu_to_le16(global_data);
3959
3960                        /* add addition parse BD indication to start BD */
3961                        SET_FLAG(tx_start_bd->general_data,
3962                                 ETH_TX_START_BD_PARSE_NBDS, 1);
3963                        /* set encapsulation flag in start BD */
3964                        SET_FLAG(tx_start_bd->general_data,
3965                                 ETH_TX_START_BD_TUNNEL_EXIST, 1);
3966
3967                        tx_buf->flags |= BNX2X_HAS_SECOND_PBD;
3968
3969                        nbd++;
3970                } else if (xmit_type & XMIT_CSUM) {
3971                        /* Set PBD in checksum offload case w/o encapsulation */
3972                        hlen = bnx2x_set_pbd_csum_e2(bp, skb,
3973                                                     &pbd_e2_parsing_data,
3974                                                     xmit_type);
3975                }
3976
3977                bnx2x_set_ipv6_ext_e2(skb, &pbd_e2_parsing_data, xmit_type);
3978                /* Add the macs to the parsing BD if this is a vf or if
3979                 * Tx Switching is enabled.
3980                 */
3981                if (IS_VF(bp)) {
3982                        /* override GRE parameters in BD */
3983                        bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi,
3984                                              &pbd_e2->data.mac_addr.src_mid,
3985                                              &pbd_e2->data.mac_addr.src_lo,
3986                                              eth->h_source);
3987
3988                        bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi,
3989                                              &pbd_e2->data.mac_addr.dst_mid,
3990                                              &pbd_e2->data.mac_addr.dst_lo,
3991                                              eth->h_dest);
3992                } else {
3993                        if (bp->flags & TX_SWITCHING)
3994                                bnx2x_set_fw_mac_addr(
3995                                                &pbd_e2->data.mac_addr.dst_hi,
3996                                                &pbd_e2->data.mac_addr.dst_mid,
3997                                                &pbd_e2->data.mac_addr.dst_lo,
3998                                                eth->h_dest);
3999#ifdef BNX2X_STOP_ON_ERROR
4000                        /* Enforce security is always set in Stop on Error -
4001                         * source mac should be present in the parsing BD
4002                         */
4003                        bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi,
4004                                              &pbd_e2->data.mac_addr.src_mid,
4005                                              &pbd_e2->data.mac_addr.src_lo,
4006                                              eth->h_source);
4007#endif
4008                }
4009
4010                SET_FLAG(pbd_e2_parsing_data,
4011                         ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE, mac_type);
4012        } else {
4013                u16 global_data = 0;
4014                pbd_e1x = &txdata->tx_desc_ring[bd_prod].parse_bd_e1x;
4015                memset(pbd_e1x, 0, sizeof(struct eth_tx_parse_bd_e1x));
4016                /* Set PBD in checksum offload case */
4017                if (xmit_type & XMIT_CSUM)
4018                        hlen = bnx2x_set_pbd_csum(bp, skb, pbd_e1x, xmit_type);
4019
4020                SET_FLAG(global_data,
4021                         ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE, mac_type);
4022                pbd_e1x->global_data |= cpu_to_le16(global_data);
4023        }
4024
4025        /* Setup the data pointer of the first BD of the packet */
4026        tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
4027        tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
4028        tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb));
4029        pkt_size = tx_start_bd->nbytes;
4030
4031        DP(NETIF_MSG_TX_QUEUED,
4032           "first bd @%p  addr (%x:%x)  nbytes %d  flags %x  vlan %x\n",
4033           tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo,
4034           le16_to_cpu(tx_start_bd->nbytes),
4035           tx_start_bd->bd_flags.as_bitfield,
4036           le16_to_cpu(tx_start_bd->vlan_or_ethertype));
4037
4038        if (xmit_type & XMIT_GSO) {
4039
4040                DP(NETIF_MSG_TX_QUEUED,
4041                   "TSO packet len %d  hlen %d  total len %d  tso size %d\n",
4042                   skb->len, hlen, skb_headlen(skb),
4043                   skb_shinfo(skb)->gso_size);
4044
4045                tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO;
4046
4047                if (unlikely(skb_headlen(skb) > hlen)) {
4048                        nbd++;
4049                        bd_prod = bnx2x_tx_split(bp, txdata, tx_buf,
4050                                                 &tx_start_bd, hlen,
4051                                                 bd_prod);
4052                }
4053                if (!CHIP_IS_E1x(bp))
4054                        pbd_e2_parsing_data |=
4055                                (skb_shinfo(skb)->gso_size <<
4056                                 ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT) &
4057                                 ETH_TX_PARSE_BD_E2_LSO_MSS;
4058                else
4059                        bnx2x_set_pbd_gso(skb, pbd_e1x, xmit_type);
4060        }
4061
4062        /* Set the PBD's parsing_data field if not zero
4063         * (for the chips newer than 57711).
4064         */
4065        if (pbd_e2_parsing_data)
4066                pbd_e2->parsing_data = cpu_to_le32(pbd_e2_parsing_data);
4067
4068        tx_data_bd = (struct eth_tx_bd *)tx_start_bd;
4069
4070        /* Handle fragmented skb */
4071        for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
4072                skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4073
4074                mapping = skb_frag_dma_map(&bp->pdev->dev, frag, 0,
4075                                           skb_frag_size(frag), DMA_TO_DEVICE);
4076                if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
4077                        unsigned int pkts_compl = 0, bytes_compl = 0;
4078
4079                        DP(NETIF_MSG_TX_QUEUED,
4080                           "Unable to map page - dropping packet...\n");
4081
4082                        /* we need unmap all buffers already mapped
4083                         * for this SKB;
4084                         * first_bd->nbd need to be properly updated
4085                         * before call to bnx2x_free_tx_pkt
4086                         */
4087                        first_bd->nbd = cpu_to_le16(nbd);
4088                        bnx2x_free_tx_pkt(bp, txdata,
4089                                          TX_BD(txdata->tx_pkt_prod),
4090                                          &pkts_compl, &bytes_compl);
4091                        return NETDEV_TX_OK;
4092                }
4093
4094                bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
4095                tx_data_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
4096                if (total_pkt_bd == NULL)
4097                        total_pkt_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
4098
4099                tx_data_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
4100                tx_data_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
4101                tx_data_bd->nbytes = cpu_to_le16(skb_frag_size(frag));
4102                le16_add_cpu(&pkt_size, skb_frag_size(frag));
4103                nbd++;
4104
4105                DP(NETIF_MSG_TX_QUEUED,
4106                   "frag %d  bd @%p  addr (%x:%x)  nbytes %d\n",
4107                   i, tx_data_bd, tx_data_bd->addr_hi, tx_data_bd->addr_lo,
4108                   le16_to_cpu(tx_data_bd->nbytes));
4109        }
4110
4111        DP(NETIF_MSG_TX_QUEUED, "last bd @%p\n", tx_data_bd);
4112
4113        /* update with actual num BDs */
4114        first_bd->nbd = cpu_to_le16(nbd);
4115
4116        bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
4117
4118        /* now send a tx doorbell, counting the next BD
4119         * if the packet contains or ends with it
4120         */
4121        if (TX_BD_POFF(bd_prod) < nbd)
4122                nbd++;
4123
4124        /* total_pkt_bytes should be set on the first data BD if
4125         * it's not an LSO packet and there is more than one
4126         * data BD. In this case pkt_size is limited by an MTU value.
4127         * However we prefer to set it for an LSO packet (while we don't
4128         * have to) in order to save some CPU cycles in a none-LSO
4129         * case, when we much more care about them.
4130         */
4131        if (total_pkt_bd != NULL)
4132                total_pkt_bd->total_pkt_bytes = pkt_size;
4133
4134        if (pbd_e1x)
4135                DP(NETIF_MSG_TX_QUEUED,
4136                   "PBD (E1X) @%p  ip_data %x  ip_hlen %u  ip_id %u  lso_mss %u  tcp_flags %x  xsum %x  seq %u  hlen %u\n",
4137                   pbd_e1x, pbd_e1x->global_data, pbd_e1x->ip_hlen_w,
4138                   pbd_e1x->ip_id, pbd_e1x->lso_mss, pbd_e1x->tcp_flags,
4139                   pbd_e1x->tcp_pseudo_csum, pbd_e1x->tcp_send_seq,
4140                    le16_to_cpu(pbd_e1x->total_hlen_w));
4141        if (pbd_e2)
4142                DP(NETIF_MSG_TX_QUEUED,
4143                   "PBD (E2) @%p  dst %x %x %x src %x %x %x parsing_data %x\n",
4144                   pbd_e2,
4145                   pbd_e2->data.mac_addr.dst_hi,
4146                   pbd_e2->data.mac_addr.dst_mid,
4147                   pbd_e2->data.mac_addr.dst_lo,
4148                   pbd_e2->data.mac_addr.src_hi,
4149                   pbd_e2->data.mac_addr.src_mid,
4150                   pbd_e2->data.mac_addr.src_lo,
4151                   pbd_e2->parsing_data);
4152        DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d  bd %u\n", nbd, bd_prod);
4153
4154        netdev_tx_sent_queue(txq, skb->len);
4155
4156        skb_tx_timestamp(skb);
4157
4158        txdata->tx_pkt_prod++;
4159        /*
4160         * Make sure that the BD data is updated before updating the producer
4161         * since FW might read the BD right after the producer is updated.
4162         * This is only applicable for weak-ordered memory model archs such
4163         * as IA-64. The following barrier is also mandatory since FW will
4164         * assumes packets must have BDs.
4165         */
4166        wmb();
4167
4168        txdata->tx_db.data.prod += nbd;
4169        /* make sure descriptor update is observed by HW */
4170        wmb();
4171
4172        DOORBELL_RELAXED(bp, txdata->cid, txdata->tx_db.raw);
4173
4174        txdata->tx_bd_prod += nbd;
4175
4176        if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_DESC_PER_TX_PKT)) {
4177                netif_tx_stop_queue(txq);
4178
4179                /* paired memory barrier is in bnx2x_tx_int(), we have to keep
4180                 * ordering of set_bit() in netif_tx_stop_queue() and read of
4181                 * fp->bd_tx_cons */
4182                smp_mb();
4183
4184                bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
4185                if (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT)
4186                        netif_tx_wake_queue(txq);
4187        }
4188        txdata->tx_pkt++;
4189
4190        return NETDEV_TX_OK;
4191}
4192
4193void bnx2x_get_c2s_mapping(struct bnx2x *bp, u8 *c2s_map, u8 *c2s_default)
4194{
4195        int mfw_vn = BP_FW_MB_IDX(bp);
4196        u32 tmp;
4197
4198        /* If the shmem shouldn't affect configuration, reflect */
4199        if (!IS_MF_BD(bp)) {
4200                int i;
4201
4202                for (i = 0; i < BNX2X_MAX_PRIORITY; i++)
4203                        c2s_map[i] = i;
4204                *c2s_default = 0;
4205
4206                return;
4207        }
4208
4209        tmp = SHMEM2_RD(bp, c2s_pcp_map_lower[mfw_vn]);
4210        tmp = (__force u32)be32_to_cpu((__force __be32)tmp);
4211        c2s_map[0] = tmp & 0xff;
4212        c2s_map[1] = (tmp >> 8) & 0xff;
4213        c2s_map[2] = (tmp >> 16) & 0xff;
4214        c2s_map[3] = (tmp >> 24) & 0xff;
4215
4216        tmp = SHMEM2_RD(bp, c2s_pcp_map_upper[mfw_vn]);
4217        tmp = (__force u32)be32_to_cpu((__force __be32)tmp);
4218        c2s_map[4] = tmp & 0xff;
4219        c2s_map[5] = (tmp >> 8) & 0xff;
4220        c2s_map[6] = (tmp >> 16) & 0xff;
4221        c2s_map[7] = (tmp >> 24) & 0xff;
4222
4223        tmp = SHMEM2_RD(bp, c2s_pcp_map_default[mfw_vn]);
4224        tmp = (__force u32)be32_to_cpu((__force __be32)tmp);
4225        *c2s_default = (tmp >> (8 * mfw_vn)) & 0xff;
4226}
4227
4228/**
4229 * bnx2x_setup_tc - routine to configure net_device for multi tc
4230 *
4231 * @netdev: net device to configure
4232 * @tc: number of traffic classes to enable
4233 *
4234 * callback connected to the ndo_setup_tc function pointer
4235 */
4236int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
4237{
4238        struct bnx2x *bp = netdev_priv(dev);
4239        u8 c2s_map[BNX2X_MAX_PRIORITY], c2s_def;
4240        int cos, prio, count, offset;
4241
4242        /* setup tc must be called under rtnl lock */
4243        ASSERT_RTNL();
4244
4245        /* no traffic classes requested. Aborting */
4246        if (!num_tc) {
4247                netdev_reset_tc(dev);
4248                return 0;
4249        }
4250
4251        /* requested to support too many traffic classes */
4252        if (num_tc > bp->max_cos) {
4253                BNX2X_ERR("support for too many traffic classes requested: %d. Max supported is %d\n",
4254                          num_tc, bp->max_cos);
4255                return -EINVAL;
4256        }
4257
4258        /* declare amount of supported traffic classes */
4259        if (netdev_set_num_tc(dev, num_tc)) {
4260                BNX2X_ERR("failed to declare %d traffic classes\n", num_tc);
4261                return -EINVAL;
4262        }
4263
4264        bnx2x_get_c2s_mapping(bp, c2s_map, &c2s_def);
4265
4266        /* configure priority to traffic class mapping */
4267        for (prio = 0; prio < BNX2X_MAX_PRIORITY; prio++) {
4268                int outer_prio = c2s_map[prio];
4269
4270                netdev_set_prio_tc_map(dev, prio, bp->prio_to_cos[outer_prio]);
4271                DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
4272                   "mapping priority %d to tc %d\n",
4273                   outer_prio, bp->prio_to_cos[outer_prio]);
4274        }
4275
4276        /* Use this configuration to differentiate tc0 from other COSes
4277           This can be used for ets or pfc, and save the effort of setting
4278           up a multio class queue disc or negotiating DCBX with a switch
4279        netdev_set_prio_tc_map(dev, 0, 0);
4280        DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", 0, 0);
4281        for (prio = 1; prio < 16; prio++) {
4282                netdev_set_prio_tc_map(dev, prio, 1);
4283                DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", prio, 1);
4284        } */
4285
4286        /* configure traffic class to transmission queue mapping */
4287        for (cos = 0; cos < bp->max_cos; cos++) {
4288                count = BNX2X_NUM_ETH_QUEUES(bp);
4289                offset = cos * BNX2X_NUM_NON_CNIC_QUEUES(bp);
4290                netdev_set_tc_queue(dev, cos, count, offset);
4291                DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
4292                   "mapping tc %d to offset %d count %d\n",
4293                   cos, offset, count);
4294        }
4295
4296        return 0;
4297}
4298
4299int __bnx2x_setup_tc(struct net_device *dev, enum tc_setup_type type,
4300                     void *type_data)
4301{
4302        struct tc_mqprio_qopt *mqprio = type_data;
4303
4304        if (type != TC_SETUP_QDISC_MQPRIO)
4305                return -EOPNOTSUPP;
4306
4307        mqprio->hw = TC_MQPRIO_HW_OFFLOAD_TCS;
4308
4309        return bnx2x_setup_tc(dev, mqprio->num_tc);
4310}
4311
4312/* called with rtnl_lock */
4313int bnx2x_change_mac_addr(struct net_device *dev, void *p)
4314{
4315        struct sockaddr *addr = p;
4316        struct bnx2x *bp = netdev_priv(dev);
4317        int rc = 0;
4318
4319        if (!is_valid_ether_addr(addr->sa_data)) {
4320                BNX2X_ERR("Requested MAC address is not valid\n");
4321                return -EINVAL;
4322        }
4323
4324        if (IS_MF_STORAGE_ONLY(bp)) {
4325                BNX2X_ERR("Can't change address on STORAGE ONLY function\n");
4326                return -EINVAL;
4327        }
4328
4329        if (netif_running(dev))  {
4330                rc = bnx2x_set_eth_mac(bp, false);
4331                if (rc)
4332                        return rc;
4333        }
4334
4335        memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
4336
4337        if (netif_running(dev))
4338                rc = bnx2x_set_eth_mac(bp, true);
4339
4340        if (IS_PF(bp) && SHMEM2_HAS(bp, curr_cfg))
4341                SHMEM2_WR(bp, curr_cfg, CURR_CFG_MET_OS);
4342
4343        return rc;
4344}
4345
4346static void bnx2x_free_fp_mem_at(struct bnx2x *bp, int fp_index)
4347{
4348        union host_hc_status_block *sb = &bnx2x_fp(bp, fp_index, status_blk);
4349        struct bnx2x_fastpath *fp = &bp->fp[fp_index];
4350        u8 cos;
4351
4352        /* Common */
4353
4354        if (IS_FCOE_IDX(fp_index)) {
4355                memset(sb, 0, sizeof(union host_hc_status_block));
4356                fp->status_blk_mapping = 0;
4357        } else {
4358                /* status blocks */
4359                if (!CHIP_IS_E1x(bp))
4360                        BNX2X_PCI_FREE(sb->e2_sb,
4361                                       bnx2x_fp(bp, fp_index,
4362                                                status_blk_mapping),
4363                                       sizeof(struct host_hc_status_block_e2));
4364                else
4365                        BNX2X_PCI_FREE(sb->e1x_sb,
4366                                       bnx2x_fp(bp, fp_index,
4367                                                status_blk_mapping),
4368                                       sizeof(struct host_hc_status_block_e1x));
4369        }
4370
4371        /* Rx */
4372        if (!skip_rx_queue(bp, fp_index)) {
4373                bnx2x_free_rx_bds(fp);
4374
4375                /* fastpath rx rings: rx_buf rx_desc rx_comp */
4376                BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_buf_ring));
4377                BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_desc_ring),
4378                               bnx2x_fp(bp, fp_index, rx_desc_mapping),
4379                               sizeof(struct eth_rx_bd) * NUM_RX_BD);
4380
4381                BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_comp_ring),
4382                               bnx2x_fp(bp, fp_index, rx_comp_mapping),
4383                               sizeof(struct eth_fast_path_rx_cqe) *
4384                               NUM_RCQ_BD);
4385
4386                /* SGE ring */
4387                BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_page_ring));
4388                BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_sge_ring),
4389                               bnx2x_fp(bp, fp_index, rx_sge_mapping),
4390                               BCM_PAGE_SIZE * NUM_RX_SGE_PAGES);
4391        }
4392
4393        /* Tx */
4394        if (!skip_tx_queue(bp, fp_index)) {
4395                /* fastpath tx rings: tx_buf tx_desc */
4396                for_each_cos_in_tx_queue(fp, cos) {
4397                        struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
4398
4399                        DP(NETIF_MSG_IFDOWN,
4400                           "freeing tx memory of fp %d cos %d cid %d\n",
4401                           fp_index, cos, txdata->cid);
4402
4403                        BNX2X_FREE(txdata->tx_buf_ring);
4404                        BNX2X_PCI_FREE(txdata->tx_desc_ring,
4405                                txdata->tx_desc_mapping,
4406                                sizeof(union eth_tx_bd_types) * NUM_TX_BD);
4407                }
4408        }
4409        /* end of fastpath */
4410}
4411
4412static void bnx2x_free_fp_mem_cnic(struct bnx2x *bp)
4413{
4414        int i;
4415        for_each_cnic_queue(bp, i)
4416                bnx2x_free_fp_mem_at(bp, i);
4417}
4418
4419void bnx2x_free_fp_mem(struct bnx2x *bp)
4420{
4421        int i;
4422        for_each_eth_queue(bp, i)
4423                bnx2x_free_fp_mem_at(bp, i);
4424}
4425
4426static void set_sb_shortcuts(struct bnx2x *bp, int index)
4427{
4428        union host_hc_status_block status_blk = bnx2x_fp(bp, index, status_blk);
4429        if (!CHIP_IS_E1x(bp)) {
4430                bnx2x_fp(bp, index, sb_index_values) =
4431                        (__le16 *)status_blk.e2_sb->sb.index_values;
4432                bnx2x_fp(bp, index, sb_running_index) =
4433                        (__le16 *)status_blk.e2_sb->sb.running_index;
4434        } else {
4435                bnx2x_fp(bp, index, sb_index_values) =
4436                        (__le16 *)status_blk.e1x_sb->sb.index_values;
4437                bnx2x_fp(bp, index, sb_running_index) =
4438                        (__le16 *)status_blk.e1x_sb->sb.running_index;
4439        }
4440}
4441
4442/* Returns the number of actually allocated BDs */
4443static int bnx2x_alloc_rx_bds(struct bnx2x_fastpath *fp,
4444                              int rx_ring_size)
4445{
4446        struct bnx2x *bp = fp->bp;
4447        u16 ring_prod, cqe_ring_prod;
4448        int i, failure_cnt = 0;
4449
4450        fp->rx_comp_cons = 0;
4451        cqe_ring_prod = ring_prod = 0;
4452
4453        /* This routine is called only during fo init so
4454         * fp->eth_q_stats.rx_skb_alloc_failed = 0
4455         */
4456        for (i = 0; i < rx_ring_size; i++) {
4457                if (bnx2x_alloc_rx_data(bp, fp, ring_prod, GFP_KERNEL) < 0) {
4458                        failure_cnt++;
4459                        continue;
4460                }
4461                ring_prod = NEXT_RX_IDX(ring_prod);
4462                cqe_ring_prod = NEXT_RCQ_IDX(cqe_ring_prod);
4463                WARN_ON(ring_prod <= (i - failure_cnt));
4464        }
4465
4466        if (failure_cnt)
4467                BNX2X_ERR("was only able to allocate %d rx skbs on queue[%d]\n",
4468                          i - failure_cnt, fp->index);
4469
4470        fp->rx_bd_prod = ring_prod;
4471        /* Limit the CQE producer by the CQE ring size */
4472        fp->rx_comp_prod = min_t(u16, NUM_RCQ_RINGS*RCQ_DESC_CNT,
4473                               cqe_ring_prod);
4474
4475        bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed += failure_cnt;
4476
4477        return i - failure_cnt;
4478}
4479
4480static void bnx2x_set_next_page_rx_cq(struct bnx2x_fastpath *fp)
4481{
4482        int i;
4483
4484        for (i = 1; i <= NUM_RCQ_RINGS; i++) {
4485                struct eth_rx_cqe_next_page *nextpg;
4486
4487                nextpg = (struct eth_rx_cqe_next_page *)
4488                        &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1];
4489                nextpg->addr_hi =
4490                        cpu_to_le32(U64_HI(fp->rx_comp_mapping +
4491                                   BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
4492                nextpg->addr_lo =
4493                        cpu_to_le32(U64_LO(fp->rx_comp_mapping +
4494                                   BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
4495        }
4496}
4497
4498static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
4499{
4500        union host_hc_status_block *sb;
4501        struct bnx2x_fastpath *fp = &bp->fp[index];
4502        int ring_size = 0;
4503        u8 cos;
4504        int rx_ring_size = 0;
4505
4506        if (!bp->rx_ring_size && IS_MF_STORAGE_ONLY(bp)) {
4507                rx_ring_size = MIN_RX_SIZE_NONTPA;
4508                bp->rx_ring_size = rx_ring_size;
4509        } else if (!bp->rx_ring_size) {
4510                rx_ring_size = MAX_RX_AVAIL/BNX2X_NUM_RX_QUEUES(bp);
4511
4512                if (CHIP_IS_E3(bp)) {
4513                        u32 cfg = SHMEM_RD(bp,
4514                                           dev_info.port_hw_config[BP_PORT(bp)].
4515                                           default_cfg);
4516
4517                        /* Decrease ring size for 1G functions */
4518                        if ((cfg & PORT_HW_CFG_NET_SERDES_IF_MASK) ==
4519                            PORT_HW_CFG_NET_SERDES_IF_SGMII)
4520                                rx_ring_size /= 10;
4521                }
4522
4523                /* allocate at least number of buffers required by FW */
4524                rx_ring_size = max_t(int, bp->disable_tpa ? MIN_RX_SIZE_NONTPA :
4525                                     MIN_RX_SIZE_TPA, rx_ring_size);
4526
4527                bp->rx_ring_size = rx_ring_size;
4528        } else /* if rx_ring_size specified - use it */
4529                rx_ring_size = bp->rx_ring_size;
4530
4531        DP(BNX2X_MSG_SP, "calculated rx_ring_size %d\n", rx_ring_size);
4532
4533        /* Common */
4534        sb = &bnx2x_fp(bp, index, status_blk);
4535
4536        if (!IS_FCOE_IDX(index)) {
4537                /* status blocks */
4538                if (!CHIP_IS_E1x(bp)) {
4539                        sb->e2_sb = BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, status_blk_mapping),
4540                                                    sizeof(struct host_hc_status_block_e2));
4541                        if (!sb->e2_sb)
4542                                goto alloc_mem_err;
4543                } else {
4544                        sb->e1x_sb = BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, status_blk_mapping),
4545                                                     sizeof(struct host_hc_status_block_e1x));
4546                        if (!sb->e1x_sb)
4547                                goto alloc_mem_err;
4548                }
4549        }
4550
4551        /* FCoE Queue uses Default SB and doesn't ACK the SB, thus no need to
4552         * set shortcuts for it.
4553         */
4554        if (!IS_FCOE_IDX(index))
4555                set_sb_shortcuts(bp, index);
4556
4557        /* Tx */
4558        if (!skip_tx_queue(bp, index)) {
4559                /* fastpath tx rings: tx_buf tx_desc */
4560                for_each_cos_in_tx_queue(fp, cos) {
4561                        struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
4562
4563                        DP(NETIF_MSG_IFUP,
4564                           "allocating tx memory of fp %d cos %d\n",
4565                           index, cos);
4566
4567                        txdata->tx_buf_ring = kcalloc(NUM_TX_BD,
4568                                                      sizeof(struct sw_tx_bd),
4569                                                      GFP_KERNEL);
4570                        if (!txdata->tx_buf_ring)
4571                                goto alloc_mem_err;
4572                        txdata->tx_desc_ring = BNX2X_PCI_ALLOC(&txdata->tx_desc_mapping,
4573                                                               sizeof(union eth_tx_bd_types) * NUM_TX_BD);
4574                        if (!txdata->tx_desc_ring)
4575                                goto alloc_mem_err;
4576                }
4577        }
4578
4579        /* Rx */
4580        if (!skip_rx_queue(bp, index)) {
4581                /* fastpath rx rings: rx_buf rx_desc rx_comp */
4582                bnx2x_fp(bp, index, rx_buf_ring) =
4583                        kcalloc(NUM_RX_BD, sizeof(struct sw_rx_bd), GFP_KERNEL);
4584                if (!bnx2x_fp(bp, index, rx_buf_ring))
4585                        goto alloc_mem_err;
4586                bnx2x_fp(bp, index, rx_desc_ring) =
4587                        BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, rx_desc_mapping),
4588                                        sizeof(struct eth_rx_bd) * NUM_RX_BD);
4589                if (!bnx2x_fp(bp, index, rx_desc_ring))
4590                        goto alloc_mem_err;
4591
4592                /* Seed all CQEs by 1s */
4593                bnx2x_fp(bp, index, rx_comp_ring) =
4594                        BNX2X_PCI_FALLOC(&bnx2x_fp(bp, index, rx_comp_mapping),
4595                                         sizeof(struct eth_fast_path_rx_cqe) * NUM_RCQ_BD);
4596                if (!bnx2x_fp(bp, index, rx_comp_ring))
4597                        goto alloc_mem_err;
4598
4599                /* SGE ring */
4600                bnx2x_fp(bp, index, rx_page_ring) =
4601                        kcalloc(NUM_RX_SGE, sizeof(struct sw_rx_page),
4602                                GFP_KERNEL);
4603                if (!bnx2x_fp(bp, index, rx_page_ring))
4604                        goto alloc_mem_err;
4605                bnx2x_fp(bp, index, rx_sge_ring) =
4606                        BNX2X_PCI_ALLOC(&bnx2x_fp(bp, index, rx_sge_mapping),
4607                                        BCM_PAGE_SIZE * NUM_RX_SGE_PAGES);
4608                if (!bnx2x_fp(bp, index, rx_sge_ring))
4609                        goto alloc_mem_err;
4610                /* RX BD ring */
4611                bnx2x_set_next_page_rx_bd(fp);
4612
4613                /* CQ ring */
4614                bnx2x_set_next_page_rx_cq(fp);
4615
4616                /* BDs */
4617                ring_size = bnx2x_alloc_rx_bds(fp, rx_ring_size);
4618                if (ring_size < rx_ring_size)
4619                        goto alloc_mem_err;
4620        }
4621
4622        return 0;
4623
4624/* handles low memory cases */
4625alloc_mem_err:
4626        BNX2X_ERR("Unable to allocate full memory for queue %d (size %d)\n",
4627                                                index, ring_size);
4628        /* FW will drop all packets if queue is not big enough,
4629         * In these cases we disable the queue
4630         * Min size is different for OOO, TPA and non-TPA queues
4631         */
4632        if (ring_size < (fp->mode == TPA_MODE_DISABLED ?
4633                                MIN_RX_SIZE_NONTPA : MIN_RX_SIZE_TPA)) {
4634                        /* release memory allocated for this queue */
4635                        bnx2x_free_fp_mem_at(bp, index);
4636                        return -ENOMEM;
4637        }
4638        return 0;
4639}
4640
4641static int bnx2x_alloc_fp_mem_cnic(struct bnx2x *bp)
4642{
4643        if (!NO_FCOE(bp))
4644                /* FCoE */
4645                if (bnx2x_alloc_fp_mem_at(bp, FCOE_IDX(bp)))
4646                        /* we will fail load process instead of mark
4647                         * NO_FCOE_FLAG
4648                         */
4649                        return -ENOMEM;
4650
4651        return 0;
4652}
4653
4654static int bnx2x_alloc_fp_mem(struct bnx2x *bp)
4655{
4656        int i;
4657
4658        /* 1. Allocate FP for leading - fatal if error
4659         * 2. Allocate RSS - fix number of queues if error
4660         */
4661
4662        /* leading */
4663        if (bnx2x_alloc_fp_mem_at(bp, 0))
4664                return -ENOMEM;
4665
4666        /* RSS */
4667        for_each_nondefault_eth_queue(bp, i)
4668                if (bnx2x_alloc_fp_mem_at(bp, i))
4669                        break;
4670
4671        /* handle memory failures */
4672        if (i != BNX2X_NUM_ETH_QUEUES(bp)) {
4673                int delta = BNX2X_NUM_ETH_QUEUES(bp) - i;
4674
4675                WARN_ON(delta < 0);
4676                bnx2x_shrink_eth_fp(bp, delta);
4677                if (CNIC_SUPPORT(bp))
4678                        /* move non eth FPs next to last eth FP
4679                         * must be done in that order
4680                         * FCOE_IDX < FWD_IDX < OOO_IDX
4681                         */
4682
4683                        /* move FCoE fp even NO_FCOE_FLAG is on */
4684                        bnx2x_move_fp(bp, FCOE_IDX(bp), FCOE_IDX(bp) - delta);
4685                bp->num_ethernet_queues -= delta;
4686                bp->num_queues = bp->num_ethernet_queues +
4687                                 bp->num_cnic_queues;
4688                BNX2X_ERR("Adjusted num of queues from %d to %d\n",
4689                          bp->num_queues + delta, bp->num_queues);
4690        }
4691
4692        return 0;
4693}
4694
4695void bnx2x_free_mem_bp(struct bnx2x *bp)
4696{
4697        int i;
4698
4699        for (i = 0; i < bp->fp_array_size; i++)
4700                kfree(bp->fp[i].tpa_info);
4701        kfree(bp->fp);
4702        kfree(bp->sp_objs);
4703        kfree(bp->fp_stats);
4704        kfree(bp->bnx2x_txq);
4705        kfree(bp->msix_table);
4706        kfree(bp->ilt);
4707}
4708
4709int bnx2x_alloc_mem_bp(struct bnx2x *bp)
4710{
4711        struct bnx2x_fastpath *fp;
4712        struct msix_entry *tbl;
4713        struct bnx2x_ilt *ilt;
4714        int msix_table_size = 0;
4715        int fp_array_size, txq_array_size;
4716        int i;
4717
4718        /*
4719         * The biggest MSI-X table we might need is as a maximum number of fast
4720         * path IGU SBs plus default SB (for PF only).
4721         */
4722        msix_table_size = bp->igu_sb_cnt;
4723        if (IS_PF(bp))
4724                msix_table_size++;
4725        BNX2X_DEV_INFO("msix_table_size %d\n", msix_table_size);
4726
4727        /* fp array: RSS plus CNIC related L2 queues */
4728        fp_array_size = BNX2X_MAX_RSS_COUNT(bp) + CNIC_SUPPORT(bp);
4729        bp->fp_array_size = fp_array_size;
4730        BNX2X_DEV_INFO("fp_array_size %d\n", bp->fp_array_size);
4731
4732        fp = kcalloc(bp->fp_array_size, sizeof(*fp), GFP_KERNEL);
4733        if (!fp)
4734                goto alloc_err;
4735        for (i = 0; i < bp->fp_array_size; i++) {
4736                fp[i].tpa_info =
4737                        kcalloc(ETH_MAX_AGGREGATION_QUEUES_E1H_E2,
4738                                sizeof(struct bnx2x_agg_info), GFP_KERNEL);
4739                if (!(fp[i].tpa_info))
4740                        goto alloc_err;
4741        }
4742
4743        bp->fp = fp;
4744
4745        /* allocate sp objs */
4746        bp->sp_objs = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_sp_objs),
4747                              GFP_KERNEL);
4748        if (!bp->sp_objs)
4749                goto alloc_err;
4750
4751        /* allocate fp_stats */
4752        bp->fp_stats = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_fp_stats),
4753                               GFP_KERNEL);
4754        if (!bp->fp_stats)
4755                goto alloc_err;
4756
4757        /* Allocate memory for the transmission queues array */
4758        txq_array_size =
4759                BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS + CNIC_SUPPORT(bp);
4760        BNX2X_DEV_INFO("txq_array_size %d", txq_array_size);
4761
4762        bp->bnx2x_txq = kcalloc(txq_array_size, sizeof(struct bnx2x_fp_txdata),
4763                                GFP_KERNEL);
4764        if (!bp->bnx2x_txq)
4765                goto alloc_err;
4766
4767        /* msix table */
4768        tbl = kcalloc(msix_table_size, sizeof(*tbl), GFP_KERNEL);
4769        if (!tbl)
4770                goto alloc_err;
4771        bp->msix_table = tbl;
4772
4773        /* ilt */
4774        ilt = kzalloc(sizeof(*ilt), GFP_KERNEL);
4775        if (!ilt)
4776                goto alloc_err;
4777        bp->ilt = ilt;
4778
4779        return 0;
4780alloc_err:
4781        bnx2x_free_mem_bp(bp);
4782        return -ENOMEM;
4783}
4784
4785int bnx2x_reload_if_running(struct net_device *dev)
4786{
4787        struct bnx2x *bp = netdev_priv(dev);
4788
4789        if (unlikely(!netif_running(dev)))
4790                return 0;
4791
4792        bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
4793        return bnx2x_nic_load(bp, LOAD_NORMAL);
4794}
4795
4796int bnx2x_get_cur_phy_idx(struct bnx2x *bp)
4797{
4798        u32 sel_phy_idx = 0;
4799        if (bp->link_params.num_phys <= 1)
4800                return INT_PHY;
4801
4802        if (bp->link_vars.link_up) {
4803                sel_phy_idx = EXT_PHY1;
4804                /* In case link is SERDES, check if the EXT_PHY2 is the one */
4805                if ((bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) &&
4806                    (bp->link_params.phy[EXT_PHY2].supported & SUPPORTED_FIBRE))
4807                        sel_phy_idx = EXT_PHY2;
4808        } else {
4809
4810                switch (bnx2x_phy_selection(&bp->link_params)) {
4811                case PORT_HW_CFG_PHY_SELECTION_HARDWARE_DEFAULT:
4812                case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY:
4813                case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY_PRIORITY:
4814                       sel_phy_idx = EXT_PHY1;
4815                       break;
4816                case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY:
4817                case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY_PRIORITY:
4818                       sel_phy_idx = EXT_PHY2;
4819                       break;
4820                }
4821        }
4822
4823        return sel_phy_idx;
4824}
4825int bnx2x_get_link_cfg_idx(struct bnx2x *bp)
4826{
4827        u32 sel_phy_idx = bnx2x_get_cur_phy_idx(bp);
4828        /*
4829         * The selected activated PHY is always after swapping (in case PHY
4830         * swapping is enabled). So when swapping is enabled, we need to reverse
4831         * the configuration
4832         */
4833
4834        if (bp->link_params.multi_phy_config &
4835            PORT_HW_CFG_PHY_SWAPPED_ENABLED) {
4836                if (sel_phy_idx == EXT_PHY1)
4837                        sel_phy_idx = EXT_PHY2;
4838                else if (sel_phy_idx == EXT_PHY2)
4839                        sel_phy_idx = EXT_PHY1;
4840        }
4841        return LINK_CONFIG_IDX(sel_phy_idx);
4842}
4843
4844#ifdef NETDEV_FCOE_WWNN
4845int bnx2x_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
4846{
4847        struct bnx2x *bp = netdev_priv(dev);
4848        struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
4849
4850        switch (type) {
4851        case NETDEV_FCOE_WWNN:
4852                *wwn = HILO_U64(cp->fcoe_wwn_node_name_hi,
4853                                cp->fcoe_wwn_node_name_lo);
4854                break;
4855        case NETDEV_FCOE_WWPN:
4856                *wwn = HILO_U64(cp->fcoe_wwn_port_name_hi,
4857                                cp->fcoe_wwn_port_name_lo);
4858                break;
4859        default:
4860                BNX2X_ERR("Wrong WWN type requested - %d\n", type);
4861                return -EINVAL;
4862        }
4863
4864        return 0;
4865}
4866#endif
4867
4868/* called with rtnl_lock */
4869int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
4870{
4871        struct bnx2x *bp = netdev_priv(dev);
4872
4873        if (pci_num_vf(bp->pdev)) {
4874                DP(BNX2X_MSG_IOV, "VFs are enabled, can not change MTU\n");
4875                return -EPERM;
4876        }
4877
4878        if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
4879                BNX2X_ERR("Can't perform change MTU during parity recovery\n");
4880                return -EAGAIN;
4881        }
4882
4883        /* This does not race with packet allocation
4884         * because the actual alloc size is
4885         * only updated as part of load
4886         */
4887        dev->mtu = new_mtu;
4888
4889        if (!bnx2x_mtu_allows_gro(new_mtu))
4890                dev->features &= ~NETIF_F_GRO_HW;
4891
4892        if (IS_PF(bp) && SHMEM2_HAS(bp, curr_cfg))
4893                SHMEM2_WR(bp, curr_cfg, CURR_CFG_MET_OS);
4894
4895        return bnx2x_reload_if_running(dev);
4896}
4897
4898netdev_features_t bnx2x_fix_features(struct net_device *dev,
4899                                     netdev_features_t features)
4900{
4901        struct bnx2x *bp = netdev_priv(dev);
4902
4903        if (pci_num_vf(bp->pdev)) {
4904                netdev_features_t changed = dev->features ^ features;
4905
4906                /* Revert the requested changes in features if they
4907                 * would require internal reload of PF in bnx2x_set_features().
4908                 */
4909                if (!(features & NETIF_F_RXCSUM) && !bp->disable_tpa) {
4910                        features &= ~NETIF_F_RXCSUM;
4911                        features |= dev->features & NETIF_F_RXCSUM;
4912                }
4913
4914                if (changed & NETIF_F_LOOPBACK) {
4915                        features &= ~NETIF_F_LOOPBACK;
4916                        features |= dev->features & NETIF_F_LOOPBACK;
4917                }
4918        }
4919
4920        /* TPA requires Rx CSUM offloading */
4921        if (!(features & NETIF_F_RXCSUM))
4922                features &= ~NETIF_F_LRO;
4923
4924        if (!(features & NETIF_F_GRO) || !bnx2x_mtu_allows_gro(dev->mtu))
4925                features &= ~NETIF_F_GRO_HW;
4926        if (features & NETIF_F_GRO_HW)
4927                features &= ~NETIF_F_LRO;
4928
4929        return features;
4930}
4931
4932int bnx2x_set_features(struct net_device *dev, netdev_features_t features)
4933{
4934        struct bnx2x *bp = netdev_priv(dev);
4935        netdev_features_t changes = features ^ dev->features;
4936        bool bnx2x_reload = false;
4937        int rc;
4938
4939        /* VFs or non SRIOV PFs should be able to change loopback feature */
4940        if (!pci_num_vf(bp->pdev)) {
4941                if (features & NETIF_F_LOOPBACK) {
4942                        if (bp->link_params.loopback_mode != LOOPBACK_BMAC) {
4943                                bp->link_params.loopback_mode = LOOPBACK_BMAC;
4944                                bnx2x_reload = true;
4945                        }
4946                } else {
4947                        if (bp->link_params.loopback_mode != LOOPBACK_NONE) {
4948                                bp->link_params.loopback_mode = LOOPBACK_NONE;
4949                                bnx2x_reload = true;
4950                        }
4951                }
4952        }
4953
4954        /* Don't care about GRO changes */
4955        changes &= ~NETIF_F_GRO;
4956
4957        if (changes)
4958                bnx2x_reload = true;
4959
4960        if (bnx2x_reload) {
4961                if (bp->recovery_state == BNX2X_RECOVERY_DONE) {
4962                        dev->features = features;
4963                        rc = bnx2x_reload_if_running(dev);
4964                        return rc ? rc : 1;
4965                }
4966                /* else: bnx2x_nic_load() will be called at end of recovery */
4967        }
4968
4969        return 0;
4970}
4971
4972void bnx2x_tx_timeout(struct net_device *dev)
4973{
4974        struct bnx2x *bp = netdev_priv(dev);
4975
4976        /* We want the information of the dump logged,
4977         * but calling bnx2x_panic() would kill all chances of recovery.
4978         */
4979        if (!bp->panic)
4980#ifndef BNX2X_STOP_ON_ERROR
4981                bnx2x_panic_dump(bp, false);
4982#else
4983                bnx2x_panic();
4984#endif
4985
4986        /* This allows the netif to be shutdown gracefully before resetting */
4987        bnx2x_schedule_sp_rtnl(bp, BNX2X_SP_RTNL_TX_TIMEOUT, 0);
4988}
4989
4990int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state)
4991{
4992        struct net_device *dev = pci_get_drvdata(pdev);
4993        struct bnx2x *bp;
4994
4995        if (!dev) {
4996                dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
4997                return -ENODEV;
4998        }
4999        bp = netdev_priv(dev);
5000
5001        rtnl_lock();
5002
5003        pci_save_state(pdev);
5004
5005        if (!netif_running(dev)) {
5006                rtnl_unlock();
5007                return 0;
5008        }
5009
5010        netif_device_detach(dev);
5011
5012        bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
5013
5014        bnx2x_set_power_state(bp, pci_choose_state(pdev, state));
5015
5016        rtnl_unlock();
5017
5018        return 0;
5019}
5020
5021int bnx2x_resume(struct pci_dev *pdev)
5022{
5023        struct net_device *dev = pci_get_drvdata(pdev);
5024        struct bnx2x *bp;
5025        int rc;
5026
5027        if (!dev) {
5028                dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
5029                return -ENODEV;
5030        }
5031        bp = netdev_priv(dev);
5032
5033        if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
5034                BNX2X_ERR("Handling parity error recovery. Try again later\n");
5035                return -EAGAIN;
5036        }
5037
5038        rtnl_lock();
5039
5040        pci_restore_state(pdev);
5041
5042        if (!netif_running(dev)) {
5043                rtnl_unlock();
5044                return 0;
5045        }
5046
5047        bnx2x_set_power_state(bp, PCI_D0);
5048        netif_device_attach(dev);
5049
5050        rc = bnx2x_nic_load(bp, LOAD_OPEN);
5051
5052        rtnl_unlock();
5053
5054        return rc;
5055}
5056
5057void bnx2x_set_ctx_validation(struct bnx2x *bp, struct eth_context *cxt,
5058                              u32 cid)
5059{
5060        if (!cxt) {
5061                BNX2X_ERR("bad context pointer %p\n", cxt);
5062                return;
5063        }
5064
5065        /* ustorm cxt validation */
5066        cxt->ustorm_ag_context.cdu_usage =
5067                CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid),
5068                        CDU_REGION_NUMBER_UCM_AG, ETH_CONNECTION_TYPE);
5069        /* xcontext validation */
5070        cxt->xstorm_ag_context.cdu_reserved =
5071                CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid),
5072                        CDU_REGION_NUMBER_XCM_AG, ETH_CONNECTION_TYPE);
5073}
5074
5075static void storm_memset_hc_timeout(struct bnx2x *bp, u8 port,
5076                                    u8 fw_sb_id, u8 sb_index,
5077                                    u8 ticks)
5078{
5079        u32 addr = BAR_CSTRORM_INTMEM +
5080                   CSTORM_STATUS_BLOCK_DATA_TIMEOUT_OFFSET(fw_sb_id, sb_index);
5081        REG_WR8(bp, addr, ticks);
5082        DP(NETIF_MSG_IFUP,
5083           "port %x fw_sb_id %d sb_index %d ticks %d\n",
5084           port, fw_sb_id, sb_index, ticks);
5085}
5086
5087static void storm_memset_hc_disable(struct bnx2x *bp, u8 port,
5088                                    u16 fw_sb_id, u8 sb_index,
5089                                    u8 disable)
5090{
5091        u32 enable_flag = disable ? 0 : (1 << HC_INDEX_DATA_HC_ENABLED_SHIFT);
5092        u32 addr = BAR_CSTRORM_INTMEM +
5093                   CSTORM_STATUS_BLOCK_DATA_FLAGS_OFFSET(fw_sb_id, sb_index);
5094        u8 flags = REG_RD8(bp, addr);
5095        /* clear and set */
5096        flags &= ~HC_INDEX_DATA_HC_ENABLED;
5097        flags |= enable_flag;
5098        REG_WR8(bp, addr, flags);
5099        DP(NETIF_MSG_IFUP,
5100           "port %x fw_sb_id %d sb_index %d disable %d\n",
5101           port, fw_sb_id, sb_index, disable);
5102}
5103
5104void bnx2x_update_coalesce_sb_index(struct bnx2x *bp, u8 fw_sb_id,
5105                                    u8 sb_index, u8 disable, u16 usec)
5106{
5107        int port = BP_PORT(bp);
5108        u8 ticks = usec / BNX2X_BTR;
5109
5110        storm_memset_hc_timeout(bp, port, fw_sb_id, sb_index, ticks);
5111
5112        disable = disable ? 1 : (usec ? 0 : 1);
5113        storm_memset_hc_disable(bp, port, fw_sb_id, sb_index, disable);
5114}
5115
5116void bnx2x_schedule_sp_rtnl(struct bnx2x *bp, enum sp_rtnl_flag flag,
5117                            u32 verbose)
5118{
5119        smp_mb__before_atomic();
5120        set_bit(flag, &bp->sp_rtnl_state);
5121        smp_mb__after_atomic();
5122        DP((BNX2X_MSG_SP | verbose), "Scheduling sp_rtnl task [Flag: %d]\n",
5123           flag);
5124        schedule_delayed_work(&bp->sp_rtnl_task, 0);
5125}
5126