1 /* bnx2x_cmn.c: Broadcom Everest network driver.
3 * Copyright (c) 2007-2013 Broadcom Corporation
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation.
9 * Maintained by: Eilon Greenstein <eilong@broadcom.com>
10 * Written by: Eliezer Tamir
11 * Based on code from Michael Chan's bnx2 driver
12 * UDP CSUM errata workaround by Arik Gendelman
13 * Slowpath and fastpath rework by Vladislav Zolotarov
14 * Statistics and Link management by Yitchak Gertner
18 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
20 #include <linux/etherdevice.h>
21 #include <linux/if_vlan.h>
22 #include <linux/interrupt.h>
26 #include <net/ip6_checksum.h>
27 #include <linux/prefetch.h>
28 #include "bnx2x_cmn.h"
29 #include "bnx2x_init.h"
33 * bnx2x_move_fp - move content of the fastpath structure.
36 * @from: source FP index
37 * @to: destination FP index
39 * Makes sure the contents of the bp->fp[to].napi is kept
40 * intact. This is done by first copying the napi struct from
41 * the target to the source, and then mem copying the entire
42 * source onto the target. Update txdata pointers and related
45 static inline void bnx2x_move_fp(struct bnx2x *bp, int from, int to)
47 struct bnx2x_fastpath *from_fp = &bp->fp[from];
48 struct bnx2x_fastpath *to_fp = &bp->fp[to];
49 struct bnx2x_sp_objs *from_sp_objs = &bp->sp_objs[from];
50 struct bnx2x_sp_objs *to_sp_objs = &bp->sp_objs[to];
51 struct bnx2x_fp_stats *from_fp_stats = &bp->fp_stats[from];
52 struct bnx2x_fp_stats *to_fp_stats = &bp->fp_stats[to];
53 int old_max_eth_txqs, new_max_eth_txqs;
54 int old_txdata_index = 0, new_txdata_index = 0;
56 /* Copy the NAPI object as it has been already initialized */
57 from_fp->napi = to_fp->napi;
59 /* Move bnx2x_fastpath contents */
60 memcpy(to_fp, from_fp, sizeof(*to_fp));
63 /* move sp_objs contents as well, as their indices match fp ones */
64 memcpy(to_sp_objs, from_sp_objs, sizeof(*to_sp_objs));
66 /* move fp_stats contents as well, as their indices match fp ones */
67 memcpy(to_fp_stats, from_fp_stats, sizeof(*to_fp_stats));
69 /* Update txdata pointers in fp and move txdata content accordingly:
70 * Each fp consumes 'max_cos' txdata structures, so the index should be
71 * decremented by max_cos x delta.
74 old_max_eth_txqs = BNX2X_NUM_ETH_QUEUES(bp) * (bp)->max_cos;
75 new_max_eth_txqs = (BNX2X_NUM_ETH_QUEUES(bp) - from + to) *
77 if (from == FCOE_IDX(bp)) {
78 old_txdata_index = old_max_eth_txqs + FCOE_TXQ_IDX_OFFSET;
79 new_txdata_index = new_max_eth_txqs + FCOE_TXQ_IDX_OFFSET;
82 memcpy(&bp->bnx2x_txq[new_txdata_index],
83 &bp->bnx2x_txq[old_txdata_index],
84 sizeof(struct bnx2x_fp_txdata));
85 to_fp->txdata_ptr[0] = &bp->bnx2x_txq[new_txdata_index];
89 * bnx2x_fill_fw_str - Fill buffer with FW version string.
92 * @buf: character buffer to fill with the fw name
93 * @buf_len: length of the above buffer
96 void bnx2x_fill_fw_str(struct bnx2x *bp, char *buf, size_t buf_len)
99 u8 phy_fw_ver[PHY_FW_VER_LEN];
101 phy_fw_ver[0] = '\0';
102 bnx2x_get_ext_phy_fw_version(&bp->link_params,
103 phy_fw_ver, PHY_FW_VER_LEN);
104 strlcpy(buf, bp->fw_ver, buf_len);
105 snprintf(buf + strlen(bp->fw_ver), 32 - strlen(bp->fw_ver),
107 (bp->common.bc_ver & 0xff0000) >> 16,
108 (bp->common.bc_ver & 0xff00) >> 8,
109 (bp->common.bc_ver & 0xff),
110 ((phy_fw_ver[0] != '\0') ? " phy " : ""), phy_fw_ver);
112 bnx2x_vf_fill_fw_str(bp, buf, buf_len);
117 * bnx2x_shrink_eth_fp - guarantees fastpath structures stay intact
120 * @delta: number of eth queues which were not allocated
122 static void bnx2x_shrink_eth_fp(struct bnx2x *bp, int delta)
124 int i, cos, old_eth_num = BNX2X_NUM_ETH_QUEUES(bp);
126 /* Queue pointer cannot be re-set on an fp-basis, as moving pointer
127 * backward along the array could cause memory to be overriden
129 for (cos = 1; cos < bp->max_cos; cos++) {
130 for (i = 0; i < old_eth_num - delta; i++) {
131 struct bnx2x_fastpath *fp = &bp->fp[i];
132 int new_idx = cos * (old_eth_num - delta) + i;
134 memcpy(&bp->bnx2x_txq[new_idx], fp->txdata_ptr[cos],
135 sizeof(struct bnx2x_fp_txdata));
136 fp->txdata_ptr[cos] = &bp->bnx2x_txq[new_idx];
141 int load_count[2][3] = { {0} }; /* per-path: 0-common, 1-port0, 2-port1 */
143 /* free skb in the packet ring at pos idx
144 * return idx of last bd freed
146 static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata,
147 u16 idx, unsigned int *pkts_compl,
148 unsigned int *bytes_compl)
150 struct sw_tx_bd *tx_buf = &txdata->tx_buf_ring[idx];
151 struct eth_tx_start_bd *tx_start_bd;
152 struct eth_tx_bd *tx_data_bd;
153 struct sk_buff *skb = tx_buf->skb;
154 u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons;
156 u16 split_bd_len = 0;
158 /* prefetch skb end pointer to speedup dev_kfree_skb() */
161 DP(NETIF_MSG_TX_DONE, "fp[%d]: pkt_idx %d buff @(%p)->skb %p\n",
162 txdata->txq_index, idx, tx_buf, skb);
164 tx_start_bd = &txdata->tx_desc_ring[bd_idx].start_bd;
167 nbd = le16_to_cpu(tx_start_bd->nbd) - 1;
168 #ifdef BNX2X_STOP_ON_ERROR
169 if ((nbd - 1) > (MAX_SKB_FRAGS + 2)) {
170 BNX2X_ERR("BAD nbd!\n");
174 new_cons = nbd + tx_buf->first_bd;
176 /* Get the next bd */
177 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
179 /* Skip a parse bd... */
181 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
183 /* TSO headers+data bds share a common mapping. See bnx2x_tx_split() */
184 if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) {
185 tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd;
186 split_bd_len = BD_UNMAP_LEN(tx_data_bd);
188 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
192 dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd),
193 BD_UNMAP_LEN(tx_start_bd) + split_bd_len,
199 tx_data_bd = &txdata->tx_desc_ring[bd_idx].reg_bd;
200 dma_unmap_page(&bp->pdev->dev, BD_UNMAP_ADDR(tx_data_bd),
201 BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE);
203 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
210 (*bytes_compl) += skb->len;
213 dev_kfree_skb_any(skb);
214 tx_buf->first_bd = 0;
220 int bnx2x_tx_int(struct bnx2x *bp, struct bnx2x_fp_txdata *txdata)
222 struct netdev_queue *txq;
223 u16 hw_cons, sw_cons, bd_cons = txdata->tx_bd_cons;
224 unsigned int pkts_compl = 0, bytes_compl = 0;
226 #ifdef BNX2X_STOP_ON_ERROR
227 if (unlikely(bp->panic))
231 txq = netdev_get_tx_queue(bp->dev, txdata->txq_index);
232 hw_cons = le16_to_cpu(*txdata->tx_cons_sb);
233 sw_cons = txdata->tx_pkt_cons;
235 while (sw_cons != hw_cons) {
238 pkt_cons = TX_BD(sw_cons);
240 DP(NETIF_MSG_TX_DONE,
241 "queue[%d]: hw_cons %u sw_cons %u pkt_cons %u\n",
242 txdata->txq_index, hw_cons, sw_cons, pkt_cons);
244 bd_cons = bnx2x_free_tx_pkt(bp, txdata, pkt_cons,
245 &pkts_compl, &bytes_compl);
250 netdev_tx_completed_queue(txq, pkts_compl, bytes_compl);
252 txdata->tx_pkt_cons = sw_cons;
253 txdata->tx_bd_cons = bd_cons;
255 /* Need to make the tx_bd_cons update visible to start_xmit()
256 * before checking for netif_tx_queue_stopped(). Without the
257 * memory barrier, there is a small possibility that
258 * start_xmit() will miss it and cause the queue to be stopped
260 * On the other hand we need an rmb() here to ensure the proper
261 * ordering of bit testing in the following
262 * netif_tx_queue_stopped(txq) call.
266 if (unlikely(netif_tx_queue_stopped(txq))) {
267 /* Taking tx_lock() is needed to prevent reenabling the queue
268 * while it's empty. This could have happen if rx_action() gets
269 * suspended in bnx2x_tx_int() after the condition before
270 * netif_tx_wake_queue(), while tx_action (bnx2x_start_xmit()):
272 * stops the queue->sees fresh tx_bd_cons->releases the queue->
273 * sends some packets consuming the whole queue again->
277 __netif_tx_lock(txq, smp_processor_id());
279 if ((netif_tx_queue_stopped(txq)) &&
280 (bp->state == BNX2X_STATE_OPEN) &&
281 (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT))
282 netif_tx_wake_queue(txq);
284 __netif_tx_unlock(txq);
289 static inline void bnx2x_update_last_max_sge(struct bnx2x_fastpath *fp,
292 u16 last_max = fp->last_max_sge;
294 if (SUB_S16(idx, last_max) > 0)
295 fp->last_max_sge = idx;
298 static inline void bnx2x_update_sge_prod(struct bnx2x_fastpath *fp,
300 struct eth_end_agg_rx_cqe *cqe)
302 struct bnx2x *bp = fp->bp;
303 u16 last_max, last_elem, first_elem;
310 /* First mark all used pages */
311 for (i = 0; i < sge_len; i++)
312 BIT_VEC64_CLEAR_BIT(fp->sge_mask,
313 RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[i])));
315 DP(NETIF_MSG_RX_STATUS, "fp_cqe->sgl[%d] = %d\n",
316 sge_len - 1, le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1]));
318 /* Here we assume that the last SGE index is the biggest */
319 prefetch((void *)(fp->sge_mask));
320 bnx2x_update_last_max_sge(fp,
321 le16_to_cpu(cqe->sgl_or_raw_data.sgl[sge_len - 1]));
323 last_max = RX_SGE(fp->last_max_sge);
324 last_elem = last_max >> BIT_VEC64_ELEM_SHIFT;
325 first_elem = RX_SGE(fp->rx_sge_prod) >> BIT_VEC64_ELEM_SHIFT;
327 /* If ring is not full */
328 if (last_elem + 1 != first_elem)
331 /* Now update the prod */
332 for (i = first_elem; i != last_elem; i = NEXT_SGE_MASK_ELEM(i)) {
333 if (likely(fp->sge_mask[i]))
336 fp->sge_mask[i] = BIT_VEC64_ELEM_ONE_MASK;
337 delta += BIT_VEC64_ELEM_SZ;
341 fp->rx_sge_prod += delta;
342 /* clear page-end entries */
343 bnx2x_clear_sge_mask_next_elems(fp);
346 DP(NETIF_MSG_RX_STATUS,
347 "fp->last_max_sge = %d fp->rx_sge_prod = %d\n",
348 fp->last_max_sge, fp->rx_sge_prod);
351 /* Get Toeplitz hash value in the skb using the value from the
352 * CQE (calculated by HW).
354 static u32 bnx2x_get_rxhash(const struct bnx2x *bp,
355 const struct eth_fast_path_rx_cqe *cqe,
358 /* Get Toeplitz hash from CQE */
359 if ((bp->dev->features & NETIF_F_RXHASH) &&
360 (cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG)) {
361 enum eth_rss_hash_type htype;
363 htype = cqe->status_flags & ETH_FAST_PATH_RX_CQE_RSS_HASH_TYPE;
364 *l4_rxhash = (htype == TCP_IPV4_HASH_TYPE) ||
365 (htype == TCP_IPV6_HASH_TYPE);
366 return le32_to_cpu(cqe->rss_hash_result);
372 static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue,
374 struct eth_fast_path_rx_cqe *cqe)
376 struct bnx2x *bp = fp->bp;
377 struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons];
378 struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod];
379 struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod];
381 struct bnx2x_agg_info *tpa_info = &fp->tpa_info[queue];
382 struct sw_rx_bd *first_buf = &tpa_info->first_buf;
384 /* print error if current state != stop */
385 if (tpa_info->tpa_state != BNX2X_TPA_STOP)
386 BNX2X_ERR("start of bin not in stop [%d]\n", queue);
388 /* Try to map an empty data buffer from the aggregation info */
389 mapping = dma_map_single(&bp->pdev->dev,
390 first_buf->data + NET_SKB_PAD,
391 fp->rx_buf_size, DMA_FROM_DEVICE);
393 * ...if it fails - move the skb from the consumer to the producer
394 * and set the current aggregation state as ERROR to drop it
395 * when TPA_STOP arrives.
398 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
399 /* Move the BD from the consumer to the producer */
400 bnx2x_reuse_rx_data(fp, cons, prod);
401 tpa_info->tpa_state = BNX2X_TPA_ERROR;
405 /* move empty data from pool to prod */
406 prod_rx_buf->data = first_buf->data;
407 dma_unmap_addr_set(prod_rx_buf, mapping, mapping);
408 /* point prod_bd to new data */
409 prod_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
410 prod_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
412 /* move partial skb from cons to pool (don't unmap yet) */
413 *first_buf = *cons_rx_buf;
415 /* mark bin state as START */
416 tpa_info->parsing_flags =
417 le16_to_cpu(cqe->pars_flags.flags);
418 tpa_info->vlan_tag = le16_to_cpu(cqe->vlan_tag);
419 tpa_info->tpa_state = BNX2X_TPA_START;
420 tpa_info->len_on_bd = le16_to_cpu(cqe->len_on_bd);
421 tpa_info->placement_offset = cqe->placement_offset;
422 tpa_info->rxhash = bnx2x_get_rxhash(bp, cqe, &tpa_info->l4_rxhash);
423 if (fp->mode == TPA_MODE_GRO) {
424 u16 gro_size = le16_to_cpu(cqe->pkt_len_or_gro_seg_len);
425 tpa_info->full_page = SGE_PAGES / gro_size * gro_size;
426 tpa_info->gro_size = gro_size;
429 #ifdef BNX2X_STOP_ON_ERROR
430 fp->tpa_queue_used |= (1 << queue);
431 #ifdef _ASM_GENERIC_INT_L64_H
432 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%lx\n",
434 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n",
440 /* Timestamp option length allowed for TPA aggregation:
442 * nop nop kind length echo val
444 #define TPA_TSTAMP_OPT_LEN 12
446 * bnx2x_set_gro_params - compute GRO values
449 * @parsing_flags: parsing flags from the START CQE
450 * @len_on_bd: total length of the first packet for the
452 * @pkt_len: length of all segments
454 * Approximate value of the MSS for this aggregation calculated using
455 * the first packet of it.
456 * Compute number of aggregated segments, and gso_type.
458 static void bnx2x_set_gro_params(struct sk_buff *skb, u16 parsing_flags,
459 u16 len_on_bd, unsigned int pkt_len,
460 u16 num_of_coalesced_segs)
462 /* TPA aggregation won't have either IP options or TCP options
463 * other than timestamp or IPv6 extension headers.
465 u16 hdrs_len = ETH_HLEN + sizeof(struct tcphdr);
467 if (GET_FLAG(parsing_flags, PARSING_FLAGS_OVER_ETHERNET_PROTOCOL) ==
468 PRS_FLAG_OVERETH_IPV6) {
469 hdrs_len += sizeof(struct ipv6hdr);
470 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV6;
472 hdrs_len += sizeof(struct iphdr);
473 skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4;
476 /* Check if there was a TCP timestamp, if there is it's will
477 * always be 12 bytes length: nop nop kind length echo val.
479 * Otherwise FW would close the aggregation.
481 if (parsing_flags & PARSING_FLAGS_TIME_STAMP_EXIST_FLAG)
482 hdrs_len += TPA_TSTAMP_OPT_LEN;
484 skb_shinfo(skb)->gso_size = len_on_bd - hdrs_len;
486 /* tcp_gro_complete() will copy NAPI_GRO_CB(skb)->count
487 * to skb_shinfo(skb)->gso_segs
489 NAPI_GRO_CB(skb)->count = num_of_coalesced_segs;
492 static int bnx2x_alloc_rx_sge(struct bnx2x *bp,
493 struct bnx2x_fastpath *fp, u16 index)
495 struct page *page = alloc_pages(GFP_ATOMIC, PAGES_PER_SGE_SHIFT);
496 struct sw_rx_page *sw_buf = &fp->rx_page_ring[index];
497 struct eth_rx_sge *sge = &fp->rx_sge_ring[index];
500 if (unlikely(page == NULL)) {
501 BNX2X_ERR("Can't alloc sge\n");
505 mapping = dma_map_page(&bp->pdev->dev, page, 0,
506 SGE_PAGES, DMA_FROM_DEVICE);
507 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
508 __free_pages(page, PAGES_PER_SGE_SHIFT);
509 BNX2X_ERR("Can't map sge\n");
514 dma_unmap_addr_set(sw_buf, mapping, mapping);
516 sge->addr_hi = cpu_to_le32(U64_HI(mapping));
517 sge->addr_lo = cpu_to_le32(U64_LO(mapping));
522 static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
523 struct bnx2x_agg_info *tpa_info,
526 struct eth_end_agg_rx_cqe *cqe,
529 struct sw_rx_page *rx_pg, old_rx_pg;
530 u32 i, frag_len, frag_size;
531 int err, j, frag_id = 0;
532 u16 len_on_bd = tpa_info->len_on_bd;
533 u16 full_page = 0, gro_size = 0;
535 frag_size = le16_to_cpu(cqe->pkt_len) - len_on_bd;
537 if (fp->mode == TPA_MODE_GRO) {
538 gro_size = tpa_info->gro_size;
539 full_page = tpa_info->full_page;
542 /* This is needed in order to enable forwarding support */
544 bnx2x_set_gro_params(skb, tpa_info->parsing_flags, len_on_bd,
545 le16_to_cpu(cqe->pkt_len),
546 le16_to_cpu(cqe->num_of_coalesced_segs));
548 #ifdef BNX2X_STOP_ON_ERROR
549 if (pages > min_t(u32, 8, MAX_SKB_FRAGS) * SGE_PAGES) {
550 BNX2X_ERR("SGL length is too long: %d. CQE index is %d\n",
552 BNX2X_ERR("cqe->pkt_len = %d\n", cqe->pkt_len);
558 /* Run through the SGL and compose the fragmented skb */
559 for (i = 0, j = 0; i < pages; i += PAGES_PER_SGE, j++) {
560 u16 sge_idx = RX_SGE(le16_to_cpu(cqe->sgl_or_raw_data.sgl[j]));
562 /* FW gives the indices of the SGE as if the ring is an array
563 (meaning that "next" element will consume 2 indices) */
564 if (fp->mode == TPA_MODE_GRO)
565 frag_len = min_t(u32, frag_size, (u32)full_page);
567 frag_len = min_t(u32, frag_size, (u32)SGE_PAGES);
569 rx_pg = &fp->rx_page_ring[sge_idx];
572 /* If we fail to allocate a substitute page, we simply stop
573 where we are and drop the whole packet */
574 err = bnx2x_alloc_rx_sge(bp, fp, sge_idx);
576 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
580 /* Unmap the page as we r going to pass it to the stack */
581 dma_unmap_page(&bp->pdev->dev,
582 dma_unmap_addr(&old_rx_pg, mapping),
583 SGE_PAGES, DMA_FROM_DEVICE);
584 /* Add one frag and update the appropriate fields in the skb */
585 if (fp->mode == TPA_MODE_LRO)
586 skb_fill_page_desc(skb, j, old_rx_pg.page, 0, frag_len);
590 for (rem = frag_len; rem > 0; rem -= gro_size) {
591 int len = rem > gro_size ? gro_size : rem;
592 skb_fill_page_desc(skb, frag_id++,
593 old_rx_pg.page, offset, len);
595 get_page(old_rx_pg.page);
600 skb->data_len += frag_len;
601 skb->truesize += SGE_PAGES;
602 skb->len += frag_len;
604 frag_size -= frag_len;
610 static void bnx2x_frag_free(const struct bnx2x_fastpath *fp, void *data)
612 if (fp->rx_frag_size)
613 put_page(virt_to_head_page(data));
618 static void *bnx2x_frag_alloc(const struct bnx2x_fastpath *fp)
620 if (fp->rx_frag_size)
621 return netdev_alloc_frag(fp->rx_frag_size);
623 return kmalloc(fp->rx_buf_size + NET_SKB_PAD, GFP_ATOMIC);
627 static void bnx2x_gro_ip_csum(struct bnx2x *bp, struct sk_buff *skb)
629 const struct iphdr *iph = ip_hdr(skb);
632 skb_set_transport_header(skb, sizeof(struct iphdr));
635 th->check = ~tcp_v4_check(skb->len - skb_transport_offset(skb),
636 iph->saddr, iph->daddr, 0);
639 static void bnx2x_gro_ipv6_csum(struct bnx2x *bp, struct sk_buff *skb)
641 struct ipv6hdr *iph = ipv6_hdr(skb);
644 skb_set_transport_header(skb, sizeof(struct ipv6hdr));
647 th->check = ~tcp_v6_check(skb->len - skb_transport_offset(skb),
648 &iph->saddr, &iph->daddr, 0);
651 static void bnx2x_gro_csum(struct bnx2x *bp, struct sk_buff *skb,
652 void (*gro_func)(struct bnx2x*, struct sk_buff*))
654 skb_set_network_header(skb, 0);
656 tcp_gro_complete(skb);
660 static void bnx2x_gro_receive(struct bnx2x *bp, struct bnx2x_fastpath *fp,
664 if (skb_shinfo(skb)->gso_size) {
665 switch (be16_to_cpu(skb->protocol)) {
667 bnx2x_gro_csum(bp, skb, bnx2x_gro_ip_csum);
670 bnx2x_gro_csum(bp, skb, bnx2x_gro_ipv6_csum);
673 BNX2X_ERR("Error: FW GRO supports only IPv4/IPv6, not 0x%04x\n",
674 be16_to_cpu(skb->protocol));
678 skb_record_rx_queue(skb, fp->rx_queue);
679 napi_gro_receive(&fp->napi, skb);
682 static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
683 struct bnx2x_agg_info *tpa_info,
685 struct eth_end_agg_rx_cqe *cqe,
688 struct sw_rx_bd *rx_buf = &tpa_info->first_buf;
689 u8 pad = tpa_info->placement_offset;
690 u16 len = tpa_info->len_on_bd;
691 struct sk_buff *skb = NULL;
692 u8 *new_data, *data = rx_buf->data;
693 u8 old_tpa_state = tpa_info->tpa_state;
695 tpa_info->tpa_state = BNX2X_TPA_STOP;
697 /* If we there was an error during the handling of the TPA_START -
698 * drop this aggregation.
700 if (old_tpa_state == BNX2X_TPA_ERROR)
703 /* Try to allocate the new data */
704 new_data = bnx2x_frag_alloc(fp);
705 /* Unmap skb in the pool anyway, as we are going to change
706 pool entry status to BNX2X_TPA_STOP even if new skb allocation
708 dma_unmap_single(&bp->pdev->dev, dma_unmap_addr(rx_buf, mapping),
709 fp->rx_buf_size, DMA_FROM_DEVICE);
710 if (likely(new_data))
711 skb = build_skb(data, fp->rx_frag_size);
714 #ifdef BNX2X_STOP_ON_ERROR
715 if (pad + len > fp->rx_buf_size) {
716 BNX2X_ERR("skb_put is about to fail... pad %d len %d rx_buf_size %d\n",
717 pad, len, fp->rx_buf_size);
723 skb_reserve(skb, pad + NET_SKB_PAD);
725 skb->rxhash = tpa_info->rxhash;
726 skb->l4_rxhash = tpa_info->l4_rxhash;
728 skb->protocol = eth_type_trans(skb, bp->dev);
729 skb->ip_summed = CHECKSUM_UNNECESSARY;
731 if (!bnx2x_fill_frag_skb(bp, fp, tpa_info, pages,
732 skb, cqe, cqe_idx)) {
733 if (tpa_info->parsing_flags & PARSING_FLAGS_VLAN)
734 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), tpa_info->vlan_tag);
735 bnx2x_gro_receive(bp, fp, skb);
737 DP(NETIF_MSG_RX_STATUS,
738 "Failed to allocate new pages - dropping packet!\n");
739 dev_kfree_skb_any(skb);
743 /* put new data in bin */
744 rx_buf->data = new_data;
749 bnx2x_frag_free(fp, new_data);
751 /* drop the packet and keep the buffer in the bin */
752 DP(NETIF_MSG_RX_STATUS,
753 "Failed to allocate or map a new skb - dropping packet!\n");
754 bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed++;
757 static int bnx2x_alloc_rx_data(struct bnx2x *bp,
758 struct bnx2x_fastpath *fp, u16 index)
761 struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[index];
762 struct eth_rx_bd *rx_bd = &fp->rx_desc_ring[index];
765 data = bnx2x_frag_alloc(fp);
766 if (unlikely(data == NULL))
769 mapping = dma_map_single(&bp->pdev->dev, data + NET_SKB_PAD,
772 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
773 bnx2x_frag_free(fp, data);
774 BNX2X_ERR("Can't map rx data\n");
779 dma_unmap_addr_set(rx_buf, mapping, mapping);
781 rx_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
782 rx_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
788 void bnx2x_csum_validate(struct sk_buff *skb, union eth_rx_cqe *cqe,
789 struct bnx2x_fastpath *fp,
790 struct bnx2x_eth_q_stats *qstats)
792 /* Do nothing if no L4 csum validation was done.
793 * We do not check whether IP csum was validated. For IPv4 we assume
794 * that if the card got as far as validating the L4 csum, it also
795 * validated the IP csum. IPv6 has no IP csum.
797 if (cqe->fast_path_cqe.status_flags &
798 ETH_FAST_PATH_RX_CQE_L4_XSUM_NO_VALIDATION_FLG)
801 /* If L4 validation was done, check if an error was found. */
803 if (cqe->fast_path_cqe.type_error_flags &
804 (ETH_FAST_PATH_RX_CQE_IP_BAD_XSUM_FLG |
805 ETH_FAST_PATH_RX_CQE_L4_BAD_XSUM_FLG))
806 qstats->hw_csum_err++;
808 skb->ip_summed = CHECKSUM_UNNECESSARY;
811 int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
813 struct bnx2x *bp = fp->bp;
814 u16 bd_cons, bd_prod, bd_prod_fw, comp_ring_cons;
815 u16 hw_comp_cons, sw_comp_cons, sw_comp_prod;
818 #ifdef BNX2X_STOP_ON_ERROR
819 if (unlikely(bp->panic))
823 /* CQ "next element" is of the size of the regular element,
824 that's why it's ok here */
825 hw_comp_cons = le16_to_cpu(*fp->rx_cons_sb);
826 if ((hw_comp_cons & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT)
829 bd_cons = fp->rx_bd_cons;
830 bd_prod = fp->rx_bd_prod;
831 bd_prod_fw = bd_prod;
832 sw_comp_cons = fp->rx_comp_cons;
833 sw_comp_prod = fp->rx_comp_prod;
835 /* Memory barrier necessary as speculative reads of the rx
836 * buffer can be ahead of the index in the status block
840 DP(NETIF_MSG_RX_STATUS,
841 "queue[%d]: hw_comp_cons %u sw_comp_cons %u\n",
842 fp->index, hw_comp_cons, sw_comp_cons);
844 while (sw_comp_cons != hw_comp_cons) {
845 struct sw_rx_bd *rx_buf = NULL;
847 union eth_rx_cqe *cqe;
848 struct eth_fast_path_rx_cqe *cqe_fp;
850 enum eth_rx_cqe_type cqe_fp_type;
855 #ifdef BNX2X_STOP_ON_ERROR
856 if (unlikely(bp->panic))
860 comp_ring_cons = RCQ_BD(sw_comp_cons);
861 bd_prod = RX_BD(bd_prod);
862 bd_cons = RX_BD(bd_cons);
864 cqe = &fp->rx_comp_ring[comp_ring_cons];
865 cqe_fp = &cqe->fast_path_cqe;
866 cqe_fp_flags = cqe_fp->type_error_flags;
867 cqe_fp_type = cqe_fp_flags & ETH_FAST_PATH_RX_CQE_TYPE;
869 DP(NETIF_MSG_RX_STATUS,
870 "CQE type %x err %x status %x queue %x vlan %x len %u\n",
871 CQE_TYPE(cqe_fp_flags),
872 cqe_fp_flags, cqe_fp->status_flags,
873 le32_to_cpu(cqe_fp->rss_hash_result),
874 le16_to_cpu(cqe_fp->vlan_tag),
875 le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len));
877 /* is this a slowpath msg? */
878 if (unlikely(CQE_TYPE_SLOW(cqe_fp_type))) {
879 bnx2x_sp_event(fp, cqe);
883 rx_buf = &fp->rx_buf_ring[bd_cons];
886 if (!CQE_TYPE_FAST(cqe_fp_type)) {
887 struct bnx2x_agg_info *tpa_info;
888 u16 frag_size, pages;
889 #ifdef BNX2X_STOP_ON_ERROR
891 if (fp->disable_tpa &&
892 (CQE_TYPE_START(cqe_fp_type) ||
893 CQE_TYPE_STOP(cqe_fp_type)))
894 BNX2X_ERR("START/STOP packet while disable_tpa type %x\n",
895 CQE_TYPE(cqe_fp_type));
898 if (CQE_TYPE_START(cqe_fp_type)) {
899 u16 queue = cqe_fp->queue_index;
900 DP(NETIF_MSG_RX_STATUS,
901 "calling tpa_start on queue %d\n",
904 bnx2x_tpa_start(fp, queue,
911 queue = cqe->end_agg_cqe.queue_index;
912 tpa_info = &fp->tpa_info[queue];
913 DP(NETIF_MSG_RX_STATUS,
914 "calling tpa_stop on queue %d\n",
917 frag_size = le16_to_cpu(cqe->end_agg_cqe.pkt_len) -
920 if (fp->mode == TPA_MODE_GRO)
921 pages = (frag_size + tpa_info->full_page - 1) /
924 pages = SGE_PAGE_ALIGN(frag_size) >>
927 bnx2x_tpa_stop(bp, fp, tpa_info, pages,
928 &cqe->end_agg_cqe, comp_ring_cons);
929 #ifdef BNX2X_STOP_ON_ERROR
934 bnx2x_update_sge_prod(fp, pages, &cqe->end_agg_cqe);
938 len = le16_to_cpu(cqe_fp->pkt_len_or_gro_seg_len);
939 pad = cqe_fp->placement_offset;
940 dma_sync_single_for_cpu(&bp->pdev->dev,
941 dma_unmap_addr(rx_buf, mapping),
942 pad + RX_COPY_THRESH,
945 prefetch(data + pad); /* speedup eth_type_trans() */
946 /* is this an error packet? */
947 if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
948 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
949 "ERROR flags %x rx packet %u\n",
950 cqe_fp_flags, sw_comp_cons);
951 bnx2x_fp_qstats(bp, fp)->rx_err_discard_pkt++;
955 /* Since we don't have a jumbo ring
956 * copy small packets if mtu > 1500
958 if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) &&
959 (len <= RX_COPY_THRESH)) {
960 skb = netdev_alloc_skb_ip_align(bp->dev, len);
962 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
963 "ERROR packet dropped because of alloc failure\n");
964 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
967 memcpy(skb->data, data + pad, len);
968 bnx2x_reuse_rx_data(fp, bd_cons, bd_prod);
970 if (likely(bnx2x_alloc_rx_data(bp, fp, bd_prod) == 0)) {
971 dma_unmap_single(&bp->pdev->dev,
972 dma_unmap_addr(rx_buf, mapping),
975 skb = build_skb(data, fp->rx_frag_size);
976 if (unlikely(!skb)) {
977 bnx2x_frag_free(fp, data);
978 bnx2x_fp_qstats(bp, fp)->
979 rx_skb_alloc_failed++;
982 skb_reserve(skb, pad);
984 DP(NETIF_MSG_RX_ERR | NETIF_MSG_RX_STATUS,
985 "ERROR packet dropped because of alloc failure\n");
986 bnx2x_fp_qstats(bp, fp)->rx_skb_alloc_failed++;
988 bnx2x_reuse_rx_data(fp, bd_cons, bd_prod);
994 skb->protocol = eth_type_trans(skb, bp->dev);
996 /* Set Toeplitz hash for a none-LRO skb */
997 skb->rxhash = bnx2x_get_rxhash(bp, cqe_fp, &l4_rxhash);
998 skb->l4_rxhash = l4_rxhash;
1000 skb_checksum_none_assert(skb);
1002 if (bp->dev->features & NETIF_F_RXCSUM)
1003 bnx2x_csum_validate(skb, cqe, fp,
1004 bnx2x_fp_qstats(bp, fp));
1006 skb_record_rx_queue(skb, fp->rx_queue);
1008 if (le16_to_cpu(cqe_fp->pars_flags.flags) &
1010 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
1011 le16_to_cpu(cqe_fp->vlan_tag));
1012 napi_gro_receive(&fp->napi, skb);
1016 rx_buf->data = NULL;
1018 bd_cons = NEXT_RX_IDX(bd_cons);
1019 bd_prod = NEXT_RX_IDX(bd_prod);
1020 bd_prod_fw = NEXT_RX_IDX(bd_prod_fw);
1023 sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod);
1024 sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons);
1026 if (rx_pkt == budget)
1030 fp->rx_bd_cons = bd_cons;
1031 fp->rx_bd_prod = bd_prod_fw;
1032 fp->rx_comp_cons = sw_comp_cons;
1033 fp->rx_comp_prod = sw_comp_prod;
1035 /* Update producers */
1036 bnx2x_update_rx_prod(bp, fp, bd_prod_fw, sw_comp_prod,
1039 fp->rx_pkt += rx_pkt;
1045 static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie)
1047 struct bnx2x_fastpath *fp = fp_cookie;
1048 struct bnx2x *bp = fp->bp;
1052 "got an MSI-X interrupt on IDX:SB [fp %d fw_sd %d igusb %d]\n",
1053 fp->index, fp->fw_sb_id, fp->igu_sb_id);
1055 bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID, 0, IGU_INT_DISABLE, 0);
1057 #ifdef BNX2X_STOP_ON_ERROR
1058 if (unlikely(bp->panic))
1062 /* Handle Rx and Tx according to MSI-X vector */
1063 prefetch(fp->rx_cons_sb);
1065 for_each_cos_in_tx_queue(fp, cos)
1066 prefetch(fp->txdata_ptr[cos]->tx_cons_sb);
1068 prefetch(&fp->sb_running_index[SM_RX_ID]);
1069 napi_schedule(&bnx2x_fp(bp, fp->index, napi));
1074 /* HW Lock for shared dual port PHYs */
1075 void bnx2x_acquire_phy_lock(struct bnx2x *bp)
1077 mutex_lock(&bp->port.phy_mutex);
1079 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
1082 void bnx2x_release_phy_lock(struct bnx2x *bp)
1084 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
1086 mutex_unlock(&bp->port.phy_mutex);
1089 /* calculates MF speed according to current linespeed and MF configuration */
1090 u16 bnx2x_get_mf_speed(struct bnx2x *bp)
1092 u16 line_speed = bp->link_vars.line_speed;
1094 u16 maxCfg = bnx2x_extract_max_cfg(bp,
1095 bp->mf_config[BP_VN(bp)]);
1097 /* Calculate the current MAX line speed limit for the MF
1101 line_speed = (line_speed * maxCfg) / 100;
1102 else { /* SD mode */
1103 u16 vn_max_rate = maxCfg * 100;
1105 if (vn_max_rate < line_speed)
1106 line_speed = vn_max_rate;
1114 * bnx2x_fill_report_data - fill link report data to report
1116 * @bp: driver handle
1117 * @data: link state to update
1119 * It uses a none-atomic bit operations because is called under the mutex.
1121 static void bnx2x_fill_report_data(struct bnx2x *bp,
1122 struct bnx2x_link_report_data *data)
1124 u16 line_speed = bnx2x_get_mf_speed(bp);
1126 memset(data, 0, sizeof(*data));
1128 /* Fill the report data: efective line speed */
1129 data->line_speed = line_speed;
1132 if (!bp->link_vars.link_up || (bp->flags & MF_FUNC_DIS))
1133 __set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1134 &data->link_report_flags);
1137 if (bp->link_vars.duplex == DUPLEX_FULL)
1138 __set_bit(BNX2X_LINK_REPORT_FD, &data->link_report_flags);
1140 /* Rx Flow Control is ON */
1141 if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_RX)
1142 __set_bit(BNX2X_LINK_REPORT_RX_FC_ON, &data->link_report_flags);
1144 /* Tx Flow Control is ON */
1145 if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_TX)
1146 __set_bit(BNX2X_LINK_REPORT_TX_FC_ON, &data->link_report_flags);
1150 * bnx2x_link_report - report link status to OS.
1152 * @bp: driver handle
1154 * Calls the __bnx2x_link_report() under the same locking scheme
1155 * as a link/PHY state managing code to ensure a consistent link
1159 void bnx2x_link_report(struct bnx2x *bp)
1161 bnx2x_acquire_phy_lock(bp);
1162 __bnx2x_link_report(bp);
1163 bnx2x_release_phy_lock(bp);
1167 * __bnx2x_link_report - report link status to OS.
1169 * @bp: driver handle
1171 * None atomic inmlementation.
1172 * Should be called under the phy_lock.
1174 void __bnx2x_link_report(struct bnx2x *bp)
1176 struct bnx2x_link_report_data cur_data;
1179 if (IS_PF(bp) && !CHIP_IS_E1(bp))
1180 bnx2x_read_mf_cfg(bp);
1182 /* Read the current link report info */
1183 bnx2x_fill_report_data(bp, &cur_data);
1185 /* Don't report link down or exactly the same link status twice */
1186 if (!memcmp(&cur_data, &bp->last_reported_link, sizeof(cur_data)) ||
1187 (test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1188 &bp->last_reported_link.link_report_flags) &&
1189 test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1190 &cur_data.link_report_flags)))
1195 /* We are going to report a new link parameters now -
1196 * remember the current data for the next time.
1198 memcpy(&bp->last_reported_link, &cur_data, sizeof(cur_data));
1200 if (test_bit(BNX2X_LINK_REPORT_LINK_DOWN,
1201 &cur_data.link_report_flags)) {
1202 netif_carrier_off(bp->dev);
1203 netdev_err(bp->dev, "NIC Link is Down\n");
1209 netif_carrier_on(bp->dev);
1211 if (test_and_clear_bit(BNX2X_LINK_REPORT_FD,
1212 &cur_data.link_report_flags))
1217 /* Handle the FC at the end so that only these flags would be
1218 * possibly set. This way we may easily check if there is no FC
1221 if (cur_data.link_report_flags) {
1222 if (test_bit(BNX2X_LINK_REPORT_RX_FC_ON,
1223 &cur_data.link_report_flags)) {
1224 if (test_bit(BNX2X_LINK_REPORT_TX_FC_ON,
1225 &cur_data.link_report_flags))
1226 flow = "ON - receive & transmit";
1228 flow = "ON - receive";
1230 flow = "ON - transmit";
1235 netdev_info(bp->dev, "NIC Link is Up, %d Mbps %s duplex, Flow control: %s\n",
1236 cur_data.line_speed, duplex, flow);
1240 static void bnx2x_set_next_page_sgl(struct bnx2x_fastpath *fp)
1244 for (i = 1; i <= NUM_RX_SGE_PAGES; i++) {
1245 struct eth_rx_sge *sge;
1247 sge = &fp->rx_sge_ring[RX_SGE_CNT * i - 2];
1249 cpu_to_le32(U64_HI(fp->rx_sge_mapping +
1250 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
1253 cpu_to_le32(U64_LO(fp->rx_sge_mapping +
1254 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
1258 static void bnx2x_free_tpa_pool(struct bnx2x *bp,
1259 struct bnx2x_fastpath *fp, int last)
1263 for (i = 0; i < last; i++) {
1264 struct bnx2x_agg_info *tpa_info = &fp->tpa_info[i];
1265 struct sw_rx_bd *first_buf = &tpa_info->first_buf;
1266 u8 *data = first_buf->data;
1269 DP(NETIF_MSG_IFDOWN, "tpa bin %d empty on free\n", i);
1272 if (tpa_info->tpa_state == BNX2X_TPA_START)
1273 dma_unmap_single(&bp->pdev->dev,
1274 dma_unmap_addr(first_buf, mapping),
1275 fp->rx_buf_size, DMA_FROM_DEVICE);
1276 bnx2x_frag_free(fp, data);
1277 first_buf->data = NULL;
1281 void bnx2x_init_rx_rings_cnic(struct bnx2x *bp)
1285 for_each_rx_queue_cnic(bp, j) {
1286 struct bnx2x_fastpath *fp = &bp->fp[j];
1290 /* Activate BD ring */
1292 * this will generate an interrupt (to the TSTORM)
1293 * must only be done after chip is initialized
1295 bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod,
1300 void bnx2x_init_rx_rings(struct bnx2x *bp)
1302 int func = BP_FUNC(bp);
1306 /* Allocate TPA resources */
1307 for_each_eth_queue(bp, j) {
1308 struct bnx2x_fastpath *fp = &bp->fp[j];
1311 "mtu %d rx_buf_size %d\n", bp->dev->mtu, fp->rx_buf_size);
1313 if (!fp->disable_tpa) {
1314 /* Fill the per-aggregtion pool */
1315 for (i = 0; i < MAX_AGG_QS(bp); i++) {
1316 struct bnx2x_agg_info *tpa_info =
1318 struct sw_rx_bd *first_buf =
1319 &tpa_info->first_buf;
1321 first_buf->data = bnx2x_frag_alloc(fp);
1322 if (!first_buf->data) {
1323 BNX2X_ERR("Failed to allocate TPA skb pool for queue[%d] - disabling TPA on this queue!\n",
1325 bnx2x_free_tpa_pool(bp, fp, i);
1326 fp->disable_tpa = 1;
1329 dma_unmap_addr_set(first_buf, mapping, 0);
1330 tpa_info->tpa_state = BNX2X_TPA_STOP;
1333 /* "next page" elements initialization */
1334 bnx2x_set_next_page_sgl(fp);
1336 /* set SGEs bit mask */
1337 bnx2x_init_sge_ring_bit_mask(fp);
1339 /* Allocate SGEs and initialize the ring elements */
1340 for (i = 0, ring_prod = 0;
1341 i < MAX_RX_SGE_CNT*NUM_RX_SGE_PAGES; i++) {
1343 if (bnx2x_alloc_rx_sge(bp, fp, ring_prod) < 0) {
1344 BNX2X_ERR("was only able to allocate %d rx sges\n",
1346 BNX2X_ERR("disabling TPA for queue[%d]\n",
1348 /* Cleanup already allocated elements */
1349 bnx2x_free_rx_sge_range(bp, fp,
1351 bnx2x_free_tpa_pool(bp, fp,
1353 fp->disable_tpa = 1;
1357 ring_prod = NEXT_SGE_IDX(ring_prod);
1360 fp->rx_sge_prod = ring_prod;
1364 for_each_eth_queue(bp, j) {
1365 struct bnx2x_fastpath *fp = &bp->fp[j];
1369 /* Activate BD ring */
1371 * this will generate an interrupt (to the TSTORM)
1372 * must only be done after chip is initialized
1374 bnx2x_update_rx_prod(bp, fp, fp->rx_bd_prod, fp->rx_comp_prod,
1380 if (CHIP_IS_E1(bp)) {
1381 REG_WR(bp, BAR_USTRORM_INTMEM +
1382 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func),
1383 U64_LO(fp->rx_comp_mapping));
1384 REG_WR(bp, BAR_USTRORM_INTMEM +
1385 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4,
1386 U64_HI(fp->rx_comp_mapping));
1391 static void bnx2x_free_tx_skbs_queue(struct bnx2x_fastpath *fp)
1394 struct bnx2x *bp = fp->bp;
1396 for_each_cos_in_tx_queue(fp, cos) {
1397 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
1398 unsigned pkts_compl = 0, bytes_compl = 0;
1400 u16 sw_prod = txdata->tx_pkt_prod;
1401 u16 sw_cons = txdata->tx_pkt_cons;
1403 while (sw_cons != sw_prod) {
1404 bnx2x_free_tx_pkt(bp, txdata, TX_BD(sw_cons),
1405 &pkts_compl, &bytes_compl);
1409 netdev_tx_reset_queue(
1410 netdev_get_tx_queue(bp->dev,
1411 txdata->txq_index));
1415 static void bnx2x_free_tx_skbs_cnic(struct bnx2x *bp)
1419 for_each_tx_queue_cnic(bp, i) {
1420 bnx2x_free_tx_skbs_queue(&bp->fp[i]);
1424 static void bnx2x_free_tx_skbs(struct bnx2x *bp)
1428 for_each_eth_queue(bp, i) {
1429 bnx2x_free_tx_skbs_queue(&bp->fp[i]);
1433 static void bnx2x_free_rx_bds(struct bnx2x_fastpath *fp)
1435 struct bnx2x *bp = fp->bp;
1438 /* ring wasn't allocated */
1439 if (fp->rx_buf_ring == NULL)
1442 for (i = 0; i < NUM_RX_BD; i++) {
1443 struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i];
1444 u8 *data = rx_buf->data;
1448 dma_unmap_single(&bp->pdev->dev,
1449 dma_unmap_addr(rx_buf, mapping),
1450 fp->rx_buf_size, DMA_FROM_DEVICE);
1452 rx_buf->data = NULL;
1453 bnx2x_frag_free(fp, data);
1457 static void bnx2x_free_rx_skbs_cnic(struct bnx2x *bp)
1461 for_each_rx_queue_cnic(bp, j) {
1462 bnx2x_free_rx_bds(&bp->fp[j]);
1466 static void bnx2x_free_rx_skbs(struct bnx2x *bp)
1470 for_each_eth_queue(bp, j) {
1471 struct bnx2x_fastpath *fp = &bp->fp[j];
1473 bnx2x_free_rx_bds(fp);
1475 if (!fp->disable_tpa)
1476 bnx2x_free_tpa_pool(bp, fp, MAX_AGG_QS(bp));
1480 void bnx2x_free_skbs_cnic(struct bnx2x *bp)
1482 bnx2x_free_tx_skbs_cnic(bp);
1483 bnx2x_free_rx_skbs_cnic(bp);
1486 void bnx2x_free_skbs(struct bnx2x *bp)
1488 bnx2x_free_tx_skbs(bp);
1489 bnx2x_free_rx_skbs(bp);
1492 void bnx2x_update_max_mf_config(struct bnx2x *bp, u32 value)
1494 /* load old values */
1495 u32 mf_cfg = bp->mf_config[BP_VN(bp)];
1497 if (value != bnx2x_extract_max_cfg(bp, mf_cfg)) {
1498 /* leave all but MAX value */
1499 mf_cfg &= ~FUNC_MF_CFG_MAX_BW_MASK;
1501 /* set new MAX value */
1502 mf_cfg |= (value << FUNC_MF_CFG_MAX_BW_SHIFT)
1503 & FUNC_MF_CFG_MAX_BW_MASK;
1505 bnx2x_fw_command(bp, DRV_MSG_CODE_SET_MF_BW, mf_cfg);
1510 * bnx2x_free_msix_irqs - free previously requested MSI-X IRQ vectors
1512 * @bp: driver handle
1513 * @nvecs: number of vectors to be released
1515 static void bnx2x_free_msix_irqs(struct bnx2x *bp, int nvecs)
1519 if (nvecs == offset)
1522 /* VFs don't have a default SB */
1524 free_irq(bp->msix_table[offset].vector, bp->dev);
1525 DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n",
1526 bp->msix_table[offset].vector);
1530 if (CNIC_SUPPORT(bp)) {
1531 if (nvecs == offset)
1536 for_each_eth_queue(bp, i) {
1537 if (nvecs == offset)
1539 DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq\n",
1540 i, bp->msix_table[offset].vector);
1542 free_irq(bp->msix_table[offset++].vector, &bp->fp[i]);
1546 void bnx2x_free_irq(struct bnx2x *bp)
1548 if (bp->flags & USING_MSIX_FLAG &&
1549 !(bp->flags & USING_SINGLE_MSIX_FLAG)) {
1550 int nvecs = BNX2X_NUM_ETH_QUEUES(bp) + CNIC_SUPPORT(bp);
1552 /* vfs don't have a default status block */
1556 bnx2x_free_msix_irqs(bp, nvecs);
1558 free_irq(bp->dev->irq, bp->dev);
1562 int bnx2x_enable_msix(struct bnx2x *bp)
1564 int msix_vec = 0, i, rc;
1566 /* VFs don't have a default status block */
1568 bp->msix_table[msix_vec].entry = msix_vec;
1569 BNX2X_DEV_INFO("msix_table[0].entry = %d (slowpath)\n",
1570 bp->msix_table[0].entry);
1574 /* Cnic requires an msix vector for itself */
1575 if (CNIC_SUPPORT(bp)) {
1576 bp->msix_table[msix_vec].entry = msix_vec;
1577 BNX2X_DEV_INFO("msix_table[%d].entry = %d (CNIC)\n",
1578 msix_vec, bp->msix_table[msix_vec].entry);
1582 /* We need separate vectors for ETH queues only (not FCoE) */
1583 for_each_eth_queue(bp, i) {
1584 bp->msix_table[msix_vec].entry = msix_vec;
1585 BNX2X_DEV_INFO("msix_table[%d].entry = %d (fastpath #%u)\n",
1586 msix_vec, msix_vec, i);
1590 DP(BNX2X_MSG_SP, "about to request enable msix with %d vectors\n",
1593 rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], msix_vec);
1596 * reconfigure number of tx/rx queues according to available
1599 if (rc >= BNX2X_MIN_MSIX_VEC_CNT(bp)) {
1600 /* how less vectors we will have? */
1601 int diff = msix_vec - rc;
1603 BNX2X_DEV_INFO("Trying to use less MSI-X vectors: %d\n", rc);
1605 rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], rc);
1608 BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
1612 * decrease number of queues by number of unallocated entries
1614 bp->num_ethernet_queues -= diff;
1615 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1617 BNX2X_DEV_INFO("New queue configuration set: %d\n",
1619 } else if (rc > 0) {
1620 /* Get by with single vector */
1621 rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], 1);
1623 BNX2X_DEV_INFO("Single MSI-X is not attainable rc %d\n",
1628 BNX2X_DEV_INFO("Using single MSI-X vector\n");
1629 bp->flags |= USING_SINGLE_MSIX_FLAG;
1631 BNX2X_DEV_INFO("set number of queues to 1\n");
1632 bp->num_ethernet_queues = 1;
1633 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1634 } else if (rc < 0) {
1635 BNX2X_DEV_INFO("MSI-X is not attainable rc %d\n", rc);
1639 bp->flags |= USING_MSIX_FLAG;
1644 /* fall to INTx if not enough memory */
1646 bp->flags |= DISABLE_MSI_FLAG;
1651 static int bnx2x_req_msix_irqs(struct bnx2x *bp)
1653 int i, rc, offset = 0;
1655 /* no default status block for vf */
1657 rc = request_irq(bp->msix_table[offset++].vector,
1658 bnx2x_msix_sp_int, 0,
1659 bp->dev->name, bp->dev);
1661 BNX2X_ERR("request sp irq failed\n");
1666 if (CNIC_SUPPORT(bp))
1669 for_each_eth_queue(bp, i) {
1670 struct bnx2x_fastpath *fp = &bp->fp[i];
1671 snprintf(fp->name, sizeof(fp->name), "%s-fp-%d",
1674 rc = request_irq(bp->msix_table[offset].vector,
1675 bnx2x_msix_fp_int, 0, fp->name, fp);
1677 BNX2X_ERR("request fp #%d irq (%d) failed rc %d\n", i,
1678 bp->msix_table[offset].vector, rc);
1679 bnx2x_free_msix_irqs(bp, offset);
1686 i = BNX2X_NUM_ETH_QUEUES(bp);
1688 offset = 1 + CNIC_SUPPORT(bp);
1689 netdev_info(bp->dev,
1690 "using MSI-X IRQs: sp %d fp[%d] %d ... fp[%d] %d\n",
1691 bp->msix_table[0].vector,
1692 0, bp->msix_table[offset].vector,
1693 i - 1, bp->msix_table[offset + i - 1].vector);
1695 offset = CNIC_SUPPORT(bp);
1696 netdev_info(bp->dev,
1697 "using MSI-X IRQs: fp[%d] %d ... fp[%d] %d\n",
1698 0, bp->msix_table[offset].vector,
1699 i - 1, bp->msix_table[offset + i - 1].vector);
1704 int bnx2x_enable_msi(struct bnx2x *bp)
1708 rc = pci_enable_msi(bp->pdev);
1710 BNX2X_DEV_INFO("MSI is not attainable\n");
1713 bp->flags |= USING_MSI_FLAG;
1718 static int bnx2x_req_irq(struct bnx2x *bp)
1720 unsigned long flags;
1723 if (bp->flags & (USING_MSI_FLAG | USING_MSIX_FLAG))
1726 flags = IRQF_SHARED;
1728 if (bp->flags & USING_MSIX_FLAG)
1729 irq = bp->msix_table[0].vector;
1731 irq = bp->pdev->irq;
1733 return request_irq(irq, bnx2x_interrupt, flags, bp->dev->name, bp->dev);
1736 int bnx2x_setup_irqs(struct bnx2x *bp)
1739 if (bp->flags & USING_MSIX_FLAG &&
1740 !(bp->flags & USING_SINGLE_MSIX_FLAG)) {
1741 rc = bnx2x_req_msix_irqs(bp);
1745 rc = bnx2x_req_irq(bp);
1747 BNX2X_ERR("IRQ request failed rc %d, aborting\n", rc);
1750 if (bp->flags & USING_MSI_FLAG) {
1751 bp->dev->irq = bp->pdev->irq;
1752 netdev_info(bp->dev, "using MSI IRQ %d\n",
1755 if (bp->flags & USING_MSIX_FLAG) {
1756 bp->dev->irq = bp->msix_table[0].vector;
1757 netdev_info(bp->dev, "using MSIX IRQ %d\n",
1765 static void bnx2x_napi_enable_cnic(struct bnx2x *bp)
1769 for_each_rx_queue_cnic(bp, i)
1770 napi_enable(&bnx2x_fp(bp, i, napi));
1773 static void bnx2x_napi_enable(struct bnx2x *bp)
1777 for_each_eth_queue(bp, i)
1778 napi_enable(&bnx2x_fp(bp, i, napi));
1781 static void bnx2x_napi_disable_cnic(struct bnx2x *bp)
1785 for_each_rx_queue_cnic(bp, i)
1786 napi_disable(&bnx2x_fp(bp, i, napi));
1789 static void bnx2x_napi_disable(struct bnx2x *bp)
1793 for_each_eth_queue(bp, i)
1794 napi_disable(&bnx2x_fp(bp, i, napi));
1797 void bnx2x_netif_start(struct bnx2x *bp)
1799 if (netif_running(bp->dev)) {
1800 bnx2x_napi_enable(bp);
1801 if (CNIC_LOADED(bp))
1802 bnx2x_napi_enable_cnic(bp);
1803 bnx2x_int_enable(bp);
1804 if (bp->state == BNX2X_STATE_OPEN)
1805 netif_tx_wake_all_queues(bp->dev);
1809 void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
1811 bnx2x_int_disable_sync(bp, disable_hw);
1812 bnx2x_napi_disable(bp);
1813 if (CNIC_LOADED(bp))
1814 bnx2x_napi_disable_cnic(bp);
1817 u16 bnx2x_select_queue(struct net_device *dev, struct sk_buff *skb)
1819 struct bnx2x *bp = netdev_priv(dev);
1821 if (CNIC_LOADED(bp) && !NO_FCOE(bp)) {
1822 struct ethhdr *hdr = (struct ethhdr *)skb->data;
1823 u16 ether_type = ntohs(hdr->h_proto);
1825 /* Skip VLAN tag if present */
1826 if (ether_type == ETH_P_8021Q) {
1827 struct vlan_ethhdr *vhdr =
1828 (struct vlan_ethhdr *)skb->data;
1830 ether_type = ntohs(vhdr->h_vlan_encapsulated_proto);
1833 /* If ethertype is FCoE or FIP - use FCoE ring */
1834 if ((ether_type == ETH_P_FCOE) || (ether_type == ETH_P_FIP))
1835 return bnx2x_fcoe_tx(bp, txq_index);
1838 /* select a non-FCoE queue */
1839 return __skb_tx_hash(dev, skb, BNX2X_NUM_ETH_QUEUES(bp));
1842 void bnx2x_set_num_queues(struct bnx2x *bp)
1845 bp->num_ethernet_queues = bnx2x_calc_num_queues(bp);
1847 /* override in STORAGE SD modes */
1848 if (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))
1849 bp->num_ethernet_queues = 1;
1851 /* Add special queues */
1852 bp->num_cnic_queues = CNIC_SUPPORT(bp); /* For FCOE */
1853 bp->num_queues = bp->num_ethernet_queues + bp->num_cnic_queues;
1855 BNX2X_DEV_INFO("set number of queues to %d\n", bp->num_queues);
1859 * bnx2x_set_real_num_queues - configure netdev->real_num_[tx,rx]_queues
1861 * @bp: Driver handle
1863 * We currently support for at most 16 Tx queues for each CoS thus we will
1864 * allocate a multiple of 16 for ETH L2 rings according to the value of the
1867 * If there is an FCoE L2 queue the appropriate Tx queue will have the next
1868 * index after all ETH L2 indices.
1870 * If the actual number of Tx queues (for each CoS) is less than 16 then there
1871 * will be the holes at the end of each group of 16 ETh L2 indices (0..15,
1872 * 16..31,...) with indicies that are not coupled with any real Tx queue.
1874 * The proper configuration of skb->queue_mapping is handled by
1875 * bnx2x_select_queue() and __skb_tx_hash().
1877 * bnx2x_setup_tc() takes care of the proper TC mappings so that __skb_tx_hash()
1878 * will return a proper Tx index if TC is enabled (netdev->num_tc > 0).
1880 static int bnx2x_set_real_num_queues(struct bnx2x *bp, int include_cnic)
1884 tx = BNX2X_NUM_ETH_QUEUES(bp) * bp->max_cos;
1885 rx = BNX2X_NUM_ETH_QUEUES(bp);
1887 /* account for fcoe queue */
1888 if (include_cnic && !NO_FCOE(bp)) {
1893 rc = netif_set_real_num_tx_queues(bp->dev, tx);
1895 BNX2X_ERR("Failed to set real number of Tx queues: %d\n", rc);
1898 rc = netif_set_real_num_rx_queues(bp->dev, rx);
1900 BNX2X_ERR("Failed to set real number of Rx queues: %d\n", rc);
1904 DP(NETIF_MSG_IFUP, "Setting real num queues to (tx, rx) (%d, %d)\n",
1910 static void bnx2x_set_rx_buf_size(struct bnx2x *bp)
1914 for_each_queue(bp, i) {
1915 struct bnx2x_fastpath *fp = &bp->fp[i];
1918 /* Always use a mini-jumbo MTU for the FCoE L2 ring */
1921 * Although there are no IP frames expected to arrive to
1922 * this ring we still want to add an
1923 * IP_HEADER_ALIGNMENT_PADDING to prevent a buffer
1926 mtu = BNX2X_FCOE_MINI_JUMBO_MTU;
1929 fp->rx_buf_size = BNX2X_FW_RX_ALIGN_START +
1930 IP_HEADER_ALIGNMENT_PADDING +
1933 BNX2X_FW_RX_ALIGN_END;
1934 /* Note : rx_buf_size doesnt take into account NET_SKB_PAD */
1935 if (fp->rx_buf_size + NET_SKB_PAD <= PAGE_SIZE)
1936 fp->rx_frag_size = fp->rx_buf_size + NET_SKB_PAD;
1938 fp->rx_frag_size = 0;
1942 static int bnx2x_init_rss_pf(struct bnx2x *bp)
1945 u8 num_eth_queues = BNX2X_NUM_ETH_QUEUES(bp);
1947 /* Prepare the initial contents fo the indirection table if RSS is
1950 for (i = 0; i < sizeof(bp->rss_conf_obj.ind_table); i++)
1951 bp->rss_conf_obj.ind_table[i] =
1953 ethtool_rxfh_indir_default(i, num_eth_queues);
1956 * For 57710 and 57711 SEARCHER configuration (rss_keys) is
1957 * per-port, so if explicit configuration is needed , do it only
1960 * For 57712 and newer on the other hand it's a per-function
1963 return bnx2x_config_rss_eth(bp, bp->port.pmf || !CHIP_IS_E1x(bp));
1966 int bnx2x_config_rss_pf(struct bnx2x *bp, struct bnx2x_rss_config_obj *rss_obj,
1969 struct bnx2x_config_rss_params params = {NULL};
1971 /* Although RSS is meaningless when there is a single HW queue we
1972 * still need it enabled in order to have HW Rx hash generated.
1974 * if (!is_eth_multi(bp))
1975 * bp->multi_mode = ETH_RSS_MODE_DISABLED;
1978 params.rss_obj = rss_obj;
1980 __set_bit(RAMROD_COMP_WAIT, ¶ms.ramrod_flags);
1982 __set_bit(BNX2X_RSS_MODE_REGULAR, ¶ms.rss_flags);
1984 /* RSS configuration */
1985 __set_bit(BNX2X_RSS_IPV4, ¶ms.rss_flags);
1986 __set_bit(BNX2X_RSS_IPV4_TCP, ¶ms.rss_flags);
1987 __set_bit(BNX2X_RSS_IPV6, ¶ms.rss_flags);
1988 __set_bit(BNX2X_RSS_IPV6_TCP, ¶ms.rss_flags);
1989 if (rss_obj->udp_rss_v4)
1990 __set_bit(BNX2X_RSS_IPV4_UDP, ¶ms.rss_flags);
1991 if (rss_obj->udp_rss_v6)
1992 __set_bit(BNX2X_RSS_IPV6_UDP, ¶ms.rss_flags);
1995 params.rss_result_mask = MULTI_MASK;
1997 memcpy(params.ind_table, rss_obj->ind_table, sizeof(params.ind_table));
2001 prandom_bytes(params.rss_key, sizeof(params.rss_key));
2002 __set_bit(BNX2X_RSS_SET_SRCH, ¶ms.rss_flags);
2005 return bnx2x_config_rss(bp, ¶ms);
2008 static int bnx2x_init_hw(struct bnx2x *bp, u32 load_code)
2010 struct bnx2x_func_state_params func_params = {NULL};
2012 /* Prepare parameters for function state transitions */
2013 __set_bit(RAMROD_COMP_WAIT, &func_params.ramrod_flags);
2015 func_params.f_obj = &bp->func_obj;
2016 func_params.cmd = BNX2X_F_CMD_HW_INIT;
2018 func_params.params.hw_init.load_phase = load_code;
2020 return bnx2x_func_state_change(bp, &func_params);
2024 * Cleans the object that have internal lists without sending
2025 * ramrods. Should be run when interrutps are disabled.
2027 void bnx2x_squeeze_objects(struct bnx2x *bp)
2030 unsigned long ramrod_flags = 0, vlan_mac_flags = 0;
2031 struct bnx2x_mcast_ramrod_params rparam = {NULL};
2032 struct bnx2x_vlan_mac_obj *mac_obj = &bp->sp_objs->mac_obj;
2034 /***************** Cleanup MACs' object first *************************/
2036 /* Wait for completion of requested */
2037 __set_bit(RAMROD_COMP_WAIT, &ramrod_flags);
2038 /* Perform a dry cleanup */
2039 __set_bit(RAMROD_DRV_CLR_ONLY, &ramrod_flags);
2041 /* Clean ETH primary MAC */
2042 __set_bit(BNX2X_ETH_MAC, &vlan_mac_flags);
2043 rc = mac_obj->delete_all(bp, &bp->sp_objs->mac_obj, &vlan_mac_flags,
2046 BNX2X_ERR("Failed to clean ETH MACs: %d\n", rc);
2048 /* Cleanup UC list */
2050 __set_bit(BNX2X_UC_LIST_MAC, &vlan_mac_flags);
2051 rc = mac_obj->delete_all(bp, mac_obj, &vlan_mac_flags,
2054 BNX2X_ERR("Failed to clean UC list MACs: %d\n", rc);
2056 /***************** Now clean mcast object *****************************/
2057 rparam.mcast_obj = &bp->mcast_obj;
2058 __set_bit(RAMROD_DRV_CLR_ONLY, &rparam.ramrod_flags);
2060 /* Add a DEL command... */
2061 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_DEL);
2063 BNX2X_ERR("Failed to add a new DEL command to a multi-cast object: %d\n",
2066 /* ...and wait until all pending commands are cleared */
2067 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT);
2070 BNX2X_ERR("Failed to clean multi-cast object: %d\n",
2075 rc = bnx2x_config_mcast(bp, &rparam, BNX2X_MCAST_CMD_CONT);
2079 #ifndef BNX2X_STOP_ON_ERROR
2080 #define LOAD_ERROR_EXIT(bp, label) \
2082 (bp)->state = BNX2X_STATE_ERROR; \
2086 #define LOAD_ERROR_EXIT_CNIC(bp, label) \
2088 bp->cnic_loaded = false; \
2091 #else /*BNX2X_STOP_ON_ERROR*/
2092 #define LOAD_ERROR_EXIT(bp, label) \
2094 (bp)->state = BNX2X_STATE_ERROR; \
2098 #define LOAD_ERROR_EXIT_CNIC(bp, label) \
2100 bp->cnic_loaded = false; \
2104 #endif /*BNX2X_STOP_ON_ERROR*/
2106 static void bnx2x_free_fw_stats_mem(struct bnx2x *bp)
2108 BNX2X_PCI_FREE(bp->fw_stats, bp->fw_stats_mapping,
2109 bp->fw_stats_data_sz + bp->fw_stats_req_sz);
2113 static int bnx2x_alloc_fw_stats_mem(struct bnx2x *bp)
2115 int num_groups, vf_headroom = 0;
2116 int is_fcoe_stats = NO_FCOE(bp) ? 0 : 1;
2118 /* number of queues for statistics is number of eth queues + FCoE */
2119 u8 num_queue_stats = BNX2X_NUM_ETH_QUEUES(bp) + is_fcoe_stats;
2121 /* Total number of FW statistics requests =
2122 * 1 for port stats + 1 for PF stats + potential 2 for FCoE (fcoe proper
2123 * and fcoe l2 queue) stats + num of queues (which includes another 1
2124 * for fcoe l2 queue if applicable)
2126 bp->fw_stats_num = 2 + is_fcoe_stats + num_queue_stats;
2128 /* vf stats appear in the request list, but their data is allocated by
2129 * the VFs themselves. We don't include them in the bp->fw_stats_num as
2130 * it is used to determine where to place the vf stats queries in the
2134 vf_headroom = bnx2x_vf_headroom(bp);
2136 /* Request is built from stats_query_header and an array of
2137 * stats_query_cmd_group each of which contains
2138 * STATS_QUERY_CMD_COUNT rules. The real number or requests is
2139 * configured in the stats_query_header.
2142 (((bp->fw_stats_num + vf_headroom) / STATS_QUERY_CMD_COUNT) +
2143 (((bp->fw_stats_num + vf_headroom) % STATS_QUERY_CMD_COUNT) ?
2146 DP(BNX2X_MSG_SP, "stats fw_stats_num %d, vf headroom %d, num_groups %d\n",
2147 bp->fw_stats_num, vf_headroom, num_groups);
2148 bp->fw_stats_req_sz = sizeof(struct stats_query_header) +
2149 num_groups * sizeof(struct stats_query_cmd_group);
2151 /* Data for statistics requests + stats_counter
2152 * stats_counter holds per-STORM counters that are incremented
2153 * when STORM has finished with the current request.
2154 * memory for FCoE offloaded statistics are counted anyway,
2155 * even if they will not be sent.
2156 * VF stats are not accounted for here as the data of VF stats is stored
2157 * in memory allocated by the VF, not here.
2159 bp->fw_stats_data_sz = sizeof(struct per_port_stats) +
2160 sizeof(struct per_pf_stats) +
2161 sizeof(struct fcoe_statistics_params) +
2162 sizeof(struct per_queue_stats) * num_queue_stats +
2163 sizeof(struct stats_counter);
2165 BNX2X_PCI_ALLOC(bp->fw_stats, &bp->fw_stats_mapping,
2166 bp->fw_stats_data_sz + bp->fw_stats_req_sz);
2169 bp->fw_stats_req = (struct bnx2x_fw_stats_req *)bp->fw_stats;
2170 bp->fw_stats_req_mapping = bp->fw_stats_mapping;
2171 bp->fw_stats_data = (struct bnx2x_fw_stats_data *)
2172 ((u8 *)bp->fw_stats + bp->fw_stats_req_sz);
2173 bp->fw_stats_data_mapping = bp->fw_stats_mapping +
2174 bp->fw_stats_req_sz;
2176 DP(BNX2X_MSG_SP, "statistics request base address set to %x %x",
2177 U64_HI(bp->fw_stats_req_mapping),
2178 U64_LO(bp->fw_stats_req_mapping));
2179 DP(BNX2X_MSG_SP, "statistics data base address set to %x %x",
2180 U64_HI(bp->fw_stats_data_mapping),
2181 U64_LO(bp->fw_stats_data_mapping));
2185 bnx2x_free_fw_stats_mem(bp);
2186 BNX2X_ERR("Can't allocate FW stats memory\n");
2190 /* send load request to mcp and analyze response */
2191 static int bnx2x_nic_load_request(struct bnx2x *bp, u32 *load_code)
2195 (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_mb_header) &
2196 DRV_MSG_SEQ_NUMBER_MASK);
2197 BNX2X_DEV_INFO("fw_seq 0x%08x\n", bp->fw_seq);
2199 /* Get current FW pulse sequence */
2200 bp->fw_drv_pulse_wr_seq =
2201 (SHMEM_RD(bp, func_mb[BP_FW_MB_IDX(bp)].drv_pulse_mb) &
2202 DRV_PULSE_SEQ_MASK);
2203 BNX2X_DEV_INFO("drv_pulse 0x%x\n", bp->fw_drv_pulse_wr_seq);
2206 (*load_code) = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ,
2207 DRV_MSG_CODE_LOAD_REQ_WITH_LFA);
2209 /* if mcp fails to respond we must abort */
2210 if (!(*load_code)) {
2211 BNX2X_ERR("MCP response failure, aborting\n");
2215 /* If mcp refused (e.g. other port is in diagnostic mode) we
2218 if ((*load_code) == FW_MSG_CODE_DRV_LOAD_REFUSED) {
2219 BNX2X_ERR("MCP refused load request, aborting\n");
2225 /* check whether another PF has already loaded FW to chip. In
2226 * virtualized environments a pf from another VM may have already
2227 * initialized the device including loading FW
2229 int bnx2x_nic_load_analyze_req(struct bnx2x *bp, u32 load_code)
2231 /* is another pf loaded on this engine? */
2232 if (load_code != FW_MSG_CODE_DRV_LOAD_COMMON_CHIP &&
2233 load_code != FW_MSG_CODE_DRV_LOAD_COMMON) {
2234 /* build my FW version dword */
2235 u32 my_fw = (BCM_5710_FW_MAJOR_VERSION) +
2236 (BCM_5710_FW_MINOR_VERSION << 8) +
2237 (BCM_5710_FW_REVISION_VERSION << 16) +
2238 (BCM_5710_FW_ENGINEERING_VERSION << 24);
2240 /* read loaded FW from chip */
2241 u32 loaded_fw = REG_RD(bp, XSEM_REG_PRAM);
2243 DP(BNX2X_MSG_SP, "loaded fw %x, my fw %x\n",
2246 /* abort nic load if version mismatch */
2247 if (my_fw != loaded_fw) {
2248 BNX2X_ERR("bnx2x with FW %x was already loaded which mismatches my %x FW. aborting\n",
2256 /* returns the "mcp load_code" according to global load_count array */
2257 static int bnx2x_nic_load_no_mcp(struct bnx2x *bp, int port)
2259 int path = BP_PATH(bp);
2261 DP(NETIF_MSG_IFUP, "NO MCP - load counts[%d] %d, %d, %d\n",
2262 path, load_count[path][0], load_count[path][1],
2263 load_count[path][2]);
2264 load_count[path][0]++;
2265 load_count[path][1 + port]++;
2266 DP(NETIF_MSG_IFUP, "NO MCP - new load counts[%d] %d, %d, %d\n",
2267 path, load_count[path][0], load_count[path][1],
2268 load_count[path][2]);
2269 if (load_count[path][0] == 1)
2270 return FW_MSG_CODE_DRV_LOAD_COMMON;
2271 else if (load_count[path][1 + port] == 1)
2272 return FW_MSG_CODE_DRV_LOAD_PORT;
2274 return FW_MSG_CODE_DRV_LOAD_FUNCTION;
2277 /* mark PMF if applicable */
2278 static void bnx2x_nic_load_pmf(struct bnx2x *bp, u32 load_code)
2280 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
2281 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP) ||
2282 (load_code == FW_MSG_CODE_DRV_LOAD_PORT)) {
2284 /* We need the barrier to ensure the ordering between the
2285 * writing to bp->port.pmf here and reading it from the
2286 * bnx2x_periodic_task().
2293 DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf);
2296 static void bnx2x_nic_load_afex_dcc(struct bnx2x *bp, int load_code)
2298 if (((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
2299 (load_code == FW_MSG_CODE_DRV_LOAD_COMMON_CHIP)) &&
2300 (bp->common.shmem2_base)) {
2301 if (SHMEM2_HAS(bp, dcc_support))
2302 SHMEM2_WR(bp, dcc_support,
2303 (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV |
2304 SHMEM_DCC_SUPPORT_BANDWIDTH_ALLOCATION_TLV));
2305 if (SHMEM2_HAS(bp, afex_driver_support))
2306 SHMEM2_WR(bp, afex_driver_support,
2307 SHMEM_AFEX_SUPPORTED_VERSION_ONE);
2310 /* Set AFEX default VLAN tag to an invalid value */
2311 bp->afex_def_vlan_tag = -1;
2315 * bnx2x_bz_fp - zero content of the fastpath structure.
2317 * @bp: driver handle
2318 * @index: fastpath index to be zeroed
2320 * Makes sure the contents of the bp->fp[index].napi is kept
2323 static void bnx2x_bz_fp(struct bnx2x *bp, int index)
2325 struct bnx2x_fastpath *fp = &bp->fp[index];
2328 struct napi_struct orig_napi = fp->napi;
2329 struct bnx2x_agg_info *orig_tpa_info = fp->tpa_info;
2330 /* bzero bnx2x_fastpath contents */
2332 memset(fp->tpa_info, 0, ETH_MAX_AGGREGATION_QUEUES_E1H_E2 *
2333 sizeof(struct bnx2x_agg_info));
2334 memset(fp, 0, sizeof(*fp));
2336 /* Restore the NAPI object as it has been already initialized */
2337 fp->napi = orig_napi;
2338 fp->tpa_info = orig_tpa_info;
2342 fp->max_cos = bp->max_cos;
2344 /* Special queues support only one CoS */
2347 /* Init txdata pointers */
2349 fp->txdata_ptr[0] = &bp->bnx2x_txq[FCOE_TXQ_IDX(bp)];
2351 for_each_cos_in_tx_queue(fp, cos)
2352 fp->txdata_ptr[cos] = &bp->bnx2x_txq[cos *
2353 BNX2X_NUM_ETH_QUEUES(bp) + index];
2356 * set the tpa flag for each queue. The tpa flag determines the queue
2357 * minimal size so it must be set prior to queue memory allocation
2359 fp->disable_tpa = !(bp->flags & TPA_ENABLE_FLAG ||
2360 (bp->flags & GRO_ENABLE_FLAG &&
2361 bnx2x_mtu_allows_gro(bp->dev->mtu)));
2362 if (bp->flags & TPA_ENABLE_FLAG)
2363 fp->mode = TPA_MODE_LRO;
2364 else if (bp->flags & GRO_ENABLE_FLAG)
2365 fp->mode = TPA_MODE_GRO;
2367 /* We don't want TPA on an FCoE L2 ring */
2369 fp->disable_tpa = 1;
2372 int bnx2x_load_cnic(struct bnx2x *bp)
2374 int i, rc, port = BP_PORT(bp);
2376 DP(NETIF_MSG_IFUP, "Starting CNIC-related load\n");
2378 mutex_init(&bp->cnic_mutex);
2381 rc = bnx2x_alloc_mem_cnic(bp);
2383 BNX2X_ERR("Unable to allocate bp memory for cnic\n");
2384 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2388 rc = bnx2x_alloc_fp_mem_cnic(bp);
2390 BNX2X_ERR("Unable to allocate memory for cnic fps\n");
2391 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2394 /* Update the number of queues with the cnic queues */
2395 rc = bnx2x_set_real_num_queues(bp, 1);
2397 BNX2X_ERR("Unable to set real_num_queues including cnic\n");
2398 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic0);
2401 /* Add all CNIC NAPI objects */
2402 bnx2x_add_all_napi_cnic(bp);
2403 DP(NETIF_MSG_IFUP, "cnic napi added\n");
2404 bnx2x_napi_enable_cnic(bp);
2406 rc = bnx2x_init_hw_func_cnic(bp);
2408 LOAD_ERROR_EXIT_CNIC(bp, load_error_cnic1);
2410 bnx2x_nic_init_cnic(bp);
2413 /* Enable Timer scan */
2414 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 1);
2416 /* setup cnic queues */
2417 for_each_cnic_queue(bp, i) {
2418 rc = bnx2x_setup_queue(bp, &bp->fp[i], 0);
2420 BNX2X_ERR("Queue setup failed\n");
2421 LOAD_ERROR_EXIT(bp, load_error_cnic2);
2426 /* Initialize Rx filter. */
2427 netif_addr_lock_bh(bp->dev);
2428 bnx2x_set_rx_mode(bp->dev);
2429 netif_addr_unlock_bh(bp->dev);
2431 /* re-read iscsi info */
2432 bnx2x_get_iscsi_info(bp);
2433 bnx2x_setup_cnic_irq_info(bp);
2434 bnx2x_setup_cnic_info(bp);
2435 bp->cnic_loaded = true;
2436 if (bp->state == BNX2X_STATE_OPEN)
2437 bnx2x_cnic_notify(bp, CNIC_CTL_START_CMD);
2440 DP(NETIF_MSG_IFUP, "Ending successfully CNIC-related load\n");
2444 #ifndef BNX2X_STOP_ON_ERROR
2446 /* Disable Timer scan */
2447 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + port*4, 0);
2450 bnx2x_napi_disable_cnic(bp);
2451 /* Update the number of queues without the cnic queues */
2452 rc = bnx2x_set_real_num_queues(bp, 0);
2454 BNX2X_ERR("Unable to set real_num_queues not including cnic\n");
2456 BNX2X_ERR("CNIC-related load failed\n");
2457 bnx2x_free_fp_mem_cnic(bp);
2458 bnx2x_free_mem_cnic(bp);
2460 #endif /* ! BNX2X_STOP_ON_ERROR */
2463 /* must be called with rtnl_lock */
2464 int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
2466 int port = BP_PORT(bp);
2467 int i, rc = 0, load_code = 0;
2469 DP(NETIF_MSG_IFUP, "Starting NIC load\n");
2471 "CNIC is %s\n", CNIC_ENABLED(bp) ? "enabled" : "disabled");
2473 #ifdef BNX2X_STOP_ON_ERROR
2474 if (unlikely(bp->panic)) {
2475 BNX2X_ERR("Can't load NIC when there is panic\n");
2480 bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD;
2482 memset(&bp->last_reported_link, 0, sizeof(bp->last_reported_link));
2483 __set_bit(BNX2X_LINK_REPORT_LINK_DOWN,
2484 &bp->last_reported_link.link_report_flags);
2487 /* must be called before memory allocation and HW init */
2488 bnx2x_ilt_set_info(bp);
2491 * Zero fastpath structures preserving invariants like napi, which are
2492 * allocated only once, fp index, max_cos, bp pointer.
2493 * Also set fp->disable_tpa and txdata_ptr.
2495 DP(NETIF_MSG_IFUP, "num queues: %d", bp->num_queues);
2496 for_each_queue(bp, i)
2498 memset(bp->bnx2x_txq, 0, (BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS +
2499 bp->num_cnic_queues) *
2500 sizeof(struct bnx2x_fp_txdata));
2502 bp->fcoe_init = false;
2504 /* Set the receive queues buffer size */
2505 bnx2x_set_rx_buf_size(bp);
2508 rc = bnx2x_alloc_mem(bp);
2510 BNX2X_ERR("Unable to allocate bp memory\n");
2515 /* Allocated memory for FW statistics */
2516 if (bnx2x_alloc_fw_stats_mem(bp))
2517 LOAD_ERROR_EXIT(bp, load_error0);
2519 /* need to be done after alloc mem, since it's self adjusting to amount
2520 * of memory available for RSS queues
2522 rc = bnx2x_alloc_fp_mem(bp);
2524 BNX2X_ERR("Unable to allocate memory for fps\n");
2525 LOAD_ERROR_EXIT(bp, load_error0);
2528 /* request pf to initialize status blocks */
2530 rc = bnx2x_vfpf_init(bp);
2532 LOAD_ERROR_EXIT(bp, load_error0);
2535 /* As long as bnx2x_alloc_mem() may possibly update
2536 * bp->num_queues, bnx2x_set_real_num_queues() should always
2537 * come after it. At this stage cnic queues are not counted.
2539 rc = bnx2x_set_real_num_queues(bp, 0);
2541 BNX2X_ERR("Unable to set real_num_queues\n");
2542 LOAD_ERROR_EXIT(bp, load_error0);
2545 /* configure multi cos mappings in kernel.
2546 * this configuration may be overriden by a multi class queue discipline
2547 * or by a dcbx negotiation result.
2549 bnx2x_setup_tc(bp->dev, bp->max_cos);
2551 /* Add all NAPI objects */
2552 bnx2x_add_all_napi(bp);
2553 DP(NETIF_MSG_IFUP, "napi added\n");
2554 bnx2x_napi_enable(bp);
2557 /* set pf load just before approaching the MCP */
2558 bnx2x_set_pf_load(bp);
2560 /* if mcp exists send load request and analyze response */
2561 if (!BP_NOMCP(bp)) {
2562 /* attempt to load pf */
2563 rc = bnx2x_nic_load_request(bp, &load_code);
2565 LOAD_ERROR_EXIT(bp, load_error1);
2567 /* what did mcp say? */
2568 rc = bnx2x_nic_load_analyze_req(bp, load_code);
2570 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2571 LOAD_ERROR_EXIT(bp, load_error2);
2574 load_code = bnx2x_nic_load_no_mcp(bp, port);
2577 /* mark pmf if applicable */
2578 bnx2x_nic_load_pmf(bp, load_code);
2580 /* Init Function state controlling object */
2581 bnx2x__init_func_obj(bp);
2584 rc = bnx2x_init_hw(bp, load_code);
2586 BNX2X_ERR("HW init failed, aborting\n");
2587 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2588 LOAD_ERROR_EXIT(bp, load_error2);
2592 bnx2x_pre_irq_nic_init(bp);
2594 /* Connect to IRQs */
2595 rc = bnx2x_setup_irqs(bp);
2597 BNX2X_ERR("setup irqs failed\n");
2599 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2600 LOAD_ERROR_EXIT(bp, load_error2);
2603 /* Init per-function objects */
2605 /* Setup NIC internals and enable interrupts */
2606 bnx2x_post_irq_nic_init(bp, load_code);
2608 bnx2x_init_bp_objs(bp);
2609 bnx2x_iov_nic_init(bp);
2611 /* Set AFEX default VLAN tag to an invalid value */
2612 bp->afex_def_vlan_tag = -1;
2613 bnx2x_nic_load_afex_dcc(bp, load_code);
2614 bp->state = BNX2X_STATE_OPENING_WAIT4_PORT;
2615 rc = bnx2x_func_start(bp);
2617 BNX2X_ERR("Function start failed!\n");
2618 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
2620 LOAD_ERROR_EXIT(bp, load_error3);
2623 /* Send LOAD_DONE command to MCP */
2624 if (!BP_NOMCP(bp)) {
2625 load_code = bnx2x_fw_command(bp,
2626 DRV_MSG_CODE_LOAD_DONE, 0);
2628 BNX2X_ERR("MCP response failure, aborting\n");
2630 LOAD_ERROR_EXIT(bp, load_error3);
2634 /* initialize FW coalescing state machines in RAM */
2635 bnx2x_update_coalesce(bp);
2637 /* setup the leading queue */
2638 rc = bnx2x_setup_leading(bp);
2640 BNX2X_ERR("Setup leading failed!\n");
2641 LOAD_ERROR_EXIT(bp, load_error3);
2644 /* set up the rest of the queues */
2645 for_each_nondefault_eth_queue(bp, i) {
2646 rc = bnx2x_setup_queue(bp, &bp->fp[i], 0);
2648 BNX2X_ERR("Queue setup failed\n");
2649 LOAD_ERROR_EXIT(bp, load_error3);
2654 rc = bnx2x_init_rss_pf(bp);
2656 BNX2X_ERR("PF RSS init failed\n");
2657 LOAD_ERROR_EXIT(bp, load_error3);
2661 for_each_eth_queue(bp, i) {
2662 rc = bnx2x_vfpf_setup_q(bp, i);
2664 BNX2X_ERR("Queue setup failed\n");
2665 LOAD_ERROR_EXIT(bp, load_error3);
2670 /* Now when Clients are configured we are ready to work */
2671 bp->state = BNX2X_STATE_OPEN;
2673 /* Configure a ucast MAC */
2675 rc = bnx2x_set_eth_mac(bp, true);
2677 rc = bnx2x_vfpf_config_mac(bp, bp->dev->dev_addr, bp->fp->index,
2680 BNX2X_ERR("Setting Ethernet MAC failed\n");
2681 LOAD_ERROR_EXIT(bp, load_error3);
2684 if (IS_PF(bp) && bp->pending_max) {
2685 bnx2x_update_max_mf_config(bp, bp->pending_max);
2686 bp->pending_max = 0;
2690 rc = bnx2x_initial_phy_init(bp, load_mode);
2692 LOAD_ERROR_EXIT(bp, load_error3);
2694 bp->link_params.feature_config_flags &= ~FEATURE_CONFIG_BOOT_FROM_SAN;
2696 /* Start fast path */
2698 /* Initialize Rx filter. */
2699 netif_addr_lock_bh(bp->dev);
2700 bnx2x_set_rx_mode(bp->dev);
2701 netif_addr_unlock_bh(bp->dev);
2704 switch (load_mode) {
2706 /* Tx queue should be only reenabled */
2707 netif_tx_wake_all_queues(bp->dev);
2711 netif_tx_start_all_queues(bp->dev);
2712 smp_mb__after_clear_bit();
2716 case LOAD_LOOPBACK_EXT:
2717 bp->state = BNX2X_STATE_DIAG;
2725 bnx2x_update_drv_flags(bp, 1 << DRV_FLAGS_PORT_MASK, 0);
2727 bnx2x__link_status_update(bp);
2729 /* start the timer */
2730 mod_timer(&bp->timer, jiffies + bp->current_interval);
2732 if (CNIC_ENABLED(bp))
2733 bnx2x_load_cnic(bp);
2735 if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
2736 /* mark driver is loaded in shmem2 */
2738 val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
2739 SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
2740 val | DRV_FLAGS_CAPABILITIES_LOADED_SUPPORTED |
2741 DRV_FLAGS_CAPABILITIES_LOADED_L2);
2744 /* Wait for all pending SP commands to complete */
2745 if (IS_PF(bp) && !bnx2x_wait_sp_comp(bp, ~0x0UL)) {
2746 BNX2X_ERR("Timeout waiting for SP elements to complete\n");
2747 bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
2751 /* If PMF - send ADMIN DCBX msg to MFW to initiate DCBX FSM */
2752 if (bp->port.pmf && (bp->state != BNX2X_STATE_DIAG))
2753 bnx2x_dcbx_init(bp, false);
2755 DP(NETIF_MSG_IFUP, "Ending successfully NIC load\n");
2759 #ifndef BNX2X_STOP_ON_ERROR
2762 bnx2x_int_disable_sync(bp, 1);
2764 /* Clean queueable objects */
2765 bnx2x_squeeze_objects(bp);
2768 /* Free SKBs, SGEs, TPA pool and driver internals */
2769 bnx2x_free_skbs(bp);
2770 for_each_rx_queue(bp, i)
2771 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
2776 if (IS_PF(bp) && !BP_NOMCP(bp)) {
2777 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
2778 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
2783 bnx2x_napi_disable(bp);
2784 bnx2x_del_all_napi(bp);
2786 /* clear pf_load status, as it was already set */
2788 bnx2x_clear_pf_load(bp);
2790 bnx2x_free_fp_mem(bp);
2791 bnx2x_free_fw_stats_mem(bp);
2795 #endif /* ! BNX2X_STOP_ON_ERROR */
2798 int bnx2x_drain_tx_queues(struct bnx2x *bp)
2802 /* Wait until tx fastpath tasks complete */
2803 for_each_tx_queue(bp, i) {
2804 struct bnx2x_fastpath *fp = &bp->fp[i];
2806 for_each_cos_in_tx_queue(fp, cos)
2807 rc = bnx2x_clean_tx_queue(bp, fp->txdata_ptr[cos]);
2814 /* must be called with rtnl_lock */
2815 int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
2818 bool global = false;
2820 DP(NETIF_MSG_IFUP, "Starting NIC unload\n");
2822 /* mark driver is unloaded in shmem2 */
2823 if (IS_PF(bp) && SHMEM2_HAS(bp, drv_capabilities_flag)) {
2825 val = SHMEM2_RD(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)]);
2826 SHMEM2_WR(bp, drv_capabilities_flag[BP_FW_MB_IDX(bp)],
2827 val & ~DRV_FLAGS_CAPABILITIES_LOADED_L2);
2830 if (IS_PF(bp) && bp->recovery_state != BNX2X_RECOVERY_DONE &&
2831 (bp->state == BNX2X_STATE_CLOSED ||
2832 bp->state == BNX2X_STATE_ERROR)) {
2833 /* We can get here if the driver has been unloaded
2834 * during parity error recovery and is either waiting for a
2835 * leader to complete or for other functions to unload and
2836 * then ifdown has been issued. In this case we want to
2837 * unload and let other functions to complete a recovery
2840 bp->recovery_state = BNX2X_RECOVERY_DONE;
2842 bnx2x_release_leader_lock(bp);
2845 DP(NETIF_MSG_IFDOWN, "Releasing a leadership...\n");
2846 BNX2X_ERR("Can't unload in closed or error state\n");
2850 /* Nothing to do during unload if previous bnx2x_nic_load()
2851 * have not completed succesfully - all resourses are released.
2853 * we can get here only after unsuccessful ndo_* callback, during which
2854 * dev->IFF_UP flag is still on.
2856 if (bp->state == BNX2X_STATE_CLOSED || bp->state == BNX2X_STATE_ERROR)
2859 /* It's important to set the bp->state to the value different from
2860 * BNX2X_STATE_OPEN and only then stop the Tx. Otherwise bnx2x_tx_int()
2861 * may restart the Tx from the NAPI context (see bnx2x_tx_int()).
2863 bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT;
2866 if (CNIC_LOADED(bp))
2867 bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD);
2870 bnx2x_tx_disable(bp);
2871 netdev_reset_tc(bp->dev);
2873 bp->rx_mode = BNX2X_RX_MODE_NONE;
2875 del_timer_sync(&bp->timer);
2878 /* Set ALWAYS_ALIVE bit in shmem */
2879 bp->fw_drv_pulse_wr_seq |= DRV_PULSE_ALWAYS_ALIVE;
2880 bnx2x_drv_pulse(bp);
2881 bnx2x_stats_handle(bp, STATS_EVENT_STOP);
2882 bnx2x_save_statistics(bp);
2885 /* wait till consumers catch up with producers in all queues */
2886 bnx2x_drain_tx_queues(bp);
2888 /* if VF indicate to PF this function is going down (PF will delete sp
2889 * elements and clear initializations
2892 bnx2x_vfpf_close_vf(bp);
2893 else if (unload_mode != UNLOAD_RECOVERY)
2894 /* if this is a normal/close unload need to clean up chip*/
2895 bnx2x_chip_cleanup(bp, unload_mode, keep_link);
2897 /* Send the UNLOAD_REQUEST to the MCP */
2898 bnx2x_send_unload_req(bp, unload_mode);
2901 * Prevent transactions to host from the functions on the
2902 * engine that doesn't reset global blocks in case of global
2903 * attention once gloabl blocks are reset and gates are opened
2904 * (the engine which leader will perform the recovery
2907 if (!CHIP_IS_E1x(bp))
2908 bnx2x_pf_disable(bp);
2910 /* Disable HW interrupts, NAPI */
2911 bnx2x_netif_stop(bp, 1);
2912 /* Delete all NAPI objects */
2913 bnx2x_del_all_napi(bp);
2914 if (CNIC_LOADED(bp))
2915 bnx2x_del_all_napi_cnic(bp);
2919 /* Report UNLOAD_DONE to MCP */
2920 bnx2x_send_unload_done(bp, false);
2924 * At this stage no more interrupts will arrive so we may safly clean
2925 * the queueable objects here in case they failed to get cleaned so far.
2928 bnx2x_squeeze_objects(bp);
2930 /* There should be no more pending SP commands at this stage */
2935 /* Free SKBs, SGEs, TPA pool and driver internals */
2936 bnx2x_free_skbs(bp);
2937 if (CNIC_LOADED(bp))
2938 bnx2x_free_skbs_cnic(bp);
2939 for_each_rx_queue(bp, i)
2940 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
2942 bnx2x_free_fp_mem(bp);
2943 if (CNIC_LOADED(bp))
2944 bnx2x_free_fp_mem_cnic(bp);
2947 if (CNIC_LOADED(bp))
2948 bnx2x_free_mem_cnic(bp);
2951 bp->state = BNX2X_STATE_CLOSED;
2952 bp->cnic_loaded = false;
2954 /* Check if there are pending parity attentions. If there are - set
2955 * RECOVERY_IN_PROGRESS.
2957 if (IS_PF(bp) && bnx2x_chk_parity_attn(bp, &global, false)) {
2958 bnx2x_set_reset_in_progress(bp);
2960 /* Set RESET_IS_GLOBAL if needed */
2962 bnx2x_set_reset_global(bp);
2966 /* The last driver must disable a "close the gate" if there is no
2967 * parity attention or "process kill" pending.
2970 !bnx2x_clear_pf_load(bp) &&
2971 bnx2x_reset_is_done(bp, BP_PATH(bp)))
2972 bnx2x_disable_close_the_gate(bp);
2974 DP(NETIF_MSG_IFUP, "Ending NIC unload\n");
2979 int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state)
2983 /* If there is no power capability, silently succeed */
2985 BNX2X_DEV_INFO("No power capability. Breaking.\n");
2989 pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, &pmcsr);
2993 pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL,
2994 ((pmcsr & ~PCI_PM_CTRL_STATE_MASK) |
2995 PCI_PM_CTRL_PME_STATUS));
2997 if (pmcsr & PCI_PM_CTRL_STATE_MASK)
2998 /* delay required during transition out of D3hot */
3003 /* If there are other clients above don't
3004 shut down the power */
3005 if (atomic_read(&bp->pdev->enable_cnt) != 1)
3007 /* Don't shut down the power for emulation and FPGA */
3008 if (CHIP_REV_IS_SLOW(bp))
3011 pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
3015 pmcsr |= PCI_PM_CTRL_PME_ENABLE;
3017 pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL,
3020 /* No more memory access after this point until
3021 * device is brought back to D0.
3026 dev_err(&bp->pdev->dev, "Can't support state = %d\n", state);
3033 * net_device service functions
3035 int bnx2x_poll(struct napi_struct *napi, int budget)
3039 struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath,
3041 struct bnx2x *bp = fp->bp;
3044 #ifdef BNX2X_STOP_ON_ERROR
3045 if (unlikely(bp->panic)) {
3046 napi_complete(napi);
3051 for_each_cos_in_tx_queue(fp, cos)
3052 if (bnx2x_tx_queue_has_work(fp->txdata_ptr[cos]))
3053 bnx2x_tx_int(bp, fp->txdata_ptr[cos]);
3055 if (bnx2x_has_rx_work(fp)) {
3056 work_done += bnx2x_rx_int(fp, budget - work_done);
3058 /* must not complete if we consumed full budget */
3059 if (work_done >= budget)
3063 /* Fall out from the NAPI loop if needed */
3064 if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
3066 /* No need to update SB for FCoE L2 ring as long as
3067 * it's connected to the default SB and the SB
3068 * has been updated when NAPI was scheduled.
3070 if (IS_FCOE_FP(fp)) {
3071 napi_complete(napi);
3074 bnx2x_update_fpsb_idx(fp);
3075 /* bnx2x_has_rx_work() reads the status block,
3076 * thus we need to ensure that status block indices
3077 * have been actually read (bnx2x_update_fpsb_idx)
3078 * prior to this check (bnx2x_has_rx_work) so that
3079 * we won't write the "newer" value of the status block
3080 * to IGU (if there was a DMA right after
3081 * bnx2x_has_rx_work and if there is no rmb, the memory
3082 * reading (bnx2x_update_fpsb_idx) may be postponed
3083 * to right before bnx2x_ack_sb). In this case there
3084 * will never be another interrupt until there is
3085 * another update of the status block, while there
3086 * is still unhandled work.
3090 if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
3091 napi_complete(napi);
3092 /* Re-enable interrupts */
3093 DP(NETIF_MSG_RX_STATUS,
3094 "Update index to %d\n", fp->fp_hc_idx);
3095 bnx2x_ack_sb(bp, fp->igu_sb_id, USTORM_ID,
3096 le16_to_cpu(fp->fp_hc_idx),
3106 /* we split the first BD into headers and data BDs
3107 * to ease the pain of our fellow microcode engineers
3108 * we use one mapping for both BDs
3110 static u16 bnx2x_tx_split(struct bnx2x *bp,
3111 struct bnx2x_fp_txdata *txdata,
3112 struct sw_tx_bd *tx_buf,
3113 struct eth_tx_start_bd **tx_bd, u16 hlen,
3116 struct eth_tx_start_bd *h_tx_bd = *tx_bd;
3117 struct eth_tx_bd *d_tx_bd;
3119 int old_len = le16_to_cpu(h_tx_bd->nbytes);
3121 /* first fix first BD */
3122 h_tx_bd->nbytes = cpu_to_le16(hlen);
3124 DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d (%x:%x)\n",
3125 h_tx_bd->nbytes, h_tx_bd->addr_hi, h_tx_bd->addr_lo);
3127 /* now get a new data BD
3128 * (after the pbd) and fill it */
3129 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3130 d_tx_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
3132 mapping = HILO_U64(le32_to_cpu(h_tx_bd->addr_hi),
3133 le32_to_cpu(h_tx_bd->addr_lo)) + hlen;
3135 d_tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
3136 d_tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
3137 d_tx_bd->nbytes = cpu_to_le16(old_len - hlen);
3139 /* this marks the BD as one that has no individual mapping */
3140 tx_buf->flags |= BNX2X_TSO_SPLIT_BD;
3142 DP(NETIF_MSG_TX_QUEUED,
3143 "TSO split data size is %d (%x:%x)\n",
3144 d_tx_bd->nbytes, d_tx_bd->addr_hi, d_tx_bd->addr_lo);
3147 *tx_bd = (struct eth_tx_start_bd *)d_tx_bd;
3152 #define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32)))
3153 #define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16)))
3154 static __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix)
3156 __sum16 tsum = (__force __sum16) csum;
3159 tsum = ~csum_fold(csum_sub((__force __wsum) csum,
3160 csum_partial(t_header - fix, fix, 0)));
3163 tsum = ~csum_fold(csum_add((__force __wsum) csum,
3164 csum_partial(t_header, -fix, 0)));
3166 return bswab16(tsum);
3169 static u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb)
3175 if (skb->ip_summed != CHECKSUM_PARTIAL)
3178 protocol = vlan_get_protocol(skb);
3179 if (protocol == htons(ETH_P_IPV6)) {
3181 prot = ipv6_hdr(skb)->nexthdr;
3184 prot = ip_hdr(skb)->protocol;
3187 if (!CHIP_IS_E1x(bp) && skb->encapsulation) {
3188 if (inner_ip_hdr(skb)->version == 6) {
3189 rc |= XMIT_CSUM_ENC_V6;
3190 if (inner_ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
3191 rc |= XMIT_CSUM_TCP;
3193 rc |= XMIT_CSUM_ENC_V4;
3194 if (inner_ip_hdr(skb)->protocol == IPPROTO_TCP)
3195 rc |= XMIT_CSUM_TCP;
3198 if (prot == IPPROTO_TCP)
3199 rc |= XMIT_CSUM_TCP;
3201 if (skb_is_gso_v6(skb)) {
3202 rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP);
3203 if (rc & XMIT_CSUM_ENC)
3204 rc |= XMIT_GSO_ENC_V6;
3205 } else if (skb_is_gso(skb)) {
3206 rc |= (XMIT_GSO_V4 | XMIT_CSUM_TCP);
3207 if (rc & XMIT_CSUM_ENC)
3208 rc |= XMIT_GSO_ENC_V4;
3214 #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - 3)
3215 /* check if packet requires linearization (packet is too fragmented)
3216 no need to check fragmentation if page size > 8K (there will be no
3217 violation to FW restrictions) */
3218 static int bnx2x_pkt_req_lin(struct bnx2x *bp, struct sk_buff *skb,
3223 int first_bd_sz = 0;
3225 /* 3 = 1 (for linear data BD) + 2 (for PBD and last BD) */
3226 if (skb_shinfo(skb)->nr_frags >= (MAX_FETCH_BD - 3)) {
3228 if (xmit_type & XMIT_GSO) {
3229 unsigned short lso_mss = skb_shinfo(skb)->gso_size;
3230 /* Check if LSO packet needs to be copied:
3231 3 = 1 (for headers BD) + 2 (for PBD and last BD) */
3232 int wnd_size = MAX_FETCH_BD - 3;
3233 /* Number of windows to check */
3234 int num_wnds = skb_shinfo(skb)->nr_frags - wnd_size;
3239 /* Headers length */
3240 hlen = (int)(skb_transport_header(skb) - skb->data) +
3243 /* Amount of data (w/o headers) on linear part of SKB*/
3244 first_bd_sz = skb_headlen(skb) - hlen;
3246 wnd_sum = first_bd_sz;
3248 /* Calculate the first sum - it's special */
3249 for (frag_idx = 0; frag_idx < wnd_size - 1; frag_idx++)
3251 skb_frag_size(&skb_shinfo(skb)->frags[frag_idx]);
3253 /* If there was data on linear skb data - check it */
3254 if (first_bd_sz > 0) {
3255 if (unlikely(wnd_sum < lso_mss)) {
3260 wnd_sum -= first_bd_sz;
3263 /* Others are easier: run through the frag list and
3264 check all windows */
3265 for (wnd_idx = 0; wnd_idx <= num_wnds; wnd_idx++) {
3267 skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx + wnd_size - 1]);
3269 if (unlikely(wnd_sum < lso_mss)) {
3274 skb_frag_size(&skb_shinfo(skb)->frags[wnd_idx]);
3277 /* in non-LSO too fragmented packet should always
3284 if (unlikely(to_copy))
3285 DP(NETIF_MSG_TX_QUEUED,
3286 "Linearization IS REQUIRED for %s packet. num_frags %d hlen %d first_bd_sz %d\n",
3287 (xmit_type & XMIT_GSO) ? "LSO" : "non-LSO",
3288 skb_shinfo(skb)->nr_frags, hlen, first_bd_sz);
3294 static void bnx2x_set_pbd_gso_e2(struct sk_buff *skb, u32 *parsing_data,
3297 struct ipv6hdr *ipv6;
3299 *parsing_data |= (skb_shinfo(skb)->gso_size <<
3300 ETH_TX_PARSE_BD_E2_LSO_MSS_SHIFT) &
3301 ETH_TX_PARSE_BD_E2_LSO_MSS;
3303 if (xmit_type & XMIT_GSO_ENC_V6)
3304 ipv6 = inner_ipv6_hdr(skb);
3305 else if (xmit_type & XMIT_GSO_V6)
3306 ipv6 = ipv6_hdr(skb);
3310 if (ipv6 && ipv6->nexthdr == NEXTHDR_IPV6)
3311 *parsing_data |= ETH_TX_PARSE_BD_E2_IPV6_WITH_EXT_HDR;
3315 * bnx2x_set_pbd_gso - update PBD in GSO case.
3319 * @xmit_type: xmit flags
3321 static void bnx2x_set_pbd_gso(struct sk_buff *skb,
3322 struct eth_tx_parse_bd_e1x *pbd,
3323 struct eth_tx_start_bd *tx_start_bd,
3326 pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
3327 pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq);
3328 pbd->tcp_flags = pbd_tcp_flags(tcp_hdr(skb));
3330 if (xmit_type & XMIT_GSO_V4) {
3331 pbd->ip_id = bswab16(ip_hdr(skb)->id);
3332 pbd->tcp_pseudo_csum =
3333 bswab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
3335 0, IPPROTO_TCP, 0));
3337 /* GSO on 57710/57711 needs FW to calculate IP checksum */
3338 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IP_CSUM;
3340 pbd->tcp_pseudo_csum =
3341 bswab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
3342 &ipv6_hdr(skb)->daddr,
3343 0, IPPROTO_TCP, 0));
3347 cpu_to_le16(ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN);
3351 * bnx2x_set_pbd_csum_enc - update PBD with checksum and return header length
3353 * @bp: driver handle
3355 * @parsing_data: data to be updated
3356 * @xmit_type: xmit flags
3358 * 57712/578xx related, when skb has encapsulation
3360 static u8 bnx2x_set_pbd_csum_enc(struct bnx2x *bp, struct sk_buff *skb,
3361 u32 *parsing_data, u32 xmit_type)
3364 ((((u8 *)skb_inner_transport_header(skb) - skb->data) >> 1) <<
3365 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
3366 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
3368 if (xmit_type & XMIT_CSUM_TCP) {
3369 *parsing_data |= ((inner_tcp_hdrlen(skb) / 4) <<
3370 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) &
3371 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW;
3373 return skb_inner_transport_header(skb) +
3374 inner_tcp_hdrlen(skb) - skb->data;
3377 /* We support checksum offload for TCP and UDP only.
3378 * No need to pass the UDP header length - it's a constant.
3380 return skb_inner_transport_header(skb) +
3381 sizeof(struct udphdr) - skb->data;
3385 * bnx2x_set_pbd_csum_e2 - update PBD with checksum and return header length
3387 * @bp: driver handle
3389 * @parsing_data: data to be updated
3390 * @xmit_type: xmit flags
3392 * 57712/578xx related
3394 static u8 bnx2x_set_pbd_csum_e2(struct bnx2x *bp, struct sk_buff *skb,
3395 u32 *parsing_data, u32 xmit_type)
3398 ((((u8 *)skb_transport_header(skb) - skb->data) >> 1) <<
3399 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W_SHIFT) &
3400 ETH_TX_PARSE_BD_E2_L4_HDR_START_OFFSET_W;
3402 if (xmit_type & XMIT_CSUM_TCP) {
3403 *parsing_data |= ((tcp_hdrlen(skb) / 4) <<
3404 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW_SHIFT) &
3405 ETH_TX_PARSE_BD_E2_TCP_HDR_LENGTH_DW;
3407 return skb_transport_header(skb) + tcp_hdrlen(skb) - skb->data;
3409 /* We support checksum offload for TCP and UDP only.
3410 * No need to pass the UDP header length - it's a constant.
3412 return skb_transport_header(skb) + sizeof(struct udphdr) - skb->data;
3415 /* set FW indication according to inner or outer protocols if tunneled */
3416 static void bnx2x_set_sbd_csum(struct bnx2x *bp, struct sk_buff *skb,
3417 struct eth_tx_start_bd *tx_start_bd,
3420 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM;
3422 if (xmit_type & (XMIT_CSUM_ENC_V6 | XMIT_CSUM_V6))
3423 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IPV6;
3425 if (!(xmit_type & XMIT_CSUM_TCP))
3426 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_IS_UDP;
3430 * bnx2x_set_pbd_csum - update PBD with checksum and return header length
3432 * @bp: driver handle
3434 * @pbd: parse BD to be updated
3435 * @xmit_type: xmit flags
3437 static u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
3438 struct eth_tx_parse_bd_e1x *pbd,
3441 u8 hlen = (skb_network_header(skb) - skb->data) >> 1;
3443 /* for now NS flag is not used in Linux */
3446 ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
3447 ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT));
3449 pbd->ip_hlen_w = (skb_transport_header(skb) -
3450 skb_network_header(skb)) >> 1;
3452 hlen += pbd->ip_hlen_w;
3454 /* We support checksum offload for TCP and UDP only */
3455 if (xmit_type & XMIT_CSUM_TCP)
3456 hlen += tcp_hdrlen(skb) / 2;
3458 hlen += sizeof(struct udphdr) / 2;
3460 pbd->total_hlen_w = cpu_to_le16(hlen);
3463 if (xmit_type & XMIT_CSUM_TCP) {
3464 pbd->tcp_pseudo_csum = bswab16(tcp_hdr(skb)->check);
3467 s8 fix = SKB_CS_OFF(skb); /* signed! */
3469 DP(NETIF_MSG_TX_QUEUED,
3470 "hlen %d fix %d csum before fix %x\n",
3471 le16_to_cpu(pbd->total_hlen_w), fix, SKB_CS(skb));
3473 /* HW bug: fixup the CSUM */
3474 pbd->tcp_pseudo_csum =
3475 bnx2x_csum_fix(skb_transport_header(skb),
3478 DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n",
3479 pbd->tcp_pseudo_csum);
3485 static void bnx2x_update_pbds_gso_enc(struct sk_buff *skb,
3486 struct eth_tx_parse_bd_e2 *pbd_e2,
3487 struct eth_tx_parse_2nd_bd *pbd2,
3492 u8 outerip_off, outerip_len = 0;
3494 /* from outer IP to transport */
3495 hlen_w = (skb_inner_transport_header(skb) -
3496 skb_network_header(skb)) >> 1;
3499 hlen_w += inner_tcp_hdrlen(skb) >> 1;
3501 pbd2->fw_ip_hdr_to_payload_w = hlen_w;
3503 /* outer IP header info */
3504 if (xmit_type & XMIT_CSUM_V4) {
3505 struct iphdr *iph = ip_hdr(skb);
3506 pbd2->fw_ip_csum_wo_len_flags_frag =
3507 bswab16(csum_fold((~iph->check) -
3508 iph->tot_len - iph->frag_off));
3510 pbd2->fw_ip_hdr_to_payload_w =
3511 hlen_w - ((sizeof(struct ipv6hdr)) >> 1);
3514 pbd2->tcp_send_seq = bswab32(inner_tcp_hdr(skb)->seq);
3516 pbd2->tcp_flags = pbd_tcp_flags(inner_tcp_hdr(skb));
3518 if (xmit_type & XMIT_GSO_V4) {
3519 pbd2->hw_ip_id = bswab16(inner_ip_hdr(skb)->id);
3521 pbd_e2->data.tunnel_data.pseudo_csum =
3522 bswab16(~csum_tcpudp_magic(
3523 inner_ip_hdr(skb)->saddr,
3524 inner_ip_hdr(skb)->daddr,
3525 0, IPPROTO_TCP, 0));
3527 outerip_len = ip_hdr(skb)->ihl << 1;
3529 pbd_e2->data.tunnel_data.pseudo_csum =
3530 bswab16(~csum_ipv6_magic(
3531 &inner_ipv6_hdr(skb)->saddr,
3532 &inner_ipv6_hdr(skb)->daddr,
3533 0, IPPROTO_TCP, 0));
3536 outerip_off = (skb_network_header(skb) - skb->data) >> 1;
3540 (!!(xmit_type & XMIT_CSUM_V6) <<
3541 ETH_TX_PARSE_2ND_BD_IP_HDR_TYPE_OUTER_SHIFT) |
3543 ETH_TX_PARSE_2ND_BD_IP_HDR_LEN_OUTER_W_SHIFT) |
3544 ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
3545 ETH_TX_PARSE_2ND_BD_LLC_SNAP_EN_SHIFT);
3547 if (ip_hdr(skb)->protocol == IPPROTO_UDP) {
3548 SET_FLAG(*global_data, ETH_TX_PARSE_2ND_BD_TUNNEL_UDP_EXIST, 1);
3549 pbd2->tunnel_udp_hdr_start_w = skb_transport_offset(skb) >> 1;
3553 /* called with netif_tx_lock
3554 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call
3555 * netif_wake_queue()
3557 netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
3559 struct bnx2x *bp = netdev_priv(dev);
3561 struct netdev_queue *txq;
3562 struct bnx2x_fp_txdata *txdata;
3563 struct sw_tx_bd *tx_buf;
3564 struct eth_tx_start_bd *tx_start_bd, *first_bd;
3565 struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL;
3566 struct eth_tx_parse_bd_e1x *pbd_e1x = NULL;
3567 struct eth_tx_parse_bd_e2 *pbd_e2 = NULL;
3568 struct eth_tx_parse_2nd_bd *pbd2 = NULL;
3569 u32 pbd_e2_parsing_data = 0;
3570 u16 pkt_prod, bd_prod;
3573 u32 xmit_type = bnx2x_xmit_type(bp, skb);
3576 __le16 pkt_size = 0;
3578 u8 mac_type = UNICAST_ADDRESS;
3580 #ifdef BNX2X_STOP_ON_ERROR
3581 if (unlikely(bp->panic))
3582 return NETDEV_TX_BUSY;
3585 txq_index = skb_get_queue_mapping(skb);
3586 txq = netdev_get_tx_queue(dev, txq_index);
3588 BUG_ON(txq_index >= MAX_ETH_TXQ_IDX(bp) + (CNIC_LOADED(bp) ? 1 : 0));
3590 txdata = &bp->bnx2x_txq[txq_index];
3592 /* enable this debug print to view the transmission queue being used
3593 DP(NETIF_MSG_TX_QUEUED, "indices: txq %d, fp %d, txdata %d\n",
3594 txq_index, fp_index, txdata_index); */
3596 /* enable this debug print to view the tranmission details
3597 DP(NETIF_MSG_TX_QUEUED,
3598 "transmitting packet cid %d fp index %d txdata_index %d tx_data ptr %p fp pointer %p\n",
3599 txdata->cid, fp_index, txdata_index, txdata, fp); */
3601 if (unlikely(bnx2x_tx_avail(bp, txdata) <
3602 skb_shinfo(skb)->nr_frags +
3604 NEXT_CNT_PER_TX_PKT(MAX_BDS_PER_TX_PKT))) {
3605 /* Handle special storage cases separately */
3606 if (txdata->tx_ring_size == 0) {
3607 struct bnx2x_eth_q_stats *q_stats =
3608 bnx2x_fp_qstats(bp, txdata->parent_fp);
3609 q_stats->driver_filtered_tx_pkt++;
3611 return NETDEV_TX_OK;
3613 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
3614 netif_tx_stop_queue(txq);
3615 BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
3617 return NETDEV_TX_BUSY;
3620 DP(NETIF_MSG_TX_QUEUED,
3621 "queue[%d]: SKB: summed %x protocol %x protocol(%x,%x) gso type %x xmit_type %x len %d\n",
3622 txq_index, skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr,
3623 ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type,
3626 eth = (struct ethhdr *)skb->data;
3628 /* set flag according to packet type (UNICAST_ADDRESS is default)*/
3629 if (unlikely(is_multicast_ether_addr(eth->h_dest))) {
3630 if (is_broadcast_ether_addr(eth->h_dest))
3631 mac_type = BROADCAST_ADDRESS;
3633 mac_type = MULTICAST_ADDRESS;
3636 #if (MAX_SKB_FRAGS >= MAX_FETCH_BD - BDS_PER_TX_PKT)
3637 /* First, check if we need to linearize the skb (due to FW
3638 restrictions). No need to check fragmentation if page size > 8K
3639 (there will be no violation to FW restrictions) */
3640 if (bnx2x_pkt_req_lin(bp, skb, xmit_type)) {
3641 /* Statistics of linearization */
3643 if (skb_linearize(skb) != 0) {
3644 DP(NETIF_MSG_TX_QUEUED,
3645 "SKB linearization failed - silently dropping this SKB\n");
3646 dev_kfree_skb_any(skb);
3647 return NETDEV_TX_OK;
3651 /* Map skb linear data for DMA */
3652 mapping = dma_map_single(&bp->pdev->dev, skb->data,
3653 skb_headlen(skb), DMA_TO_DEVICE);
3654 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
3655 DP(NETIF_MSG_TX_QUEUED,
3656 "SKB mapping failed - silently dropping this SKB\n");
3657 dev_kfree_skb_any(skb);
3658 return NETDEV_TX_OK;
3661 Please read carefully. First we use one BD which we mark as start,
3662 then we have a parsing info BD (used for TSO or xsum),
3663 and only then we have the rest of the TSO BDs.
3664 (don't forget to mark the last one as last,
3665 and to unmap only AFTER you write to the BD ...)
3666 And above all, all pdb sizes are in words - NOT DWORDS!
3669 /* get current pkt produced now - advance it just before sending packet
3670 * since mapping of pages may fail and cause packet to be dropped
3672 pkt_prod = txdata->tx_pkt_prod;
3673 bd_prod = TX_BD(txdata->tx_bd_prod);
3675 /* get a tx_buf and first BD
3676 * tx_start_bd may be changed during SPLIT,
3677 * but first_bd will always stay first
3679 tx_buf = &txdata->tx_buf_ring[TX_BD(pkt_prod)];
3680 tx_start_bd = &txdata->tx_desc_ring[bd_prod].start_bd;
3681 first_bd = tx_start_bd;
3683 tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD;
3685 /* header nbd: indirectly zero other flags! */
3686 tx_start_bd->general_data = 1 << ETH_TX_START_BD_HDR_NBDS_SHIFT;
3688 /* remember the first BD of the packet */
3689 tx_buf->first_bd = txdata->tx_bd_prod;
3693 DP(NETIF_MSG_TX_QUEUED,
3694 "sending pkt %u @%p next_idx %u bd %u @%p\n",
3695 pkt_prod, tx_buf, txdata->tx_pkt_prod, bd_prod, tx_start_bd);
3697 if (vlan_tx_tag_present(skb)) {
3698 tx_start_bd->vlan_or_ethertype =
3699 cpu_to_le16(vlan_tx_tag_get(skb));
3700 tx_start_bd->bd_flags.as_bitfield |=
3701 (X_ETH_OUTBAND_VLAN << ETH_TX_BD_FLAGS_VLAN_MODE_SHIFT);
3703 /* when transmitting in a vf, start bd must hold the ethertype
3704 * for fw to enforce it
3707 tx_start_bd->vlan_or_ethertype =
3708 cpu_to_le16(ntohs(eth->h_proto));
3710 /* used by FW for packet accounting */
3711 tx_start_bd->vlan_or_ethertype = cpu_to_le16(pkt_prod);
3714 nbd = 2; /* start_bd + pbd + frags (updated when pages are mapped) */
3716 /* turn on parsing and get a BD */
3717 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3719 if (xmit_type & XMIT_CSUM)
3720 bnx2x_set_sbd_csum(bp, skb, tx_start_bd, xmit_type);
3722 if (!CHIP_IS_E1x(bp)) {
3723 pbd_e2 = &txdata->tx_desc_ring[bd_prod].parse_bd_e2;
3724 memset(pbd_e2, 0, sizeof(struct eth_tx_parse_bd_e2));
3726 if (xmit_type & XMIT_CSUM_ENC) {
3727 u16 global_data = 0;
3729 /* Set PBD in enc checksum offload case */
3730 hlen = bnx2x_set_pbd_csum_enc(bp, skb,
3731 &pbd_e2_parsing_data,
3734 /* turn on 2nd parsing and get a BD */
3735 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3737 pbd2 = &txdata->tx_desc_ring[bd_prod].parse_2nd_bd;
3739 memset(pbd2, 0, sizeof(*pbd2));
3741 pbd_e2->data.tunnel_data.ip_hdr_start_inner_w =
3742 (skb_inner_network_header(skb) -
3745 if (xmit_type & XMIT_GSO_ENC)
3746 bnx2x_update_pbds_gso_enc(skb, pbd_e2, pbd2,
3750 pbd2->global_data = cpu_to_le16(global_data);
3752 /* add addition parse BD indication to start BD */
3753 SET_FLAG(tx_start_bd->general_data,
3754 ETH_TX_START_BD_PARSE_NBDS, 1);
3755 /* set encapsulation flag in start BD */
3756 SET_FLAG(tx_start_bd->general_data,
3757 ETH_TX_START_BD_TUNNEL_EXIST, 1);
3759 } else if (xmit_type & XMIT_CSUM) {
3760 /* Set PBD in checksum offload case w/o encapsulation */
3761 hlen = bnx2x_set_pbd_csum_e2(bp, skb,
3762 &pbd_e2_parsing_data,
3766 /* Add the macs to the parsing BD this is a vf */
3768 /* override GRE parameters in BD */
3769 bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.src_hi,
3770 &pbd_e2->data.mac_addr.src_mid,
3771 &pbd_e2->data.mac_addr.src_lo,
3774 bnx2x_set_fw_mac_addr(&pbd_e2->data.mac_addr.dst_hi,
3775 &pbd_e2->data.mac_addr.dst_mid,
3776 &pbd_e2->data.mac_addr.dst_lo,
3780 SET_FLAG(pbd_e2_parsing_data,
3781 ETH_TX_PARSE_BD_E2_ETH_ADDR_TYPE, mac_type);
3783 u16 global_data = 0;
3784 pbd_e1x = &txdata->tx_desc_ring[bd_prod].parse_bd_e1x;
3785 memset(pbd_e1x, 0, sizeof(struct eth_tx_parse_bd_e1x));
3786 /* Set PBD in checksum offload case */
3787 if (xmit_type & XMIT_CSUM)
3788 hlen = bnx2x_set_pbd_csum(bp, skb, pbd_e1x, xmit_type);
3790 SET_FLAG(global_data,
3791 ETH_TX_PARSE_BD_E1X_ETH_ADDR_TYPE, mac_type);
3792 pbd_e1x->global_data |= cpu_to_le16(global_data);
3795 /* Setup the data pointer of the first BD of the packet */
3796 tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
3797 tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
3798 tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb));
3799 pkt_size = tx_start_bd->nbytes;
3801 DP(NETIF_MSG_TX_QUEUED,
3802 "first bd @%p addr (%x:%x) nbytes %d flags %x vlan %x\n",
3803 tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo,
3804 le16_to_cpu(tx_start_bd->nbytes),
3805 tx_start_bd->bd_flags.as_bitfield,
3806 le16_to_cpu(tx_start_bd->vlan_or_ethertype));
3808 if (xmit_type & XMIT_GSO) {
3810 DP(NETIF_MSG_TX_QUEUED,
3811 "TSO packet len %d hlen %d total len %d tso size %d\n",
3812 skb->len, hlen, skb_headlen(skb),
3813 skb_shinfo(skb)->gso_size);
3815 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO;
3817 if (unlikely(skb_headlen(skb) > hlen)) {
3819 bd_prod = bnx2x_tx_split(bp, txdata, tx_buf,
3823 if (!CHIP_IS_E1x(bp))
3824 bnx2x_set_pbd_gso_e2(skb, &pbd_e2_parsing_data,
3827 bnx2x_set_pbd_gso(skb, pbd_e1x, first_bd, xmit_type);
3830 /* Set the PBD's parsing_data field if not zero
3831 * (for the chips newer than 57711).
3833 if (pbd_e2_parsing_data)
3834 pbd_e2->parsing_data = cpu_to_le32(pbd_e2_parsing_data);
3836 tx_data_bd = (struct eth_tx_bd *)tx_start_bd;
3838 /* Handle fragmented skb */
3839 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
3840 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
3842 mapping = skb_frag_dma_map(&bp->pdev->dev, frag, 0,
3843 skb_frag_size(frag), DMA_TO_DEVICE);
3844 if (unlikely(dma_mapping_error(&bp->pdev->dev, mapping))) {
3845 unsigned int pkts_compl = 0, bytes_compl = 0;
3847 DP(NETIF_MSG_TX_QUEUED,
3848 "Unable to map page - dropping packet...\n");
3850 /* we need unmap all buffers already mapped
3852 * first_bd->nbd need to be properly updated
3853 * before call to bnx2x_free_tx_pkt
3855 first_bd->nbd = cpu_to_le16(nbd);
3856 bnx2x_free_tx_pkt(bp, txdata,
3857 TX_BD(txdata->tx_pkt_prod),
3858 &pkts_compl, &bytes_compl);
3859 return NETDEV_TX_OK;
3862 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3863 tx_data_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
3864 if (total_pkt_bd == NULL)
3865 total_pkt_bd = &txdata->tx_desc_ring[bd_prod].reg_bd;
3867 tx_data_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
3868 tx_data_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
3869 tx_data_bd->nbytes = cpu_to_le16(skb_frag_size(frag));
3870 le16_add_cpu(&pkt_size, skb_frag_size(frag));
3873 DP(NETIF_MSG_TX_QUEUED,
3874 "frag %d bd @%p addr (%x:%x) nbytes %d\n",
3875 i, tx_data_bd, tx_data_bd->addr_hi, tx_data_bd->addr_lo,
3876 le16_to_cpu(tx_data_bd->nbytes));
3879 DP(NETIF_MSG_TX_QUEUED, "last bd @%p\n", tx_data_bd);
3881 /* update with actual num BDs */
3882 first_bd->nbd = cpu_to_le16(nbd);
3884 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
3886 /* now send a tx doorbell, counting the next BD
3887 * if the packet contains or ends with it
3889 if (TX_BD_POFF(bd_prod) < nbd)
3892 /* total_pkt_bytes should be set on the first data BD if
3893 * it's not an LSO packet and there is more than one
3894 * data BD. In this case pkt_size is limited by an MTU value.
3895 * However we prefer to set it for an LSO packet (while we don't
3896 * have to) in order to save some CPU cycles in a none-LSO
3897 * case, when we much more care about them.
3899 if (total_pkt_bd != NULL)
3900 total_pkt_bd->total_pkt_bytes = pkt_size;
3903 DP(NETIF_MSG_TX_QUEUED,
3904 "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",
3905 pbd_e1x, pbd_e1x->global_data, pbd_e1x->ip_hlen_w,
3906 pbd_e1x->ip_id, pbd_e1x->lso_mss, pbd_e1x->tcp_flags,
3907 pbd_e1x->tcp_pseudo_csum, pbd_e1x->tcp_send_seq,
3908 le16_to_cpu(pbd_e1x->total_hlen_w));
3910 DP(NETIF_MSG_TX_QUEUED,
3911 "PBD (E2) @%p dst %x %x %x src %x %x %x parsing_data %x\n",
3913 pbd_e2->data.mac_addr.dst_hi,
3914 pbd_e2->data.mac_addr.dst_mid,
3915 pbd_e2->data.mac_addr.dst_lo,
3916 pbd_e2->data.mac_addr.src_hi,
3917 pbd_e2->data.mac_addr.src_mid,
3918 pbd_e2->data.mac_addr.src_lo,
3919 pbd_e2->parsing_data);
3920 DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod);
3922 netdev_tx_sent_queue(txq, skb->len);
3924 skb_tx_timestamp(skb);
3926 txdata->tx_pkt_prod++;
3928 * Make sure that the BD data is updated before updating the producer
3929 * since FW might read the BD right after the producer is updated.
3930 * This is only applicable for weak-ordered memory model archs such
3931 * as IA-64. The following barrier is also mandatory since FW will
3932 * assumes packets must have BDs.
3936 txdata->tx_db.data.prod += nbd;
3939 DOORBELL(bp, txdata->cid, txdata->tx_db.raw);
3943 txdata->tx_bd_prod += nbd;
3945 if (unlikely(bnx2x_tx_avail(bp, txdata) < MAX_DESC_PER_TX_PKT)) {
3946 netif_tx_stop_queue(txq);
3948 /* paired memory barrier is in bnx2x_tx_int(), we have to keep
3949 * ordering of set_bit() in netif_tx_stop_queue() and read of
3953 bnx2x_fp_qstats(bp, txdata->parent_fp)->driver_xoff++;
3954 if (bnx2x_tx_avail(bp, txdata) >= MAX_DESC_PER_TX_PKT)
3955 netif_tx_wake_queue(txq);
3959 return NETDEV_TX_OK;
3963 * bnx2x_setup_tc - routine to configure net_device for multi tc
3965 * @netdev: net device to configure
3966 * @tc: number of traffic classes to enable
3968 * callback connected to the ndo_setup_tc function pointer
3970 int bnx2x_setup_tc(struct net_device *dev, u8 num_tc)
3972 int cos, prio, count, offset;
3973 struct bnx2x *bp = netdev_priv(dev);
3975 /* setup tc must be called under rtnl lock */
3978 /* no traffic classes requested. aborting */
3980 netdev_reset_tc(dev);
3984 /* requested to support too many traffic classes */
3985 if (num_tc > bp->max_cos) {
3986 BNX2X_ERR("support for too many traffic classes requested: %d. max supported is %d\n",
3987 num_tc, bp->max_cos);
3991 /* declare amount of supported traffic classes */
3992 if (netdev_set_num_tc(dev, num_tc)) {
3993 BNX2X_ERR("failed to declare %d traffic classes\n", num_tc);
3997 /* configure priority to traffic class mapping */
3998 for (prio = 0; prio < BNX2X_MAX_PRIORITY; prio++) {
3999 netdev_set_prio_tc_map(dev, prio, bp->prio_to_cos[prio]);
4000 DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
4001 "mapping priority %d to tc %d\n",
4002 prio, bp->prio_to_cos[prio]);
4006 /* Use this configuration to diffrentiate tc0 from other COSes
4007 This can be used for ets or pfc, and save the effort of setting
4008 up a multio class queue disc or negotiating DCBX with a switch
4009 netdev_set_prio_tc_map(dev, 0, 0);
4010 DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", 0, 0);
4011 for (prio = 1; prio < 16; prio++) {
4012 netdev_set_prio_tc_map(dev, prio, 1);
4013 DP(BNX2X_MSG_SP, "mapping priority %d to tc %d\n", prio, 1);
4016 /* configure traffic class to transmission queue mapping */
4017 for (cos = 0; cos < bp->max_cos; cos++) {
4018 count = BNX2X_NUM_ETH_QUEUES(bp);
4019 offset = cos * BNX2X_NUM_NON_CNIC_QUEUES(bp);
4020 netdev_set_tc_queue(dev, cos, count, offset);
4021 DP(BNX2X_MSG_SP | NETIF_MSG_IFUP,
4022 "mapping tc %d to offset %d count %d\n",
4023 cos, offset, count);
4029 /* called with rtnl_lock */
4030 int bnx2x_change_mac_addr(struct net_device *dev, void *p)
4032 struct sockaddr *addr = p;
4033 struct bnx2x *bp = netdev_priv(dev);
4036 if (!bnx2x_is_valid_ether_addr(bp, addr->sa_data)) {
4037 BNX2X_ERR("Requested MAC address is not valid\n");
4041 if ((IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp)) &&
4042 !is_zero_ether_addr(addr->sa_data)) {
4043 BNX2X_ERR("Can't configure non-zero address on iSCSI or FCoE functions in MF-SD mode\n");
4047 if (netif_running(dev)) {
4048 rc = bnx2x_set_eth_mac(bp, false);
4053 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
4055 if (netif_running(dev))
4056 rc = bnx2x_set_eth_mac(bp, true);
4061 static void bnx2x_free_fp_mem_at(struct bnx2x *bp, int fp_index)
4063 union host_hc_status_block *sb = &bnx2x_fp(bp, fp_index, status_blk);
4064 struct bnx2x_fastpath *fp = &bp->fp[fp_index];
4069 if (IS_FCOE_IDX(fp_index)) {
4070 memset(sb, 0, sizeof(union host_hc_status_block));
4071 fp->status_blk_mapping = 0;
4074 if (!CHIP_IS_E1x(bp))
4075 BNX2X_PCI_FREE(sb->e2_sb,
4076 bnx2x_fp(bp, fp_index,
4077 status_blk_mapping),
4078 sizeof(struct host_hc_status_block_e2));
4080 BNX2X_PCI_FREE(sb->e1x_sb,
4081 bnx2x_fp(bp, fp_index,
4082 status_blk_mapping),
4083 sizeof(struct host_hc_status_block_e1x));
4087 if (!skip_rx_queue(bp, fp_index)) {
4088 bnx2x_free_rx_bds(fp);
4090 /* fastpath rx rings: rx_buf rx_desc rx_comp */
4091 BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_buf_ring));
4092 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_desc_ring),
4093 bnx2x_fp(bp, fp_index, rx_desc_mapping),
4094 sizeof(struct eth_rx_bd) * NUM_RX_BD);
4096 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_comp_ring),
4097 bnx2x_fp(bp, fp_index, rx_comp_mapping),
4098 sizeof(struct eth_fast_path_rx_cqe) *
4102 BNX2X_FREE(bnx2x_fp(bp, fp_index, rx_page_ring));
4103 BNX2X_PCI_FREE(bnx2x_fp(bp, fp_index, rx_sge_ring),
4104 bnx2x_fp(bp, fp_index, rx_sge_mapping),
4105 BCM_PAGE_SIZE * NUM_RX_SGE_PAGES);
4109 if (!skip_tx_queue(bp, fp_index)) {
4110 /* fastpath tx rings: tx_buf tx_desc */
4111 for_each_cos_in_tx_queue(fp, cos) {
4112 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
4114 DP(NETIF_MSG_IFDOWN,
4115 "freeing tx memory of fp %d cos %d cid %d\n",
4116 fp_index, cos, txdata->cid);
4118 BNX2X_FREE(txdata->tx_buf_ring);
4119 BNX2X_PCI_FREE(txdata->tx_desc_ring,
4120 txdata->tx_desc_mapping,
4121 sizeof(union eth_tx_bd_types) * NUM_TX_BD);
4124 /* end of fastpath */
4127 void bnx2x_free_fp_mem_cnic(struct bnx2x *bp)
4130 for_each_cnic_queue(bp, i)
4131 bnx2x_free_fp_mem_at(bp, i);
4134 void bnx2x_free_fp_mem(struct bnx2x *bp)
4137 for_each_eth_queue(bp, i)
4138 bnx2x_free_fp_mem_at(bp, i);
4141 static void set_sb_shortcuts(struct bnx2x *bp, int index)
4143 union host_hc_status_block status_blk = bnx2x_fp(bp, index, status_blk);
4144 if (!CHIP_IS_E1x(bp)) {
4145 bnx2x_fp(bp, index, sb_index_values) =
4146 (__le16 *)status_blk.e2_sb->sb.index_values;
4147 bnx2x_fp(bp, index, sb_running_index) =
4148 (__le16 *)status_blk.e2_sb->sb.running_index;
4150 bnx2x_fp(bp, index, sb_index_values) =
4151 (__le16 *)status_blk.e1x_sb->sb.index_values;
4152 bnx2x_fp(bp, index, sb_running_index) =
4153 (__le16 *)status_blk.e1x_sb->sb.running_index;
4157 /* Returns the number of actually allocated BDs */
4158 static int bnx2x_alloc_rx_bds(struct bnx2x_fastpath *fp,
4161 struct bnx2x *bp = fp->bp;
4162 u16 ring_prod, cqe_ring_prod;
4163 int i, failure_cnt = 0;
4165 fp->rx_comp_cons = 0;
4166 cqe_ring_prod = ring_prod = 0;
4168 /* This routine is called only during fo init so
4169 * fp->eth_q_stats.rx_skb_alloc_failed = 0
4171 for (i = 0; i < rx_ring_size; i++) {
4172 if (bnx2x_alloc_rx_data(bp, fp, ring_prod) < 0) {
4176 ring_prod = NEXT_RX_IDX(ring_prod);
4177 cqe_ring_prod = NEXT_RCQ_IDX(cqe_ring_prod);
4178 WARN_ON(ring_prod <= (i - failure_cnt));
4182 BNX2X_ERR("was only able to allocate %d rx skbs on queue[%d]\n",
4183 i - failure_cnt, fp->index);
4185 fp->rx_bd_prod = ring_prod;
4186 /* Limit the CQE producer by the CQE ring size */
4187 fp->rx_comp_prod = min_t(u16, NUM_RCQ_RINGS*RCQ_DESC_CNT,
4189 fp->rx_pkt = fp->rx_calls = 0;
4191 bnx2x_fp_stats(bp, fp)->eth_q_stats.rx_skb_alloc_failed += failure_cnt;
4193 return i - failure_cnt;
4196 static void bnx2x_set_next_page_rx_cq(struct bnx2x_fastpath *fp)
4200 for (i = 1; i <= NUM_RCQ_RINGS; i++) {
4201 struct eth_rx_cqe_next_page *nextpg;
4203 nextpg = (struct eth_rx_cqe_next_page *)
4204 &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1];
4206 cpu_to_le32(U64_HI(fp->rx_comp_mapping +
4207 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
4209 cpu_to_le32(U64_LO(fp->rx_comp_mapping +
4210 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
4214 static int bnx2x_alloc_fp_mem_at(struct bnx2x *bp, int index)
4216 union host_hc_status_block *sb;
4217 struct bnx2x_fastpath *fp = &bp->fp[index];
4220 int rx_ring_size = 0;
4222 if (!bp->rx_ring_size &&
4223 (IS_MF_STORAGE_SD(bp) || IS_MF_FCOE_AFEX(bp))) {
4224 rx_ring_size = MIN_RX_SIZE_NONTPA;
4225 bp->rx_ring_size = rx_ring_size;
4226 } else if (!bp->rx_ring_size) {
4227 rx_ring_size = MAX_RX_AVAIL/BNX2X_NUM_RX_QUEUES(bp);
4229 if (CHIP_IS_E3(bp)) {
4230 u32 cfg = SHMEM_RD(bp,
4231 dev_info.port_hw_config[BP_PORT(bp)].
4234 /* Decrease ring size for 1G functions */
4235 if ((cfg & PORT_HW_CFG_NET_SERDES_IF_MASK) ==
4236 PORT_HW_CFG_NET_SERDES_IF_SGMII)
4240 /* allocate at least number of buffers required by FW */
4241 rx_ring_size = max_t(int, bp->disable_tpa ? MIN_RX_SIZE_NONTPA :
4242 MIN_RX_SIZE_TPA, rx_ring_size);
4244 bp->rx_ring_size = rx_ring_size;
4245 } else /* if rx_ring_size specified - use it */
4246 rx_ring_size = bp->rx_ring_size;
4248 DP(BNX2X_MSG_SP, "calculated rx_ring_size %d\n", rx_ring_size);
4251 sb = &bnx2x_fp(bp, index, status_blk);
4253 if (!IS_FCOE_IDX(index)) {
4255 if (!CHIP_IS_E1x(bp))
4256 BNX2X_PCI_ALLOC(sb->e2_sb,
4257 &bnx2x_fp(bp, index, status_blk_mapping),
4258 sizeof(struct host_hc_status_block_e2));
4260 BNX2X_PCI_ALLOC(sb->e1x_sb,
4261 &bnx2x_fp(bp, index, status_blk_mapping),
4262 sizeof(struct host_hc_status_block_e1x));
4265 /* FCoE Queue uses Default SB and doesn't ACK the SB, thus no need to
4266 * set shortcuts for it.
4268 if (!IS_FCOE_IDX(index))
4269 set_sb_shortcuts(bp, index);
4272 if (!skip_tx_queue(bp, index)) {
4273 /* fastpath tx rings: tx_buf tx_desc */
4274 for_each_cos_in_tx_queue(fp, cos) {
4275 struct bnx2x_fp_txdata *txdata = fp->txdata_ptr[cos];
4278 "allocating tx memory of fp %d cos %d\n",
4281 BNX2X_ALLOC(txdata->tx_buf_ring,
4282 sizeof(struct sw_tx_bd) * NUM_TX_BD);
4283 BNX2X_PCI_ALLOC(txdata->tx_desc_ring,
4284 &txdata->tx_desc_mapping,
4285 sizeof(union eth_tx_bd_types) * NUM_TX_BD);
4290 if (!skip_rx_queue(bp, index)) {
4291 /* fastpath rx rings: rx_buf rx_desc rx_comp */
4292 BNX2X_ALLOC(bnx2x_fp(bp, index, rx_buf_ring),
4293 sizeof(struct sw_rx_bd) * NUM_RX_BD);
4294 BNX2X_PCI_ALLOC(bnx2x_fp(bp, index, rx_desc_ring),
4295 &bnx2x_fp(bp, index, rx_desc_mapping),
4296 sizeof(struct eth_rx_bd) * NUM_RX_BD);
4298 BNX2X_PCI_ALLOC(bnx2x_fp(bp, index, rx_comp_ring),
4299 &bnx2x_fp(bp, index, rx_comp_mapping),
4300 sizeof(struct eth_fast_path_rx_cqe) *
4304 BNX2X_ALLOC(bnx2x_fp(bp, index, rx_page_ring),
4305 sizeof(struct sw_rx_page) * NUM_RX_SGE);
4306 BNX2X_PCI_ALLOC(bnx2x_fp(bp, index, rx_sge_ring),
4307 &bnx2x_fp(bp, index, rx_sge_mapping),
4308 BCM_PAGE_SIZE * NUM_RX_SGE_PAGES);
4310 bnx2x_set_next_page_rx_bd(fp);
4313 bnx2x_set_next_page_rx_cq(fp);
4316 ring_size = bnx2x_alloc_rx_bds(fp, rx_ring_size);
4317 if (ring_size < rx_ring_size)
4323 /* handles low memory cases */
4325 BNX2X_ERR("Unable to allocate full memory for queue %d (size %d)\n",
4327 /* FW will drop all packets if queue is not big enough,
4328 * In these cases we disable the queue
4329 * Min size is different for OOO, TPA and non-TPA queues
4331 if (ring_size < (fp->disable_tpa ?
4332 MIN_RX_SIZE_NONTPA : MIN_RX_SIZE_TPA)) {
4333 /* release memory allocated for this queue */
4334 bnx2x_free_fp_mem_at(bp, index);
4340 int bnx2x_alloc_fp_mem_cnic(struct bnx2x *bp)
4344 if (bnx2x_alloc_fp_mem_at(bp, FCOE_IDX(bp)))
4345 /* we will fail load process instead of mark
4353 int bnx2x_alloc_fp_mem(struct bnx2x *bp)
4357 /* 1. Allocate FP for leading - fatal if error
4358 * 2. Allocate RSS - fix number of queues if error
4362 if (bnx2x_alloc_fp_mem_at(bp, 0))
4366 for_each_nondefault_eth_queue(bp, i)
4367 if (bnx2x_alloc_fp_mem_at(bp, i))
4370 /* handle memory failures */
4371 if (i != BNX2X_NUM_ETH_QUEUES(bp)) {
4372 int delta = BNX2X_NUM_ETH_QUEUES(bp) - i;
4375 bnx2x_shrink_eth_fp(bp, delta);
4376 if (CNIC_SUPPORT(bp))
4377 /* move non eth FPs next to last eth FP
4378 * must be done in that order
4379 * FCOE_IDX < FWD_IDX < OOO_IDX
4382 /* move FCoE fp even NO_FCOE_FLAG is on */
4383 bnx2x_move_fp(bp, FCOE_IDX(bp), FCOE_IDX(bp) - delta);
4384 bp->num_ethernet_queues -= delta;
4385 bp->num_queues = bp->num_ethernet_queues +
4386 bp->num_cnic_queues;
4387 BNX2X_ERR("Adjusted num of queues from %d to %d\n",
4388 bp->num_queues + delta, bp->num_queues);
4394 void bnx2x_free_mem_bp(struct bnx2x *bp)
4398 for (i = 0; i < bp->fp_array_size; i++)
4399 kfree(bp->fp[i].tpa_info);
4402 kfree(bp->fp_stats);
4403 kfree(bp->bnx2x_txq);
4404 kfree(bp->msix_table);
4408 int bnx2x_alloc_mem_bp(struct bnx2x *bp)
4410 struct bnx2x_fastpath *fp;
4411 struct msix_entry *tbl;
4412 struct bnx2x_ilt *ilt;
4413 int msix_table_size = 0;
4414 int fp_array_size, txq_array_size;
4418 * The biggest MSI-X table we might need is as a maximum number of fast
4419 * path IGU SBs plus default SB (for PF only).
4421 msix_table_size = bp->igu_sb_cnt;
4424 BNX2X_DEV_INFO("msix_table_size %d\n", msix_table_size);
4426 /* fp array: RSS plus CNIC related L2 queues */
4427 fp_array_size = BNX2X_MAX_RSS_COUNT(bp) + CNIC_SUPPORT(bp);
4428 bp->fp_array_size = fp_array_size;
4429 BNX2X_DEV_INFO("fp_array_size %d\n", bp->fp_array_size);
4431 fp = kcalloc(bp->fp_array_size, sizeof(*fp), GFP_KERNEL);
4434 for (i = 0; i < bp->fp_array_size; i++) {
4436 kcalloc(ETH_MAX_AGGREGATION_QUEUES_E1H_E2,
4437 sizeof(struct bnx2x_agg_info), GFP_KERNEL);
4438 if (!(fp[i].tpa_info))
4444 /* allocate sp objs */
4445 bp->sp_objs = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_sp_objs),
4450 /* allocate fp_stats */
4451 bp->fp_stats = kcalloc(bp->fp_array_size, sizeof(struct bnx2x_fp_stats),
4456 /* Allocate memory for the transmission queues array */
4458 BNX2X_MAX_RSS_COUNT(bp) * BNX2X_MULTI_TX_COS + CNIC_SUPPORT(bp);
4459 BNX2X_DEV_INFO("txq_array_size %d", txq_array_size);
4461 bp->bnx2x_txq = kcalloc(txq_array_size, sizeof(struct bnx2x_fp_txdata),
4467 tbl = kcalloc(msix_table_size, sizeof(*tbl), GFP_KERNEL);
4470 bp->msix_table = tbl;
4473 ilt = kzalloc(sizeof(*ilt), GFP_KERNEL);
4480 bnx2x_free_mem_bp(bp);
4485 int bnx2x_reload_if_running(struct net_device *dev)
4487 struct bnx2x *bp = netdev_priv(dev);
4489 if (unlikely(!netif_running(dev)))
4492 bnx2x_nic_unload(bp, UNLOAD_NORMAL, true);
4493 return bnx2x_nic_load(bp, LOAD_NORMAL);
4496 int bnx2x_get_cur_phy_idx(struct bnx2x *bp)
4498 u32 sel_phy_idx = 0;
4499 if (bp->link_params.num_phys <= 1)
4502 if (bp->link_vars.link_up) {
4503 sel_phy_idx = EXT_PHY1;
4504 /* In case link is SERDES, check if the EXT_PHY2 is the one */
4505 if ((bp->link_vars.link_status & LINK_STATUS_SERDES_LINK) &&
4506 (bp->link_params.phy[EXT_PHY2].supported & SUPPORTED_FIBRE))
4507 sel_phy_idx = EXT_PHY2;
4510 switch (bnx2x_phy_selection(&bp->link_params)) {
4511 case PORT_HW_CFG_PHY_SELECTION_HARDWARE_DEFAULT:
4512 case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY:
4513 case PORT_HW_CFG_PHY_SELECTION_FIRST_PHY_PRIORITY:
4514 sel_phy_idx = EXT_PHY1;
4516 case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY:
4517 case PORT_HW_CFG_PHY_SELECTION_SECOND_PHY_PRIORITY:
4518 sel_phy_idx = EXT_PHY2;
4526 int bnx2x_get_link_cfg_idx(struct bnx2x *bp)
4528 u32 sel_phy_idx = bnx2x_get_cur_phy_idx(bp);
4530 * The selected activated PHY is always after swapping (in case PHY
4531 * swapping is enabled). So when swapping is enabled, we need to reverse
4535 if (bp->link_params.multi_phy_config &
4536 PORT_HW_CFG_PHY_SWAPPED_ENABLED) {
4537 if (sel_phy_idx == EXT_PHY1)
4538 sel_phy_idx = EXT_PHY2;
4539 else if (sel_phy_idx == EXT_PHY2)
4540 sel_phy_idx = EXT_PHY1;
4542 return LINK_CONFIG_IDX(sel_phy_idx);
4545 #ifdef NETDEV_FCOE_WWNN
4546 int bnx2x_fcoe_get_wwn(struct net_device *dev, u64 *wwn, int type)
4548 struct bnx2x *bp = netdev_priv(dev);
4549 struct cnic_eth_dev *cp = &bp->cnic_eth_dev;
4552 case NETDEV_FCOE_WWNN:
4553 *wwn = HILO_U64(cp->fcoe_wwn_node_name_hi,
4554 cp->fcoe_wwn_node_name_lo);
4556 case NETDEV_FCOE_WWPN:
4557 *wwn = HILO_U64(cp->fcoe_wwn_port_name_hi,
4558 cp->fcoe_wwn_port_name_lo);
4561 BNX2X_ERR("Wrong WWN type requested - %d\n", type);
4569 /* called with rtnl_lock */
4570 int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
4572 struct bnx2x *bp = netdev_priv(dev);
4574 if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
4575 BNX2X_ERR("Can't perform change MTU during parity recovery\n");
4579 if ((new_mtu > ETH_MAX_JUMBO_PACKET_SIZE) ||
4580 ((new_mtu + ETH_HLEN) < ETH_MIN_PACKET_SIZE)) {
4581 BNX2X_ERR("Can't support requested MTU size\n");
4585 /* This does not race with packet allocation
4586 * because the actual alloc size is
4587 * only updated as part of load
4591 return bnx2x_reload_if_running(dev);
4594 netdev_features_t bnx2x_fix_features(struct net_device *dev,
4595 netdev_features_t features)
4597 struct bnx2x *bp = netdev_priv(dev);
4599 /* TPA requires Rx CSUM offloading */
4600 if (!(features & NETIF_F_RXCSUM) || bp->disable_tpa) {
4601 features &= ~NETIF_F_LRO;
4602 features &= ~NETIF_F_GRO;
4608 int bnx2x_set_features(struct net_device *dev, netdev_features_t features)
4610 struct bnx2x *bp = netdev_priv(dev);
4611 u32 flags = bp->flags;
4612 bool bnx2x_reload = false;
4614 if (features & NETIF_F_LRO)
4615 flags |= TPA_ENABLE_FLAG;
4617 flags &= ~TPA_ENABLE_FLAG;
4619 if (features & NETIF_F_GRO)
4620 flags |= GRO_ENABLE_FLAG;
4622 flags &= ~GRO_ENABLE_FLAG;
4624 if (features & NETIF_F_LOOPBACK) {
4625 if (bp->link_params.loopback_mode != LOOPBACK_BMAC) {
4626 bp->link_params.loopback_mode = LOOPBACK_BMAC;
4627 bnx2x_reload = true;
4630 if (bp->link_params.loopback_mode != LOOPBACK_NONE) {
4631 bp->link_params.loopback_mode = LOOPBACK_NONE;
4632 bnx2x_reload = true;
4636 if (flags ^ bp->flags) {
4638 bnx2x_reload = true;
4642 if (bp->recovery_state == BNX2X_RECOVERY_DONE)
4643 return bnx2x_reload_if_running(dev);
4644 /* else: bnx2x_nic_load() will be called at end of recovery */
4650 void bnx2x_tx_timeout(struct net_device *dev)
4652 struct bnx2x *bp = netdev_priv(dev);
4654 #ifdef BNX2X_STOP_ON_ERROR
4659 smp_mb__before_clear_bit();
4660 set_bit(BNX2X_SP_RTNL_TX_TIMEOUT, &bp->sp_rtnl_state);
4661 smp_mb__after_clear_bit();
4663 /* This allows the netif to be shutdown gracefully before resetting */
4664 schedule_delayed_work(&bp->sp_rtnl_task, 0);
4667 int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state)
4669 struct net_device *dev = pci_get_drvdata(pdev);
4673 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
4676 bp = netdev_priv(dev);
4680 pci_save_state(pdev);
4682 if (!netif_running(dev)) {
4687 netif_device_detach(dev);
4689 bnx2x_nic_unload(bp, UNLOAD_CLOSE, false);
4691 bnx2x_set_power_state(bp, pci_choose_state(pdev, state));
4698 int bnx2x_resume(struct pci_dev *pdev)
4700 struct net_device *dev = pci_get_drvdata(pdev);
4705 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
4708 bp = netdev_priv(dev);
4710 if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
4711 BNX2X_ERR("Handling parity error recovery. Try again later\n");
4717 pci_restore_state(pdev);
4719 if (!netif_running(dev)) {
4724 bnx2x_set_power_state(bp, PCI_D0);
4725 netif_device_attach(dev);
4727 rc = bnx2x_nic_load(bp, LOAD_OPEN);
4735 void bnx2x_set_ctx_validation(struct bnx2x *bp, struct eth_context *cxt,
4738 /* ustorm cxt validation */
4739 cxt->ustorm_ag_context.cdu_usage =
4740 CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid),
4741 CDU_REGION_NUMBER_UCM_AG, ETH_CONNECTION_TYPE);
4742 /* xcontext validation */
4743 cxt->xstorm_ag_context.cdu_reserved =
4744 CDU_RSRVD_VALUE_TYPE_A(HW_CID(bp, cid),
4745 CDU_REGION_NUMBER_XCM_AG, ETH_CONNECTION_TYPE);
4748 static void storm_memset_hc_timeout(struct bnx2x *bp, u8 port,
4749 u8 fw_sb_id, u8 sb_index,
4753 u32 addr = BAR_CSTRORM_INTMEM +
4754 CSTORM_STATUS_BLOCK_DATA_TIMEOUT_OFFSET(fw_sb_id, sb_index);
4755 REG_WR8(bp, addr, ticks);
4757 "port %x fw_sb_id %d sb_index %d ticks %d\n",
4758 port, fw_sb_id, sb_index, ticks);
4761 static void storm_memset_hc_disable(struct bnx2x *bp, u8 port,
4762 u16 fw_sb_id, u8 sb_index,
4765 u32 enable_flag = disable ? 0 : (1 << HC_INDEX_DATA_HC_ENABLED_SHIFT);
4766 u32 addr = BAR_CSTRORM_INTMEM +
4767 CSTORM_STATUS_BLOCK_DATA_FLAGS_OFFSET(fw_sb_id, sb_index);
4768 u8 flags = REG_RD8(bp, addr);
4770 flags &= ~HC_INDEX_DATA_HC_ENABLED;
4771 flags |= enable_flag;
4772 REG_WR8(bp, addr, flags);
4774 "port %x fw_sb_id %d sb_index %d disable %d\n",
4775 port, fw_sb_id, sb_index, disable);
4778 void bnx2x_update_coalesce_sb_index(struct bnx2x *bp, u8 fw_sb_id,
4779 u8 sb_index, u8 disable, u16 usec)
4781 int port = BP_PORT(bp);
4782 u8 ticks = usec / BNX2X_BTR;
4784 storm_memset_hc_timeout(bp, port, fw_sb_id, sb_index, ticks);
4786 disable = disable ? 1 : (usec ? 0 : 1);
4787 storm_memset_hc_disable(bp, port, fw_sb_id, sb_index, disable);