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