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