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