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