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