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