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