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