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