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