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