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