brintos

brintos / linux-shallow public Read only

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