blob: efc7be4aefb5ffbcdf823b89a4460309a26b2e7a [file] [log] [blame]
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001/* bnx2x_cmn.c: Broadcom Everest network driver.
2 *
3 * Copyright (c) 2007-2010 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
19#include <linux/etherdevice.h>
20#include <linux/ip.h>
21#include <linux/ipv6.h>
Stephen Rothwell7f3e01f2010-07-28 22:20:34 -070022#include <net/ip6_checksum.h>
Dmitry Kravkov6891dd22010-08-03 21:49:40 +000023#include <linux/firmware.h>
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +000024#include "bnx2x_cmn.h"
25
26#ifdef BCM_VLAN
27#include <linux/if_vlan.h>
28#endif
29
30static int bnx2x_poll(struct napi_struct *napi, int budget);
31
32/* free skb in the packet ring at pos idx
33 * return idx of last bd freed
34 */
35static u16 bnx2x_free_tx_pkt(struct bnx2x *bp, struct bnx2x_fastpath *fp,
36 u16 idx)
37{
38 struct sw_tx_bd *tx_buf = &fp->tx_buf_ring[idx];
39 struct eth_tx_start_bd *tx_start_bd;
40 struct eth_tx_bd *tx_data_bd;
41 struct sk_buff *skb = tx_buf->skb;
42 u16 bd_idx = TX_BD(tx_buf->first_bd), new_cons;
43 int nbd;
44
45 /* prefetch skb end pointer to speedup dev_kfree_skb() */
46 prefetch(&skb->end);
47
48 DP(BNX2X_MSG_OFF, "pkt_idx %d buff @(%p)->skb %p\n",
49 idx, tx_buf, skb);
50
51 /* unmap first bd */
52 DP(BNX2X_MSG_OFF, "free bd_idx %d\n", bd_idx);
53 tx_start_bd = &fp->tx_desc_ring[bd_idx].start_bd;
54 dma_unmap_single(&bp->pdev->dev, BD_UNMAP_ADDR(tx_start_bd),
55 BD_UNMAP_LEN(tx_start_bd), PCI_DMA_TODEVICE);
56
57 nbd = le16_to_cpu(tx_start_bd->nbd) - 1;
58#ifdef BNX2X_STOP_ON_ERROR
59 if ((nbd - 1) > (MAX_SKB_FRAGS + 2)) {
60 BNX2X_ERR("BAD nbd!\n");
61 bnx2x_panic();
62 }
63#endif
64 new_cons = nbd + tx_buf->first_bd;
65
66 /* Get the next bd */
67 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
68
69 /* Skip a parse bd... */
70 --nbd;
71 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
72
73 /* ...and the TSO split header bd since they have no mapping */
74 if (tx_buf->flags & BNX2X_TSO_SPLIT_BD) {
75 --nbd;
76 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
77 }
78
79 /* now free frags */
80 while (nbd > 0) {
81
82 DP(BNX2X_MSG_OFF, "free frag bd_idx %d\n", bd_idx);
83 tx_data_bd = &fp->tx_desc_ring[bd_idx].reg_bd;
84 dma_unmap_page(&bp->pdev->dev, BD_UNMAP_ADDR(tx_data_bd),
85 BD_UNMAP_LEN(tx_data_bd), DMA_TO_DEVICE);
86 if (--nbd)
87 bd_idx = TX_BD(NEXT_TX_IDX(bd_idx));
88 }
89
90 /* release skb */
91 WARN_ON(!skb);
92 dev_kfree_skb(skb);
93 tx_buf->first_bd = 0;
94 tx_buf->skb = NULL;
95
96 return new_cons;
97}
98
99int bnx2x_tx_int(struct bnx2x_fastpath *fp)
100{
101 struct bnx2x *bp = fp->bp;
102 struct netdev_queue *txq;
103 u16 hw_cons, sw_cons, bd_cons = fp->tx_bd_cons;
104
105#ifdef BNX2X_STOP_ON_ERROR
106 if (unlikely(bp->panic))
107 return -1;
108#endif
109
110 txq = netdev_get_tx_queue(bp->dev, fp->index);
111 hw_cons = le16_to_cpu(*fp->tx_cons_sb);
112 sw_cons = fp->tx_pkt_cons;
113
114 while (sw_cons != hw_cons) {
115 u16 pkt_cons;
116
117 pkt_cons = TX_BD(sw_cons);
118
119 /* prefetch(bp->tx_buf_ring[pkt_cons].skb); */
120
121 DP(NETIF_MSG_TX_DONE, "hw_cons %u sw_cons %u pkt_cons %u\n",
122 hw_cons, sw_cons, pkt_cons);
123
124/* if (NEXT_TX_IDX(sw_cons) != hw_cons) {
125 rmb();
126 prefetch(fp->tx_buf_ring[NEXT_TX_IDX(sw_cons)].skb);
127 }
128*/
129 bd_cons = bnx2x_free_tx_pkt(bp, fp, pkt_cons);
130 sw_cons++;
131 }
132
133 fp->tx_pkt_cons = sw_cons;
134 fp->tx_bd_cons = bd_cons;
135
136 /* Need to make the tx_bd_cons update visible to start_xmit()
137 * before checking for netif_tx_queue_stopped(). Without the
138 * memory barrier, there is a small possibility that
139 * start_xmit() will miss it and cause the queue to be stopped
140 * forever.
141 */
142 smp_mb();
143
144 /* TBD need a thresh? */
145 if (unlikely(netif_tx_queue_stopped(txq))) {
146 /* Taking tx_lock() is needed to prevent reenabling the queue
147 * while it's empty. This could have happen if rx_action() gets
148 * suspended in bnx2x_tx_int() after the condition before
149 * netif_tx_wake_queue(), while tx_action (bnx2x_start_xmit()):
150 *
151 * stops the queue->sees fresh tx_bd_cons->releases the queue->
152 * sends some packets consuming the whole queue again->
153 * stops the queue
154 */
155
156 __netif_tx_lock(txq, smp_processor_id());
157
158 if ((netif_tx_queue_stopped(txq)) &&
159 (bp->state == BNX2X_STATE_OPEN) &&
160 (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3))
161 netif_tx_wake_queue(txq);
162
163 __netif_tx_unlock(txq);
164 }
165 return 0;
166}
167
168static inline void bnx2x_update_last_max_sge(struct bnx2x_fastpath *fp,
169 u16 idx)
170{
171 u16 last_max = fp->last_max_sge;
172
173 if (SUB_S16(idx, last_max) > 0)
174 fp->last_max_sge = idx;
175}
176
177static void bnx2x_update_sge_prod(struct bnx2x_fastpath *fp,
178 struct eth_fast_path_rx_cqe *fp_cqe)
179{
180 struct bnx2x *bp = fp->bp;
181 u16 sge_len = SGE_PAGE_ALIGN(le16_to_cpu(fp_cqe->pkt_len) -
182 le16_to_cpu(fp_cqe->len_on_bd)) >>
183 SGE_PAGE_SHIFT;
184 u16 last_max, last_elem, first_elem;
185 u16 delta = 0;
186 u16 i;
187
188 if (!sge_len)
189 return;
190
191 /* First mark all used pages */
192 for (i = 0; i < sge_len; i++)
193 SGE_MASK_CLEAR_BIT(fp, RX_SGE(le16_to_cpu(fp_cqe->sgl[i])));
194
195 DP(NETIF_MSG_RX_STATUS, "fp_cqe->sgl[%d] = %d\n",
196 sge_len - 1, le16_to_cpu(fp_cqe->sgl[sge_len - 1]));
197
198 /* Here we assume that the last SGE index is the biggest */
199 prefetch((void *)(fp->sge_mask));
200 bnx2x_update_last_max_sge(fp, le16_to_cpu(fp_cqe->sgl[sge_len - 1]));
201
202 last_max = RX_SGE(fp->last_max_sge);
203 last_elem = last_max >> RX_SGE_MASK_ELEM_SHIFT;
204 first_elem = RX_SGE(fp->rx_sge_prod) >> RX_SGE_MASK_ELEM_SHIFT;
205
206 /* If ring is not full */
207 if (last_elem + 1 != first_elem)
208 last_elem++;
209
210 /* Now update the prod */
211 for (i = first_elem; i != last_elem; i = NEXT_SGE_MASK_ELEM(i)) {
212 if (likely(fp->sge_mask[i]))
213 break;
214
215 fp->sge_mask[i] = RX_SGE_MASK_ELEM_ONE_MASK;
216 delta += RX_SGE_MASK_ELEM_SZ;
217 }
218
219 if (delta > 0) {
220 fp->rx_sge_prod += delta;
221 /* clear page-end entries */
222 bnx2x_clear_sge_mask_next_elems(fp);
223 }
224
225 DP(NETIF_MSG_RX_STATUS,
226 "fp->last_max_sge = %d fp->rx_sge_prod = %d\n",
227 fp->last_max_sge, fp->rx_sge_prod);
228}
229
230static void bnx2x_tpa_start(struct bnx2x_fastpath *fp, u16 queue,
231 struct sk_buff *skb, u16 cons, u16 prod)
232{
233 struct bnx2x *bp = fp->bp;
234 struct sw_rx_bd *cons_rx_buf = &fp->rx_buf_ring[cons];
235 struct sw_rx_bd *prod_rx_buf = &fp->rx_buf_ring[prod];
236 struct eth_rx_bd *prod_bd = &fp->rx_desc_ring[prod];
237 dma_addr_t mapping;
238
239 /* move empty skb from pool to prod and map it */
240 prod_rx_buf->skb = fp->tpa_pool[queue].skb;
241 mapping = dma_map_single(&bp->pdev->dev, fp->tpa_pool[queue].skb->data,
242 bp->rx_buf_size, DMA_FROM_DEVICE);
243 dma_unmap_addr_set(prod_rx_buf, mapping, mapping);
244
245 /* move partial skb from cons to pool (don't unmap yet) */
246 fp->tpa_pool[queue] = *cons_rx_buf;
247
248 /* mark bin state as start - print error if current state != stop */
249 if (fp->tpa_state[queue] != BNX2X_TPA_STOP)
250 BNX2X_ERR("start of bin not in stop [%d]\n", queue);
251
252 fp->tpa_state[queue] = BNX2X_TPA_START;
253
254 /* point prod_bd to new skb */
255 prod_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
256 prod_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
257
258#ifdef BNX2X_STOP_ON_ERROR
259 fp->tpa_queue_used |= (1 << queue);
260#ifdef _ASM_GENERIC_INT_L64_H
261 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%lx\n",
262#else
263 DP(NETIF_MSG_RX_STATUS, "fp->tpa_queue_used = 0x%llx\n",
264#endif
265 fp->tpa_queue_used);
266#endif
267}
268
269static int bnx2x_fill_frag_skb(struct bnx2x *bp, struct bnx2x_fastpath *fp,
270 struct sk_buff *skb,
271 struct eth_fast_path_rx_cqe *fp_cqe,
272 u16 cqe_idx)
273{
274 struct sw_rx_page *rx_pg, old_rx_pg;
275 u16 len_on_bd = le16_to_cpu(fp_cqe->len_on_bd);
276 u32 i, frag_len, frag_size, pages;
277 int err;
278 int j;
279
280 frag_size = le16_to_cpu(fp_cqe->pkt_len) - len_on_bd;
281 pages = SGE_PAGE_ALIGN(frag_size) >> SGE_PAGE_SHIFT;
282
283 /* This is needed in order to enable forwarding support */
284 if (frag_size)
285 skb_shinfo(skb)->gso_size = min((u32)SGE_PAGE_SIZE,
286 max(frag_size, (u32)len_on_bd));
287
288#ifdef BNX2X_STOP_ON_ERROR
289 if (pages > min_t(u32, 8, MAX_SKB_FRAGS)*SGE_PAGE_SIZE*PAGES_PER_SGE) {
290 BNX2X_ERR("SGL length is too long: %d. CQE index is %d\n",
291 pages, cqe_idx);
292 BNX2X_ERR("fp_cqe->pkt_len = %d fp_cqe->len_on_bd = %d\n",
293 fp_cqe->pkt_len, len_on_bd);
294 bnx2x_panic();
295 return -EINVAL;
296 }
297#endif
298
299 /* Run through the SGL and compose the fragmented skb */
300 for (i = 0, j = 0; i < pages; i += PAGES_PER_SGE, j++) {
301 u16 sge_idx = RX_SGE(le16_to_cpu(fp_cqe->sgl[j]));
302
303 /* FW gives the indices of the SGE as if the ring is an array
304 (meaning that "next" element will consume 2 indices) */
305 frag_len = min(frag_size, (u32)(SGE_PAGE_SIZE*PAGES_PER_SGE));
306 rx_pg = &fp->rx_page_ring[sge_idx];
307 old_rx_pg = *rx_pg;
308
309 /* If we fail to allocate a substitute page, we simply stop
310 where we are and drop the whole packet */
311 err = bnx2x_alloc_rx_sge(bp, fp, sge_idx);
312 if (unlikely(err)) {
313 fp->eth_q_stats.rx_skb_alloc_failed++;
314 return err;
315 }
316
317 /* Unmap the page as we r going to pass it to the stack */
318 dma_unmap_page(&bp->pdev->dev,
319 dma_unmap_addr(&old_rx_pg, mapping),
320 SGE_PAGE_SIZE*PAGES_PER_SGE, DMA_FROM_DEVICE);
321
322 /* Add one frag and update the appropriate fields in the skb */
323 skb_fill_page_desc(skb, j, old_rx_pg.page, 0, frag_len);
324
325 skb->data_len += frag_len;
326 skb->truesize += frag_len;
327 skb->len += frag_len;
328
329 frag_size -= frag_len;
330 }
331
332 return 0;
333}
334
335static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
336 u16 queue, int pad, int len, union eth_rx_cqe *cqe,
337 u16 cqe_idx)
338{
339 struct sw_rx_bd *rx_buf = &fp->tpa_pool[queue];
340 struct sk_buff *skb = rx_buf->skb;
341 /* alloc new skb */
342 struct sk_buff *new_skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size);
343
344 /* Unmap skb in the pool anyway, as we are going to change
345 pool entry status to BNX2X_TPA_STOP even if new skb allocation
346 fails. */
347 dma_unmap_single(&bp->pdev->dev, dma_unmap_addr(rx_buf, mapping),
348 bp->rx_buf_size, DMA_FROM_DEVICE);
349
350 if (likely(new_skb)) {
351 /* fix ip xsum and give it to the stack */
352 /* (no need to map the new skb) */
353#ifdef BCM_VLAN
354 int is_vlan_cqe =
355 (le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) &
356 PARSING_FLAGS_VLAN);
357 int is_not_hwaccel_vlan_cqe =
358 (is_vlan_cqe && (!(bp->flags & HW_VLAN_RX_FLAG)));
359#endif
360
361 prefetch(skb);
362 prefetch(((char *)(skb)) + 128);
363
364#ifdef BNX2X_STOP_ON_ERROR
365 if (pad + len > bp->rx_buf_size) {
366 BNX2X_ERR("skb_put is about to fail... "
367 "pad %d len %d rx_buf_size %d\n",
368 pad, len, bp->rx_buf_size);
369 bnx2x_panic();
370 return;
371 }
372#endif
373
374 skb_reserve(skb, pad);
375 skb_put(skb, len);
376
377 skb->protocol = eth_type_trans(skb, bp->dev);
378 skb->ip_summed = CHECKSUM_UNNECESSARY;
379
380 {
381 struct iphdr *iph;
382
383 iph = (struct iphdr *)skb->data;
384#ifdef BCM_VLAN
385 /* If there is no Rx VLAN offloading -
386 take VLAN tag into an account */
387 if (unlikely(is_not_hwaccel_vlan_cqe))
388 iph = (struct iphdr *)((u8 *)iph + VLAN_HLEN);
389#endif
390 iph->check = 0;
391 iph->check = ip_fast_csum((u8 *)iph, iph->ihl);
392 }
393
394 if (!bnx2x_fill_frag_skb(bp, fp, skb,
395 &cqe->fast_path_cqe, cqe_idx)) {
396#ifdef BCM_VLAN
397 if ((bp->vlgrp != NULL) && is_vlan_cqe &&
398 (!is_not_hwaccel_vlan_cqe))
399 vlan_gro_receive(&fp->napi, bp->vlgrp,
400 le16_to_cpu(cqe->fast_path_cqe.
401 vlan_tag), skb);
402 else
403#endif
404 napi_gro_receive(&fp->napi, skb);
405 } else {
406 DP(NETIF_MSG_RX_STATUS, "Failed to allocate new pages"
407 " - dropping packet!\n");
408 dev_kfree_skb(skb);
409 }
410
411
412 /* put new skb in bin */
413 fp->tpa_pool[queue].skb = new_skb;
414
415 } else {
416 /* else drop the packet and keep the buffer in the bin */
417 DP(NETIF_MSG_RX_STATUS,
418 "Failed to allocate new skb - dropping packet!\n");
419 fp->eth_q_stats.rx_skb_alloc_failed++;
420 }
421
422 fp->tpa_state[queue] = BNX2X_TPA_STOP;
423}
424
425/* Set Toeplitz hash value in the skb using the value from the
426 * CQE (calculated by HW).
427 */
428static inline void bnx2x_set_skb_rxhash(struct bnx2x *bp, union eth_rx_cqe *cqe,
429 struct sk_buff *skb)
430{
431 /* Set Toeplitz hash from CQE */
432 if ((bp->dev->features & NETIF_F_RXHASH) &&
433 (cqe->fast_path_cqe.status_flags &
434 ETH_FAST_PATH_RX_CQE_RSS_HASH_FLG))
435 skb->rxhash =
436 le32_to_cpu(cqe->fast_path_cqe.rss_hash_result);
437}
438
439int bnx2x_rx_int(struct bnx2x_fastpath *fp, int budget)
440{
441 struct bnx2x *bp = fp->bp;
442 u16 bd_cons, bd_prod, bd_prod_fw, comp_ring_cons;
443 u16 hw_comp_cons, sw_comp_cons, sw_comp_prod;
444 int rx_pkt = 0;
445
446#ifdef BNX2X_STOP_ON_ERROR
447 if (unlikely(bp->panic))
448 return 0;
449#endif
450
451 /* CQ "next element" is of the size of the regular element,
452 that's why it's ok here */
453 hw_comp_cons = le16_to_cpu(*fp->rx_cons_sb);
454 if ((hw_comp_cons & MAX_RCQ_DESC_CNT) == MAX_RCQ_DESC_CNT)
455 hw_comp_cons++;
456
457 bd_cons = fp->rx_bd_cons;
458 bd_prod = fp->rx_bd_prod;
459 bd_prod_fw = bd_prod;
460 sw_comp_cons = fp->rx_comp_cons;
461 sw_comp_prod = fp->rx_comp_prod;
462
463 /* Memory barrier necessary as speculative reads of the rx
464 * buffer can be ahead of the index in the status block
465 */
466 rmb();
467
468 DP(NETIF_MSG_RX_STATUS,
469 "queue[%d]: hw_comp_cons %u sw_comp_cons %u\n",
470 fp->index, hw_comp_cons, sw_comp_cons);
471
472 while (sw_comp_cons != hw_comp_cons) {
473 struct sw_rx_bd *rx_buf = NULL;
474 struct sk_buff *skb;
475 union eth_rx_cqe *cqe;
476 u8 cqe_fp_flags;
477 u16 len, pad;
478
479 comp_ring_cons = RCQ_BD(sw_comp_cons);
480 bd_prod = RX_BD(bd_prod);
481 bd_cons = RX_BD(bd_cons);
482
483 /* Prefetch the page containing the BD descriptor
484 at producer's index. It will be needed when new skb is
485 allocated */
486 prefetch((void *)(PAGE_ALIGN((unsigned long)
487 (&fp->rx_desc_ring[bd_prod])) -
488 PAGE_SIZE + 1));
489
490 cqe = &fp->rx_comp_ring[comp_ring_cons];
491 cqe_fp_flags = cqe->fast_path_cqe.type_error_flags;
492
493 DP(NETIF_MSG_RX_STATUS, "CQE type %x err %x status %x"
494 " queue %x vlan %x len %u\n", CQE_TYPE(cqe_fp_flags),
495 cqe_fp_flags, cqe->fast_path_cqe.status_flags,
496 le32_to_cpu(cqe->fast_path_cqe.rss_hash_result),
497 le16_to_cpu(cqe->fast_path_cqe.vlan_tag),
498 le16_to_cpu(cqe->fast_path_cqe.pkt_len));
499
500 /* is this a slowpath msg? */
501 if (unlikely(CQE_TYPE(cqe_fp_flags))) {
502 bnx2x_sp_event(fp, cqe);
503 goto next_cqe;
504
505 /* this is an rx packet */
506 } else {
507 rx_buf = &fp->rx_buf_ring[bd_cons];
508 skb = rx_buf->skb;
509 prefetch(skb);
510 len = le16_to_cpu(cqe->fast_path_cqe.pkt_len);
511 pad = cqe->fast_path_cqe.placement_offset;
512
513 /* If CQE is marked both TPA_START and TPA_END
514 it is a non-TPA CQE */
515 if ((!fp->disable_tpa) &&
516 (TPA_TYPE(cqe_fp_flags) !=
517 (TPA_TYPE_START | TPA_TYPE_END))) {
518 u16 queue = cqe->fast_path_cqe.queue_index;
519
520 if (TPA_TYPE(cqe_fp_flags) == TPA_TYPE_START) {
521 DP(NETIF_MSG_RX_STATUS,
522 "calling tpa_start on queue %d\n",
523 queue);
524
525 bnx2x_tpa_start(fp, queue, skb,
526 bd_cons, bd_prod);
527
528 /* Set Toeplitz hash for an LRO skb */
529 bnx2x_set_skb_rxhash(bp, cqe, skb);
530
531 goto next_rx;
532 }
533
534 if (TPA_TYPE(cqe_fp_flags) == TPA_TYPE_END) {
535 DP(NETIF_MSG_RX_STATUS,
536 "calling tpa_stop on queue %d\n",
537 queue);
538
539 if (!BNX2X_RX_SUM_FIX(cqe))
540 BNX2X_ERR("STOP on none TCP "
541 "data\n");
542
543 /* This is a size of the linear data
544 on this skb */
545 len = le16_to_cpu(cqe->fast_path_cqe.
546 len_on_bd);
547 bnx2x_tpa_stop(bp, fp, queue, pad,
548 len, cqe, comp_ring_cons);
549#ifdef BNX2X_STOP_ON_ERROR
550 if (bp->panic)
551 return 0;
552#endif
553
554 bnx2x_update_sge_prod(fp,
555 &cqe->fast_path_cqe);
556 goto next_cqe;
557 }
558 }
559
560 dma_sync_single_for_device(&bp->pdev->dev,
561 dma_unmap_addr(rx_buf, mapping),
562 pad + RX_COPY_THRESH,
563 DMA_FROM_DEVICE);
564 prefetch(((char *)(skb)) + 128);
565
566 /* is this an error packet? */
567 if (unlikely(cqe_fp_flags & ETH_RX_ERROR_FALGS)) {
568 DP(NETIF_MSG_RX_ERR,
569 "ERROR flags %x rx packet %u\n",
570 cqe_fp_flags, sw_comp_cons);
571 fp->eth_q_stats.rx_err_discard_pkt++;
572 goto reuse_rx;
573 }
574
575 /* Since we don't have a jumbo ring
576 * copy small packets if mtu > 1500
577 */
578 if ((bp->dev->mtu > ETH_MAX_PACKET_SIZE) &&
579 (len <= RX_COPY_THRESH)) {
580 struct sk_buff *new_skb;
581
582 new_skb = netdev_alloc_skb(bp->dev,
583 len + pad);
584 if (new_skb == NULL) {
585 DP(NETIF_MSG_RX_ERR,
586 "ERROR packet dropped "
587 "because of alloc failure\n");
588 fp->eth_q_stats.rx_skb_alloc_failed++;
589 goto reuse_rx;
590 }
591
592 /* aligned copy */
593 skb_copy_from_linear_data_offset(skb, pad,
594 new_skb->data + pad, len);
595 skb_reserve(new_skb, pad);
596 skb_put(new_skb, len);
597
598 bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod);
599
600 skb = new_skb;
601
602 } else
603 if (likely(bnx2x_alloc_rx_skb(bp, fp, bd_prod) == 0)) {
604 dma_unmap_single(&bp->pdev->dev,
605 dma_unmap_addr(rx_buf, mapping),
606 bp->rx_buf_size,
607 DMA_FROM_DEVICE);
608 skb_reserve(skb, pad);
609 skb_put(skb, len);
610
611 } else {
612 DP(NETIF_MSG_RX_ERR,
613 "ERROR packet dropped because "
614 "of alloc failure\n");
615 fp->eth_q_stats.rx_skb_alloc_failed++;
616reuse_rx:
617 bnx2x_reuse_rx_skb(fp, skb, bd_cons, bd_prod);
618 goto next_rx;
619 }
620
621 skb->protocol = eth_type_trans(skb, bp->dev);
622
623 /* Set Toeplitz hash for a none-LRO skb */
624 bnx2x_set_skb_rxhash(bp, cqe, skb);
625
Eric Dumazetbc8acf22010-09-02 13:07:41 -0700626 skb_checksum_none_assert(skb);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +0000627 if (bp->rx_csum) {
628 if (likely(BNX2X_RX_CSUM_OK(cqe)))
629 skb->ip_summed = CHECKSUM_UNNECESSARY;
630 else
631 fp->eth_q_stats.hw_csum_err++;
632 }
633 }
634
635 skb_record_rx_queue(skb, fp->index);
636
637#ifdef BCM_VLAN
638 if ((bp->vlgrp != NULL) && (bp->flags & HW_VLAN_RX_FLAG) &&
639 (le16_to_cpu(cqe->fast_path_cqe.pars_flags.flags) &
640 PARSING_FLAGS_VLAN))
641 vlan_gro_receive(&fp->napi, bp->vlgrp,
642 le16_to_cpu(cqe->fast_path_cqe.vlan_tag), skb);
643 else
644#endif
645 napi_gro_receive(&fp->napi, skb);
646
647
648next_rx:
649 rx_buf->skb = NULL;
650
651 bd_cons = NEXT_RX_IDX(bd_cons);
652 bd_prod = NEXT_RX_IDX(bd_prod);
653 bd_prod_fw = NEXT_RX_IDX(bd_prod_fw);
654 rx_pkt++;
655next_cqe:
656 sw_comp_prod = NEXT_RCQ_IDX(sw_comp_prod);
657 sw_comp_cons = NEXT_RCQ_IDX(sw_comp_cons);
658
659 if (rx_pkt == budget)
660 break;
661 } /* while */
662
663 fp->rx_bd_cons = bd_cons;
664 fp->rx_bd_prod = bd_prod_fw;
665 fp->rx_comp_cons = sw_comp_cons;
666 fp->rx_comp_prod = sw_comp_prod;
667
668 /* Update producers */
669 bnx2x_update_rx_prod(bp, fp, bd_prod_fw, sw_comp_prod,
670 fp->rx_sge_prod);
671
672 fp->rx_pkt += rx_pkt;
673 fp->rx_calls++;
674
675 return rx_pkt;
676}
677
678static irqreturn_t bnx2x_msix_fp_int(int irq, void *fp_cookie)
679{
680 struct bnx2x_fastpath *fp = fp_cookie;
681 struct bnx2x *bp = fp->bp;
682
683 /* Return here if interrupt is disabled */
684 if (unlikely(atomic_read(&bp->intr_sem) != 0)) {
685 DP(NETIF_MSG_INTR, "called but intr_sem not 0, returning\n");
686 return IRQ_HANDLED;
687 }
688
689 DP(BNX2X_MSG_FP, "got an MSI-X interrupt on IDX:SB [%d:%d]\n",
690 fp->index, fp->sb_id);
691 bnx2x_ack_sb(bp, fp->sb_id, USTORM_ID, 0, IGU_INT_DISABLE, 0);
692
693#ifdef BNX2X_STOP_ON_ERROR
694 if (unlikely(bp->panic))
695 return IRQ_HANDLED;
696#endif
697
698 /* Handle Rx and Tx according to MSI-X vector */
699 prefetch(fp->rx_cons_sb);
700 prefetch(fp->tx_cons_sb);
701 prefetch(&fp->status_blk->u_status_block.status_block_index);
702 prefetch(&fp->status_blk->c_status_block.status_block_index);
703 napi_schedule(&bnx2x_fp(bp, fp->index, napi));
704
705 return IRQ_HANDLED;
706}
707
708
709/* HW Lock for shared dual port PHYs */
710void bnx2x_acquire_phy_lock(struct bnx2x *bp)
711{
712 mutex_lock(&bp->port.phy_mutex);
713
714 if (bp->port.need_hw_lock)
715 bnx2x_acquire_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
716}
717
718void bnx2x_release_phy_lock(struct bnx2x *bp)
719{
720 if (bp->port.need_hw_lock)
721 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_MDIO);
722
723 mutex_unlock(&bp->port.phy_mutex);
724}
725
726void bnx2x_link_report(struct bnx2x *bp)
727{
728 if (bp->flags & MF_FUNC_DIS) {
729 netif_carrier_off(bp->dev);
730 netdev_err(bp->dev, "NIC Link is Down\n");
731 return;
732 }
733
734 if (bp->link_vars.link_up) {
735 u16 line_speed;
736
737 if (bp->state == BNX2X_STATE_OPEN)
738 netif_carrier_on(bp->dev);
739 netdev_info(bp->dev, "NIC Link is Up, ");
740
741 line_speed = bp->link_vars.line_speed;
742 if (IS_E1HMF(bp)) {
743 u16 vn_max_rate;
744
745 vn_max_rate =
746 ((bp->mf_config & FUNC_MF_CFG_MAX_BW_MASK) >>
747 FUNC_MF_CFG_MAX_BW_SHIFT) * 100;
748 if (vn_max_rate < line_speed)
749 line_speed = vn_max_rate;
750 }
751 pr_cont("%d Mbps ", line_speed);
752
753 if (bp->link_vars.duplex == DUPLEX_FULL)
754 pr_cont("full duplex");
755 else
756 pr_cont("half duplex");
757
758 if (bp->link_vars.flow_ctrl != BNX2X_FLOW_CTRL_NONE) {
759 if (bp->link_vars.flow_ctrl & BNX2X_FLOW_CTRL_RX) {
760 pr_cont(", receive ");
761 if (bp->link_vars.flow_ctrl &
762 BNX2X_FLOW_CTRL_TX)
763 pr_cont("& transmit ");
764 } else {
765 pr_cont(", transmit ");
766 }
767 pr_cont("flow control ON");
768 }
769 pr_cont("\n");
770
771 } else { /* link_down */
772 netif_carrier_off(bp->dev);
773 netdev_err(bp->dev, "NIC Link is Down\n");
774 }
775}
776
777void bnx2x_init_rx_rings(struct bnx2x *bp)
778{
779 int func = BP_FUNC(bp);
780 int max_agg_queues = CHIP_IS_E1(bp) ? ETH_MAX_AGGREGATION_QUEUES_E1 :
781 ETH_MAX_AGGREGATION_QUEUES_E1H;
782 u16 ring_prod, cqe_ring_prod;
783 int i, j;
Dmitry Kravkov25141582010-09-12 05:48:28 +0000784 int rx_ring_size = bp->rx_ring_size ? bp->rx_ring_size :
785 MAX_RX_AVAIL/bp->num_queues;
786
787 rx_ring_size = max_t(int, MIN_RX_AVAIL, rx_ring_size);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +0000788
789 bp->rx_buf_size = bp->dev->mtu + ETH_OVREHEAD + BNX2X_RX_ALIGN;
790 DP(NETIF_MSG_IFUP,
791 "mtu %d rx_buf_size %d\n", bp->dev->mtu, bp->rx_buf_size);
792
793 if (bp->flags & TPA_ENABLE_FLAG) {
794
795 for_each_queue(bp, j) {
796 struct bnx2x_fastpath *fp = &bp->fp[j];
797
798 for (i = 0; i < max_agg_queues; i++) {
799 fp->tpa_pool[i].skb =
800 netdev_alloc_skb(bp->dev, bp->rx_buf_size);
801 if (!fp->tpa_pool[i].skb) {
802 BNX2X_ERR("Failed to allocate TPA "
803 "skb pool for queue[%d] - "
804 "disabling TPA on this "
805 "queue!\n", j);
806 bnx2x_free_tpa_pool(bp, fp, i);
807 fp->disable_tpa = 1;
808 break;
809 }
810 dma_unmap_addr_set((struct sw_rx_bd *)
811 &bp->fp->tpa_pool[i],
812 mapping, 0);
813 fp->tpa_state[i] = BNX2X_TPA_STOP;
814 }
815 }
816 }
817
818 for_each_queue(bp, j) {
819 struct bnx2x_fastpath *fp = &bp->fp[j];
820
821 fp->rx_bd_cons = 0;
822 fp->rx_cons_sb = BNX2X_RX_SB_INDEX;
823 fp->rx_bd_cons_sb = BNX2X_RX_SB_BD_INDEX;
824
825 /* "next page" elements initialization */
826 /* SGE ring */
827 for (i = 1; i <= NUM_RX_SGE_PAGES; i++) {
828 struct eth_rx_sge *sge;
829
830 sge = &fp->rx_sge_ring[RX_SGE_CNT * i - 2];
831 sge->addr_hi =
832 cpu_to_le32(U64_HI(fp->rx_sge_mapping +
833 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
834 sge->addr_lo =
835 cpu_to_le32(U64_LO(fp->rx_sge_mapping +
836 BCM_PAGE_SIZE*(i % NUM_RX_SGE_PAGES)));
837 }
838
839 bnx2x_init_sge_ring_bit_mask(fp);
840
841 /* RX BD ring */
842 for (i = 1; i <= NUM_RX_RINGS; i++) {
843 struct eth_rx_bd *rx_bd;
844
845 rx_bd = &fp->rx_desc_ring[RX_DESC_CNT * i - 2];
846 rx_bd->addr_hi =
847 cpu_to_le32(U64_HI(fp->rx_desc_mapping +
848 BCM_PAGE_SIZE*(i % NUM_RX_RINGS)));
849 rx_bd->addr_lo =
850 cpu_to_le32(U64_LO(fp->rx_desc_mapping +
851 BCM_PAGE_SIZE*(i % NUM_RX_RINGS)));
852 }
853
854 /* CQ ring */
855 for (i = 1; i <= NUM_RCQ_RINGS; i++) {
856 struct eth_rx_cqe_next_page *nextpg;
857
858 nextpg = (struct eth_rx_cqe_next_page *)
859 &fp->rx_comp_ring[RCQ_DESC_CNT * i - 1];
860 nextpg->addr_hi =
861 cpu_to_le32(U64_HI(fp->rx_comp_mapping +
862 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
863 nextpg->addr_lo =
864 cpu_to_le32(U64_LO(fp->rx_comp_mapping +
865 BCM_PAGE_SIZE*(i % NUM_RCQ_RINGS)));
866 }
867
868 /* Allocate SGEs and initialize the ring elements */
869 for (i = 0, ring_prod = 0;
870 i < MAX_RX_SGE_CNT*NUM_RX_SGE_PAGES; i++) {
871
872 if (bnx2x_alloc_rx_sge(bp, fp, ring_prod) < 0) {
873 BNX2X_ERR("was only able to allocate "
874 "%d rx sges\n", i);
875 BNX2X_ERR("disabling TPA for queue[%d]\n", j);
876 /* Cleanup already allocated elements */
877 bnx2x_free_rx_sge_range(bp, fp, ring_prod);
878 bnx2x_free_tpa_pool(bp, fp, max_agg_queues);
879 fp->disable_tpa = 1;
880 ring_prod = 0;
881 break;
882 }
883 ring_prod = NEXT_SGE_IDX(ring_prod);
884 }
885 fp->rx_sge_prod = ring_prod;
886
887 /* Allocate BDs and initialize BD ring */
888 fp->rx_comp_cons = 0;
889 cqe_ring_prod = ring_prod = 0;
Dmitry Kravkov25141582010-09-12 05:48:28 +0000890 for (i = 0; i < rx_ring_size; i++) {
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +0000891 if (bnx2x_alloc_rx_skb(bp, fp, ring_prod) < 0) {
892 BNX2X_ERR("was only able to allocate "
893 "%d rx skbs on queue[%d]\n", i, j);
894 fp->eth_q_stats.rx_skb_alloc_failed++;
895 break;
896 }
897 ring_prod = NEXT_RX_IDX(ring_prod);
898 cqe_ring_prod = NEXT_RCQ_IDX(cqe_ring_prod);
899 WARN_ON(ring_prod <= i);
900 }
901
902 fp->rx_bd_prod = ring_prod;
903 /* must not have more available CQEs than BDs */
904 fp->rx_comp_prod = min_t(u16, NUM_RCQ_RINGS*RCQ_DESC_CNT,
905 cqe_ring_prod);
906 fp->rx_pkt = fp->rx_calls = 0;
907
908 /* Warning!
909 * this will generate an interrupt (to the TSTORM)
910 * must only be done after chip is initialized
911 */
912 bnx2x_update_rx_prod(bp, fp, ring_prod, fp->rx_comp_prod,
913 fp->rx_sge_prod);
914 if (j != 0)
915 continue;
916
917 REG_WR(bp, BAR_USTRORM_INTMEM +
918 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func),
919 U64_LO(fp->rx_comp_mapping));
920 REG_WR(bp, BAR_USTRORM_INTMEM +
921 USTORM_MEM_WORKAROUND_ADDRESS_OFFSET(func) + 4,
922 U64_HI(fp->rx_comp_mapping));
923 }
924}
925static void bnx2x_free_tx_skbs(struct bnx2x *bp)
926{
927 int i;
928
929 for_each_queue(bp, i) {
930 struct bnx2x_fastpath *fp = &bp->fp[i];
931
932 u16 bd_cons = fp->tx_bd_cons;
933 u16 sw_prod = fp->tx_pkt_prod;
934 u16 sw_cons = fp->tx_pkt_cons;
935
936 while (sw_cons != sw_prod) {
937 bd_cons = bnx2x_free_tx_pkt(bp, fp, TX_BD(sw_cons));
938 sw_cons++;
939 }
940 }
941}
942
943static void bnx2x_free_rx_skbs(struct bnx2x *bp)
944{
945 int i, j;
946
947 for_each_queue(bp, j) {
948 struct bnx2x_fastpath *fp = &bp->fp[j];
949
950 for (i = 0; i < NUM_RX_BD; i++) {
951 struct sw_rx_bd *rx_buf = &fp->rx_buf_ring[i];
952 struct sk_buff *skb = rx_buf->skb;
953
954 if (skb == NULL)
955 continue;
956
957 dma_unmap_single(&bp->pdev->dev,
958 dma_unmap_addr(rx_buf, mapping),
959 bp->rx_buf_size, DMA_FROM_DEVICE);
960
961 rx_buf->skb = NULL;
962 dev_kfree_skb(skb);
963 }
964 if (!fp->disable_tpa)
965 bnx2x_free_tpa_pool(bp, fp, CHIP_IS_E1(bp) ?
966 ETH_MAX_AGGREGATION_QUEUES_E1 :
967 ETH_MAX_AGGREGATION_QUEUES_E1H);
968 }
969}
970
971void bnx2x_free_skbs(struct bnx2x *bp)
972{
973 bnx2x_free_tx_skbs(bp);
974 bnx2x_free_rx_skbs(bp);
975}
976
977static void bnx2x_free_msix_irqs(struct bnx2x *bp)
978{
979 int i, offset = 1;
980
981 free_irq(bp->msix_table[0].vector, bp->dev);
982 DP(NETIF_MSG_IFDOWN, "released sp irq (%d)\n",
983 bp->msix_table[0].vector);
984
985#ifdef BCM_CNIC
986 offset++;
987#endif
988 for_each_queue(bp, i) {
989 DP(NETIF_MSG_IFDOWN, "about to release fp #%d->%d irq "
990 "state %x\n", i, bp->msix_table[i + offset].vector,
991 bnx2x_fp(bp, i, state));
992
993 free_irq(bp->msix_table[i + offset].vector, &bp->fp[i]);
994 }
995}
996
997void bnx2x_free_irq(struct bnx2x *bp, bool disable_only)
998{
999 if (bp->flags & USING_MSIX_FLAG) {
1000 if (!disable_only)
1001 bnx2x_free_msix_irqs(bp);
1002 pci_disable_msix(bp->pdev);
1003 bp->flags &= ~USING_MSIX_FLAG;
1004
1005 } else if (bp->flags & USING_MSI_FLAG) {
1006 if (!disable_only)
1007 free_irq(bp->pdev->irq, bp->dev);
1008 pci_disable_msi(bp->pdev);
1009 bp->flags &= ~USING_MSI_FLAG;
1010
1011 } else if (!disable_only)
1012 free_irq(bp->pdev->irq, bp->dev);
1013}
1014
1015static int bnx2x_enable_msix(struct bnx2x *bp)
1016{
1017 int i, rc, offset = 1;
1018 int igu_vec = 0;
1019
1020 bp->msix_table[0].entry = igu_vec;
1021 DP(NETIF_MSG_IFUP, "msix_table[0].entry = %d (slowpath)\n", igu_vec);
1022
1023#ifdef BCM_CNIC
1024 igu_vec = BP_L_ID(bp) + offset;
1025 bp->msix_table[1].entry = igu_vec;
1026 DP(NETIF_MSG_IFUP, "msix_table[1].entry = %d (CNIC)\n", igu_vec);
1027 offset++;
1028#endif
1029 for_each_queue(bp, i) {
1030 igu_vec = BP_L_ID(bp) + offset + i;
1031 bp->msix_table[i + offset].entry = igu_vec;
1032 DP(NETIF_MSG_IFUP, "msix_table[%d].entry = %d "
1033 "(fastpath #%u)\n", i + offset, igu_vec, i);
1034 }
1035
1036 rc = pci_enable_msix(bp->pdev, &bp->msix_table[0],
1037 BNX2X_NUM_QUEUES(bp) + offset);
1038
1039 /*
1040 * reconfigure number of tx/rx queues according to available
1041 * MSI-X vectors
1042 */
1043 if (rc >= BNX2X_MIN_MSIX_VEC_CNT) {
1044 /* vectors available for FP */
1045 int fp_vec = rc - BNX2X_MSIX_VEC_FP_START;
1046
1047 DP(NETIF_MSG_IFUP,
1048 "Trying to use less MSI-X vectors: %d\n", rc);
1049
1050 rc = pci_enable_msix(bp->pdev, &bp->msix_table[0], rc);
1051
1052 if (rc) {
1053 DP(NETIF_MSG_IFUP,
1054 "MSI-X is not attainable rc %d\n", rc);
1055 return rc;
1056 }
1057
1058 bp->num_queues = min(bp->num_queues, fp_vec);
1059
1060 DP(NETIF_MSG_IFUP, "New queue configuration set: %d\n",
1061 bp->num_queues);
1062 } else if (rc) {
1063 DP(NETIF_MSG_IFUP, "MSI-X is not attainable rc %d\n", rc);
1064 return rc;
1065 }
1066
1067 bp->flags |= USING_MSIX_FLAG;
1068
1069 return 0;
1070}
1071
1072static int bnx2x_req_msix_irqs(struct bnx2x *bp)
1073{
1074 int i, rc, offset = 1;
1075
1076 rc = request_irq(bp->msix_table[0].vector, bnx2x_msix_sp_int, 0,
1077 bp->dev->name, bp->dev);
1078 if (rc) {
1079 BNX2X_ERR("request sp irq failed\n");
1080 return -EBUSY;
1081 }
1082
1083#ifdef BCM_CNIC
1084 offset++;
1085#endif
1086 for_each_queue(bp, i) {
1087 struct bnx2x_fastpath *fp = &bp->fp[i];
1088 snprintf(fp->name, sizeof(fp->name), "%s-fp-%d",
1089 bp->dev->name, i);
1090
1091 rc = request_irq(bp->msix_table[i + offset].vector,
1092 bnx2x_msix_fp_int, 0, fp->name, fp);
1093 if (rc) {
1094 BNX2X_ERR("request fp #%d irq failed rc %d\n", i, rc);
1095 bnx2x_free_msix_irqs(bp);
1096 return -EBUSY;
1097 }
1098
1099 fp->state = BNX2X_FP_STATE_IRQ;
1100 }
1101
1102 i = BNX2X_NUM_QUEUES(bp);
1103 netdev_info(bp->dev, "using MSI-X IRQs: sp %d fp[%d] %d"
1104 " ... fp[%d] %d\n",
1105 bp->msix_table[0].vector,
1106 0, bp->msix_table[offset].vector,
1107 i - 1, bp->msix_table[offset + i - 1].vector);
1108
1109 return 0;
1110}
1111
1112static int bnx2x_enable_msi(struct bnx2x *bp)
1113{
1114 int rc;
1115
1116 rc = pci_enable_msi(bp->pdev);
1117 if (rc) {
1118 DP(NETIF_MSG_IFUP, "MSI is not attainable\n");
1119 return -1;
1120 }
1121 bp->flags |= USING_MSI_FLAG;
1122
1123 return 0;
1124}
1125
1126static int bnx2x_req_irq(struct bnx2x *bp)
1127{
1128 unsigned long flags;
1129 int rc;
1130
1131 if (bp->flags & USING_MSI_FLAG)
1132 flags = 0;
1133 else
1134 flags = IRQF_SHARED;
1135
1136 rc = request_irq(bp->pdev->irq, bnx2x_interrupt, flags,
1137 bp->dev->name, bp->dev);
1138 if (!rc)
1139 bnx2x_fp(bp, 0, state) = BNX2X_FP_STATE_IRQ;
1140
1141 return rc;
1142}
1143
1144static void bnx2x_napi_enable(struct bnx2x *bp)
1145{
1146 int i;
1147
1148 for_each_queue(bp, i)
1149 napi_enable(&bnx2x_fp(bp, i, napi));
1150}
1151
1152static void bnx2x_napi_disable(struct bnx2x *bp)
1153{
1154 int i;
1155
1156 for_each_queue(bp, i)
1157 napi_disable(&bnx2x_fp(bp, i, napi));
1158}
1159
1160void bnx2x_netif_start(struct bnx2x *bp)
1161{
1162 int intr_sem;
1163
1164 intr_sem = atomic_dec_and_test(&bp->intr_sem);
1165 smp_wmb(); /* Ensure that bp->intr_sem update is SMP-safe */
1166
1167 if (intr_sem) {
1168 if (netif_running(bp->dev)) {
1169 bnx2x_napi_enable(bp);
1170 bnx2x_int_enable(bp);
1171 if (bp->state == BNX2X_STATE_OPEN)
1172 netif_tx_wake_all_queues(bp->dev);
1173 }
1174 }
1175}
1176
1177void bnx2x_netif_stop(struct bnx2x *bp, int disable_hw)
1178{
1179 bnx2x_int_disable_sync(bp, disable_hw);
1180 bnx2x_napi_disable(bp);
1181 netif_tx_disable(bp->dev);
1182}
1183static int bnx2x_set_num_queues(struct bnx2x *bp)
1184{
1185 int rc = 0;
1186
1187 switch (bp->int_mode) {
1188 case INT_MODE_INTx:
1189 case INT_MODE_MSI:
1190 bp->num_queues = 1;
1191 DP(NETIF_MSG_IFUP, "set number of queues to 1\n");
1192 break;
1193 default:
1194 /* Set number of queues according to bp->multi_mode value */
1195 bnx2x_set_num_queues_msix(bp);
1196
1197 DP(NETIF_MSG_IFUP, "set number of queues to %d\n",
1198 bp->num_queues);
1199
1200 /* if we can't use MSI-X we only need one fp,
1201 * so try to enable MSI-X with the requested number of fp's
1202 * and fallback to MSI or legacy INTx with one fp
1203 */
1204 rc = bnx2x_enable_msix(bp);
1205 if (rc)
1206 /* failed to enable MSI-X */
1207 bp->num_queues = 1;
1208 break;
1209 }
1210 bp->dev->real_num_tx_queues = bp->num_queues;
1211 return rc;
1212}
1213
Dmitry Kravkov6891dd22010-08-03 21:49:40 +00001214static void bnx2x_release_firmware(struct bnx2x *bp)
1215{
1216 kfree(bp->init_ops_offsets);
1217 kfree(bp->init_ops);
1218 kfree(bp->init_data);
1219 release_firmware(bp->firmware);
1220}
1221
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001222/* must be called with rtnl_lock */
1223int bnx2x_nic_load(struct bnx2x *bp, int load_mode)
1224{
1225 u32 load_code;
1226 int i, rc;
1227
Dmitry Kravkov6891dd22010-08-03 21:49:40 +00001228 /* Set init arrays */
1229 rc = bnx2x_init_firmware(bp);
1230 if (rc) {
1231 BNX2X_ERR("Error loading firmware\n");
1232 return rc;
1233 }
1234
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001235#ifdef BNX2X_STOP_ON_ERROR
1236 if (unlikely(bp->panic))
1237 return -EPERM;
1238#endif
1239
1240 bp->state = BNX2X_STATE_OPENING_WAIT4_LOAD;
1241
1242 rc = bnx2x_set_num_queues(bp);
1243
1244 if (bnx2x_alloc_mem(bp)) {
1245 bnx2x_free_irq(bp, true);
1246 return -ENOMEM;
1247 }
1248
1249 for_each_queue(bp, i)
1250 bnx2x_fp(bp, i, disable_tpa) =
1251 ((bp->flags & TPA_ENABLE_FLAG) == 0);
1252
1253 for_each_queue(bp, i)
1254 netif_napi_add(bp->dev, &bnx2x_fp(bp, i, napi),
1255 bnx2x_poll, 128);
1256
1257 bnx2x_napi_enable(bp);
1258
1259 if (bp->flags & USING_MSIX_FLAG) {
1260 rc = bnx2x_req_msix_irqs(bp);
1261 if (rc) {
1262 bnx2x_free_irq(bp, true);
1263 goto load_error1;
1264 }
1265 } else {
1266 /* Fall to INTx if failed to enable MSI-X due to lack of
1267 memory (in bnx2x_set_num_queues()) */
1268 if ((rc != -ENOMEM) && (bp->int_mode != INT_MODE_INTx))
1269 bnx2x_enable_msi(bp);
1270 bnx2x_ack_int(bp);
1271 rc = bnx2x_req_irq(bp);
1272 if (rc) {
1273 BNX2X_ERR("IRQ request failed rc %d, aborting\n", rc);
1274 bnx2x_free_irq(bp, true);
1275 goto load_error1;
1276 }
1277 if (bp->flags & USING_MSI_FLAG) {
1278 bp->dev->irq = bp->pdev->irq;
1279 netdev_info(bp->dev, "using MSI IRQ %d\n",
1280 bp->pdev->irq);
1281 }
1282 }
1283
1284 /* Send LOAD_REQUEST command to MCP
1285 Returns the type of LOAD command:
1286 if it is the first port to be initialized
1287 common blocks should be initialized, otherwise - not
1288 */
1289 if (!BP_NOMCP(bp)) {
Yaniv Rosnera22f0782010-09-07 11:41:20 +00001290 load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_REQ, 0);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001291 if (!load_code) {
1292 BNX2X_ERR("MCP response failure, aborting\n");
1293 rc = -EBUSY;
1294 goto load_error2;
1295 }
1296 if (load_code == FW_MSG_CODE_DRV_LOAD_REFUSED) {
1297 rc = -EBUSY; /* other port in diagnostic mode */
1298 goto load_error2;
1299 }
1300
1301 } else {
1302 int port = BP_PORT(bp);
1303
1304 DP(NETIF_MSG_IFUP, "NO MCP - load counts %d, %d, %d\n",
1305 load_count[0], load_count[1], load_count[2]);
1306 load_count[0]++;
1307 load_count[1 + port]++;
1308 DP(NETIF_MSG_IFUP, "NO MCP - new load counts %d, %d, %d\n",
1309 load_count[0], load_count[1], load_count[2]);
1310 if (load_count[0] == 1)
1311 load_code = FW_MSG_CODE_DRV_LOAD_COMMON;
1312 else if (load_count[1 + port] == 1)
1313 load_code = FW_MSG_CODE_DRV_LOAD_PORT;
1314 else
1315 load_code = FW_MSG_CODE_DRV_LOAD_FUNCTION;
1316 }
1317
1318 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) ||
1319 (load_code == FW_MSG_CODE_DRV_LOAD_PORT))
1320 bp->port.pmf = 1;
1321 else
1322 bp->port.pmf = 0;
1323 DP(NETIF_MSG_LINK, "pmf %d\n", bp->port.pmf);
1324
1325 /* Initialize HW */
1326 rc = bnx2x_init_hw(bp, load_code);
1327 if (rc) {
1328 BNX2X_ERR("HW init failed, aborting\n");
Yaniv Rosnera22f0782010-09-07 11:41:20 +00001329 bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
1330 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
1331 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001332 goto load_error2;
1333 }
1334
1335 /* Setup NIC internals and enable interrupts */
1336 bnx2x_nic_init(bp, load_code);
1337
1338 if ((load_code == FW_MSG_CODE_DRV_LOAD_COMMON) &&
1339 (bp->common.shmem2_base))
1340 SHMEM2_WR(bp, dcc_support,
1341 (SHMEM_DCC_SUPPORT_DISABLE_ENABLE_PF_TLV |
1342 SHMEM_DCC_SUPPORT_BANDWIDTH_ALLOCATION_TLV));
1343
1344 /* Send LOAD_DONE command to MCP */
1345 if (!BP_NOMCP(bp)) {
Yaniv Rosnera22f0782010-09-07 11:41:20 +00001346 load_code = bnx2x_fw_command(bp, DRV_MSG_CODE_LOAD_DONE, 0);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001347 if (!load_code) {
1348 BNX2X_ERR("MCP response failure, aborting\n");
1349 rc = -EBUSY;
1350 goto load_error3;
1351 }
1352 }
1353
1354 bp->state = BNX2X_STATE_OPENING_WAIT4_PORT;
1355
1356 rc = bnx2x_setup_leading(bp);
1357 if (rc) {
1358 BNX2X_ERR("Setup leading failed!\n");
1359#ifndef BNX2X_STOP_ON_ERROR
1360 goto load_error3;
1361#else
1362 bp->panic = 1;
1363 return -EBUSY;
1364#endif
1365 }
1366
1367 if (CHIP_IS_E1H(bp))
1368 if (bp->mf_config & FUNC_MF_CFG_FUNC_DISABLED) {
1369 DP(NETIF_MSG_IFUP, "mf_cfg function disabled\n");
1370 bp->flags |= MF_FUNC_DIS;
1371 }
1372
1373 if (bp->state == BNX2X_STATE_OPEN) {
1374#ifdef BCM_CNIC
1375 /* Enable Timer scan */
1376 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + BP_PORT(bp)*4, 1);
1377#endif
1378 for_each_nondefault_queue(bp, i) {
1379 rc = bnx2x_setup_multi(bp, i);
1380 if (rc)
1381#ifdef BCM_CNIC
1382 goto load_error4;
1383#else
1384 goto load_error3;
1385#endif
1386 }
1387
1388 if (CHIP_IS_E1(bp))
1389 bnx2x_set_eth_mac_addr_e1(bp, 1);
1390 else
1391 bnx2x_set_eth_mac_addr_e1h(bp, 1);
1392#ifdef BCM_CNIC
1393 /* Set iSCSI L2 MAC */
1394 mutex_lock(&bp->cnic_mutex);
1395 if (bp->cnic_eth_dev.drv_state & CNIC_DRV_STATE_REGD) {
1396 bnx2x_set_iscsi_eth_mac_addr(bp, 1);
1397 bp->cnic_flags |= BNX2X_CNIC_FLAG_MAC_SET;
1398 bnx2x_init_sb(bp, bp->cnic_sb, bp->cnic_sb_mapping,
1399 CNIC_SB_ID(bp));
1400 }
1401 mutex_unlock(&bp->cnic_mutex);
1402#endif
1403 }
1404
1405 if (bp->port.pmf)
1406 bnx2x_initial_phy_init(bp, load_mode);
1407
1408 /* Start fast path */
1409 switch (load_mode) {
1410 case LOAD_NORMAL:
1411 if (bp->state == BNX2X_STATE_OPEN) {
1412 /* Tx queue should be only reenabled */
1413 netif_tx_wake_all_queues(bp->dev);
1414 }
1415 /* Initialize the receive filter. */
1416 bnx2x_set_rx_mode(bp->dev);
1417 break;
1418
1419 case LOAD_OPEN:
1420 netif_tx_start_all_queues(bp->dev);
1421 if (bp->state != BNX2X_STATE_OPEN)
1422 netif_tx_disable(bp->dev);
1423 /* Initialize the receive filter. */
1424 bnx2x_set_rx_mode(bp->dev);
1425 break;
1426
1427 case LOAD_DIAG:
1428 /* Initialize the receive filter. */
1429 bnx2x_set_rx_mode(bp->dev);
1430 bp->state = BNX2X_STATE_DIAG;
1431 break;
1432
1433 default:
1434 break;
1435 }
1436
1437 if (!bp->port.pmf)
1438 bnx2x__link_status_update(bp);
1439
1440 /* start the timer */
1441 mod_timer(&bp->timer, jiffies + bp->current_interval);
1442
1443#ifdef BCM_CNIC
1444 bnx2x_setup_cnic_irq_info(bp);
1445 if (bp->state == BNX2X_STATE_OPEN)
1446 bnx2x_cnic_notify(bp, CNIC_CTL_START_CMD);
1447#endif
1448 bnx2x_inc_load_cnt(bp);
1449
Dmitry Kravkov6891dd22010-08-03 21:49:40 +00001450 bnx2x_release_firmware(bp);
1451
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001452 return 0;
1453
1454#ifdef BCM_CNIC
1455load_error4:
1456 /* Disable Timer scan */
1457 REG_WR(bp, TM_REG_EN_LINEAR0_TIMER + BP_PORT(bp)*4, 0);
1458#endif
1459load_error3:
1460 bnx2x_int_disable_sync(bp, 1);
1461 if (!BP_NOMCP(bp)) {
Yaniv Rosnera22f0782010-09-07 11:41:20 +00001462 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_REQ_WOL_MCP, 0);
1463 bnx2x_fw_command(bp, DRV_MSG_CODE_UNLOAD_DONE, 0);
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001464 }
1465 bp->port.pmf = 0;
1466 /* Free SKBs, SGEs, TPA pool and driver internals */
1467 bnx2x_free_skbs(bp);
1468 for_each_queue(bp, i)
1469 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
1470load_error2:
1471 /* Release IRQs */
1472 bnx2x_free_irq(bp, false);
1473load_error1:
1474 bnx2x_napi_disable(bp);
1475 for_each_queue(bp, i)
1476 netif_napi_del(&bnx2x_fp(bp, i, napi));
1477 bnx2x_free_mem(bp);
1478
Dmitry Kravkov6891dd22010-08-03 21:49:40 +00001479 bnx2x_release_firmware(bp);
1480
Dmitry Kravkov9f6c9252010-07-27 12:34:34 +00001481 return rc;
1482}
1483
1484/* must be called with rtnl_lock */
1485int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
1486{
1487 int i;
1488
1489 if (bp->state == BNX2X_STATE_CLOSED) {
1490 /* Interface has been removed - nothing to recover */
1491 bp->recovery_state = BNX2X_RECOVERY_DONE;
1492 bp->is_leader = 0;
1493 bnx2x_release_hw_lock(bp, HW_LOCK_RESOURCE_RESERVED_08);
1494 smp_wmb();
1495
1496 return -EINVAL;
1497 }
1498
1499#ifdef BCM_CNIC
1500 bnx2x_cnic_notify(bp, CNIC_CTL_STOP_CMD);
1501#endif
1502 bp->state = BNX2X_STATE_CLOSING_WAIT4_HALT;
1503
1504 /* Set "drop all" */
1505 bp->rx_mode = BNX2X_RX_MODE_NONE;
1506 bnx2x_set_storm_rx_mode(bp);
1507
1508 /* Disable HW interrupts, NAPI and Tx */
1509 bnx2x_netif_stop(bp, 1);
1510 netif_carrier_off(bp->dev);
1511
1512 del_timer_sync(&bp->timer);
1513 SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb,
1514 (DRV_PULSE_ALWAYS_ALIVE | bp->fw_drv_pulse_wr_seq));
1515 bnx2x_stats_handle(bp, STATS_EVENT_STOP);
1516
1517 /* Release IRQs */
1518 bnx2x_free_irq(bp, false);
1519
1520 /* Cleanup the chip if needed */
1521 if (unload_mode != UNLOAD_RECOVERY)
1522 bnx2x_chip_cleanup(bp, unload_mode);
1523
1524 bp->port.pmf = 0;
1525
1526 /* Free SKBs, SGEs, TPA pool and driver internals */
1527 bnx2x_free_skbs(bp);
1528 for_each_queue(bp, i)
1529 bnx2x_free_rx_sge_range(bp, bp->fp + i, NUM_RX_SGE);
1530 for_each_queue(bp, i)
1531 netif_napi_del(&bnx2x_fp(bp, i, napi));
1532 bnx2x_free_mem(bp);
1533
1534 bp->state = BNX2X_STATE_CLOSED;
1535
1536 /* The last driver must disable a "close the gate" if there is no
1537 * parity attention or "process kill" pending.
1538 */
1539 if ((!bnx2x_dec_load_cnt(bp)) && (!bnx2x_chk_parity_attn(bp)) &&
1540 bnx2x_reset_is_done(bp))
1541 bnx2x_disable_close_the_gate(bp);
1542
1543 /* Reset MCP mail box sequence if there is on going recovery */
1544 if (unload_mode == UNLOAD_RECOVERY)
1545 bp->fw_seq = 0;
1546
1547 return 0;
1548}
1549int bnx2x_set_power_state(struct bnx2x *bp, pci_power_t state)
1550{
1551 u16 pmcsr;
1552
1553 pci_read_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL, &pmcsr);
1554
1555 switch (state) {
1556 case PCI_D0:
1557 pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL,
1558 ((pmcsr & ~PCI_PM_CTRL_STATE_MASK) |
1559 PCI_PM_CTRL_PME_STATUS));
1560
1561 if (pmcsr & PCI_PM_CTRL_STATE_MASK)
1562 /* delay required during transition out of D3hot */
1563 msleep(20);
1564 break;
1565
1566 case PCI_D3hot:
1567 /* If there are other clients above don't
1568 shut down the power */
1569 if (atomic_read(&bp->pdev->enable_cnt) != 1)
1570 return 0;
1571 /* Don't shut down the power for emulation and FPGA */
1572 if (CHIP_REV_IS_SLOW(bp))
1573 return 0;
1574
1575 pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
1576 pmcsr |= 3;
1577
1578 if (bp->wol)
1579 pmcsr |= PCI_PM_CTRL_PME_ENABLE;
1580
1581 pci_write_config_word(bp->pdev, bp->pm_cap + PCI_PM_CTRL,
1582 pmcsr);
1583
1584 /* No more memory access after this point until
1585 * device is brought back to D0.
1586 */
1587 break;
1588
1589 default:
1590 return -EINVAL;
1591 }
1592 return 0;
1593}
1594
1595
1596
1597/*
1598 * net_device service functions
1599 */
1600
1601static int bnx2x_poll(struct napi_struct *napi, int budget)
1602{
1603 int work_done = 0;
1604 struct bnx2x_fastpath *fp = container_of(napi, struct bnx2x_fastpath,
1605 napi);
1606 struct bnx2x *bp = fp->bp;
1607
1608 while (1) {
1609#ifdef BNX2X_STOP_ON_ERROR
1610 if (unlikely(bp->panic)) {
1611 napi_complete(napi);
1612 return 0;
1613 }
1614#endif
1615
1616 if (bnx2x_has_tx_work(fp))
1617 bnx2x_tx_int(fp);
1618
1619 if (bnx2x_has_rx_work(fp)) {
1620 work_done += bnx2x_rx_int(fp, budget - work_done);
1621
1622 /* must not complete if we consumed full budget */
1623 if (work_done >= budget)
1624 break;
1625 }
1626
1627 /* Fall out from the NAPI loop if needed */
1628 if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
1629 bnx2x_update_fpsb_idx(fp);
1630 /* bnx2x_has_rx_work() reads the status block, thus we need
1631 * to ensure that status block indices have been actually read
1632 * (bnx2x_update_fpsb_idx) prior to this check
1633 * (bnx2x_has_rx_work) so that we won't write the "newer"
1634 * value of the status block to IGU (if there was a DMA right
1635 * after bnx2x_has_rx_work and if there is no rmb, the memory
1636 * reading (bnx2x_update_fpsb_idx) may be postponed to right
1637 * before bnx2x_ack_sb). In this case there will never be
1638 * another interrupt until there is another update of the
1639 * status block, while there is still unhandled work.
1640 */
1641 rmb();
1642
1643 if (!(bnx2x_has_rx_work(fp) || bnx2x_has_tx_work(fp))) {
1644 napi_complete(napi);
1645 /* Re-enable interrupts */
1646 bnx2x_ack_sb(bp, fp->sb_id, CSTORM_ID,
1647 le16_to_cpu(fp->fp_c_idx),
1648 IGU_INT_NOP, 1);
1649 bnx2x_ack_sb(bp, fp->sb_id, USTORM_ID,
1650 le16_to_cpu(fp->fp_u_idx),
1651 IGU_INT_ENABLE, 1);
1652 break;
1653 }
1654 }
1655 }
1656
1657 return work_done;
1658}
1659
1660
1661/* we split the first BD into headers and data BDs
1662 * to ease the pain of our fellow microcode engineers
1663 * we use one mapping for both BDs
1664 * So far this has only been observed to happen
1665 * in Other Operating Systems(TM)
1666 */
1667static noinline u16 bnx2x_tx_split(struct bnx2x *bp,
1668 struct bnx2x_fastpath *fp,
1669 struct sw_tx_bd *tx_buf,
1670 struct eth_tx_start_bd **tx_bd, u16 hlen,
1671 u16 bd_prod, int nbd)
1672{
1673 struct eth_tx_start_bd *h_tx_bd = *tx_bd;
1674 struct eth_tx_bd *d_tx_bd;
1675 dma_addr_t mapping;
1676 int old_len = le16_to_cpu(h_tx_bd->nbytes);
1677
1678 /* first fix first BD */
1679 h_tx_bd->nbd = cpu_to_le16(nbd);
1680 h_tx_bd->nbytes = cpu_to_le16(hlen);
1681
1682 DP(NETIF_MSG_TX_QUEUED, "TSO split header size is %d "
1683 "(%x:%x) nbd %d\n", h_tx_bd->nbytes, h_tx_bd->addr_hi,
1684 h_tx_bd->addr_lo, h_tx_bd->nbd);
1685
1686 /* now get a new data BD
1687 * (after the pbd) and fill it */
1688 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
1689 d_tx_bd = &fp->tx_desc_ring[bd_prod].reg_bd;
1690
1691 mapping = HILO_U64(le32_to_cpu(h_tx_bd->addr_hi),
1692 le32_to_cpu(h_tx_bd->addr_lo)) + hlen;
1693
1694 d_tx_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
1695 d_tx_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
1696 d_tx_bd->nbytes = cpu_to_le16(old_len - hlen);
1697
1698 /* this marks the BD as one that has no individual mapping */
1699 tx_buf->flags |= BNX2X_TSO_SPLIT_BD;
1700
1701 DP(NETIF_MSG_TX_QUEUED,
1702 "TSO split data size is %d (%x:%x)\n",
1703 d_tx_bd->nbytes, d_tx_bd->addr_hi, d_tx_bd->addr_lo);
1704
1705 /* update tx_bd */
1706 *tx_bd = (struct eth_tx_start_bd *)d_tx_bd;
1707
1708 return bd_prod;
1709}
1710
1711static inline u16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix)
1712{
1713 if (fix > 0)
1714 csum = (u16) ~csum_fold(csum_sub(csum,
1715 csum_partial(t_header - fix, fix, 0)));
1716
1717 else if (fix < 0)
1718 csum = (u16) ~csum_fold(csum_add(csum,
1719 csum_partial(t_header, -fix, 0)));
1720
1721 return swab16(csum);
1722}
1723
1724static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb)
1725{
1726 u32 rc;
1727
1728 if (skb->ip_summed != CHECKSUM_PARTIAL)
1729 rc = XMIT_PLAIN;
1730
1731 else {
1732 if (skb->protocol == htons(ETH_P_IPV6)) {
1733 rc = XMIT_CSUM_V6;
1734 if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)
1735 rc |= XMIT_CSUM_TCP;
1736
1737 } else {
1738 rc = XMIT_CSUM_V4;
1739 if (ip_hdr(skb)->protocol == IPPROTO_TCP)
1740 rc |= XMIT_CSUM_TCP;
1741 }
1742 }
1743
1744 if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV4)
1745 rc |= (XMIT_GSO_V4 | XMIT_CSUM_V4 | XMIT_CSUM_TCP);
1746
1747 else if (skb_shinfo(skb)->gso_type & SKB_GSO_TCPV6)
1748 rc |= (XMIT_GSO_V6 | XMIT_CSUM_TCP | XMIT_CSUM_V6);
1749
1750 return rc;
1751}
1752
1753#if (MAX_SKB_FRAGS >= MAX_FETCH_BD - 3)
1754/* check if packet requires linearization (packet is too fragmented)
1755 no need to check fragmentation if page size > 8K (there will be no
1756 violation to FW restrictions) */
1757static int bnx2x_pkt_req_lin(struct bnx2x *bp, struct sk_buff *skb,
1758 u32 xmit_type)
1759{
1760 int to_copy = 0;
1761 int hlen = 0;
1762 int first_bd_sz = 0;
1763
1764 /* 3 = 1 (for linear data BD) + 2 (for PBD and last BD) */
1765 if (skb_shinfo(skb)->nr_frags >= (MAX_FETCH_BD - 3)) {
1766
1767 if (xmit_type & XMIT_GSO) {
1768 unsigned short lso_mss = skb_shinfo(skb)->gso_size;
1769 /* Check if LSO packet needs to be copied:
1770 3 = 1 (for headers BD) + 2 (for PBD and last BD) */
1771 int wnd_size = MAX_FETCH_BD - 3;
1772 /* Number of windows to check */
1773 int num_wnds = skb_shinfo(skb)->nr_frags - wnd_size;
1774 int wnd_idx = 0;
1775 int frag_idx = 0;
1776 u32 wnd_sum = 0;
1777
1778 /* Headers length */
1779 hlen = (int)(skb_transport_header(skb) - skb->data) +
1780 tcp_hdrlen(skb);
1781
1782 /* Amount of data (w/o headers) on linear part of SKB*/
1783 first_bd_sz = skb_headlen(skb) - hlen;
1784
1785 wnd_sum = first_bd_sz;
1786
1787 /* Calculate the first sum - it's special */
1788 for (frag_idx = 0; frag_idx < wnd_size - 1; frag_idx++)
1789 wnd_sum +=
1790 skb_shinfo(skb)->frags[frag_idx].size;
1791
1792 /* If there was data on linear skb data - check it */
1793 if (first_bd_sz > 0) {
1794 if (unlikely(wnd_sum < lso_mss)) {
1795 to_copy = 1;
1796 goto exit_lbl;
1797 }
1798
1799 wnd_sum -= first_bd_sz;
1800 }
1801
1802 /* Others are easier: run through the frag list and
1803 check all windows */
1804 for (wnd_idx = 0; wnd_idx <= num_wnds; wnd_idx++) {
1805 wnd_sum +=
1806 skb_shinfo(skb)->frags[wnd_idx + wnd_size - 1].size;
1807
1808 if (unlikely(wnd_sum < lso_mss)) {
1809 to_copy = 1;
1810 break;
1811 }
1812 wnd_sum -=
1813 skb_shinfo(skb)->frags[wnd_idx].size;
1814 }
1815 } else {
1816 /* in non-LSO too fragmented packet should always
1817 be linearized */
1818 to_copy = 1;
1819 }
1820 }
1821
1822exit_lbl:
1823 if (unlikely(to_copy))
1824 DP(NETIF_MSG_TX_QUEUED,
1825 "Linearization IS REQUIRED for %s packet. "
1826 "num_frags %d hlen %d first_bd_sz %d\n",
1827 (xmit_type & XMIT_GSO) ? "LSO" : "non-LSO",
1828 skb_shinfo(skb)->nr_frags, hlen, first_bd_sz);
1829
1830 return to_copy;
1831}
1832#endif
1833
1834/* called with netif_tx_lock
1835 * bnx2x_tx_int() runs without netif_tx_lock unless it needs to call
1836 * netif_wake_queue()
1837 */
1838netdev_tx_t bnx2x_start_xmit(struct sk_buff *skb, struct net_device *dev)
1839{
1840 struct bnx2x *bp = netdev_priv(dev);
1841 struct bnx2x_fastpath *fp;
1842 struct netdev_queue *txq;
1843 struct sw_tx_bd *tx_buf;
1844 struct eth_tx_start_bd *tx_start_bd;
1845 struct eth_tx_bd *tx_data_bd, *total_pkt_bd = NULL;
1846 struct eth_tx_parse_bd *pbd = NULL;
1847 u16 pkt_prod, bd_prod;
1848 int nbd, fp_index;
1849 dma_addr_t mapping;
1850 u32 xmit_type = bnx2x_xmit_type(bp, skb);
1851 int i;
1852 u8 hlen = 0;
1853 __le16 pkt_size = 0;
1854 struct ethhdr *eth;
1855 u8 mac_type = UNICAST_ADDRESS;
1856
1857#ifdef BNX2X_STOP_ON_ERROR
1858 if (unlikely(bp->panic))
1859 return NETDEV_TX_BUSY;
1860#endif
1861
1862 fp_index = skb_get_queue_mapping(skb);
1863 txq = netdev_get_tx_queue(dev, fp_index);
1864
1865 fp = &bp->fp[fp_index];
1866
1867 if (unlikely(bnx2x_tx_avail(fp) < (skb_shinfo(skb)->nr_frags + 3))) {
1868 fp->eth_q_stats.driver_xoff++;
1869 netif_tx_stop_queue(txq);
1870 BNX2X_ERR("BUG! Tx ring full when queue awake!\n");
1871 return NETDEV_TX_BUSY;
1872 }
1873
1874 DP(NETIF_MSG_TX_QUEUED, "SKB: summed %x protocol %x protocol(%x,%x)"
1875 " gso type %x xmit_type %x\n",
1876 skb->ip_summed, skb->protocol, ipv6_hdr(skb)->nexthdr,
1877 ip_hdr(skb)->protocol, skb_shinfo(skb)->gso_type, xmit_type);
1878
1879 eth = (struct ethhdr *)skb->data;
1880
1881 /* set flag according to packet type (UNICAST_ADDRESS is default)*/
1882 if (unlikely(is_multicast_ether_addr(eth->h_dest))) {
1883 if (is_broadcast_ether_addr(eth->h_dest))
1884 mac_type = BROADCAST_ADDRESS;
1885 else
1886 mac_type = MULTICAST_ADDRESS;
1887 }
1888
1889#if (MAX_SKB_FRAGS >= MAX_FETCH_BD - 3)
1890 /* First, check if we need to linearize the skb (due to FW
1891 restrictions). No need to check fragmentation if page size > 8K
1892 (there will be no violation to FW restrictions) */
1893 if (bnx2x_pkt_req_lin(bp, skb, xmit_type)) {
1894 /* Statistics of linearization */
1895 bp->lin_cnt++;
1896 if (skb_linearize(skb) != 0) {
1897 DP(NETIF_MSG_TX_QUEUED, "SKB linearization failed - "
1898 "silently dropping this SKB\n");
1899 dev_kfree_skb_any(skb);
1900 return NETDEV_TX_OK;
1901 }
1902 }
1903#endif
1904
1905 /*
1906 Please read carefully. First we use one BD which we mark as start,
1907 then we have a parsing info BD (used for TSO or xsum),
1908 and only then we have the rest of the TSO BDs.
1909 (don't forget to mark the last one as last,
1910 and to unmap only AFTER you write to the BD ...)
1911 And above all, all pdb sizes are in words - NOT DWORDS!
1912 */
1913
1914 pkt_prod = fp->tx_pkt_prod++;
1915 bd_prod = TX_BD(fp->tx_bd_prod);
1916
1917 /* get a tx_buf and first BD */
1918 tx_buf = &fp->tx_buf_ring[TX_BD(pkt_prod)];
1919 tx_start_bd = &fp->tx_desc_ring[bd_prod].start_bd;
1920
1921 tx_start_bd->bd_flags.as_bitfield = ETH_TX_BD_FLAGS_START_BD;
1922 tx_start_bd->general_data = (mac_type <<
1923 ETH_TX_START_BD_ETH_ADDR_TYPE_SHIFT);
1924 /* header nbd */
1925 tx_start_bd->general_data |= (1 << ETH_TX_START_BD_HDR_NBDS_SHIFT);
1926
1927 /* remember the first BD of the packet */
1928 tx_buf->first_bd = fp->tx_bd_prod;
1929 tx_buf->skb = skb;
1930 tx_buf->flags = 0;
1931
1932 DP(NETIF_MSG_TX_QUEUED,
1933 "sending pkt %u @%p next_idx %u bd %u @%p\n",
1934 pkt_prod, tx_buf, fp->tx_pkt_prod, bd_prod, tx_start_bd);
1935
1936#ifdef BCM_VLAN
1937 if ((bp->vlgrp != NULL) && vlan_tx_tag_present(skb) &&
1938 (bp->flags & HW_VLAN_TX_FLAG)) {
1939 tx_start_bd->vlan = cpu_to_le16(vlan_tx_tag_get(skb));
1940 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_VLAN_TAG;
1941 } else
1942#endif
1943 tx_start_bd->vlan = cpu_to_le16(pkt_prod);
1944
1945 /* turn on parsing and get a BD */
1946 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
1947 pbd = &fp->tx_desc_ring[bd_prod].parse_bd;
1948
1949 memset(pbd, 0, sizeof(struct eth_tx_parse_bd));
1950
1951 if (xmit_type & XMIT_CSUM) {
1952 hlen = (skb_network_header(skb) - skb->data) / 2;
1953
1954 /* for now NS flag is not used in Linux */
1955 pbd->global_data =
1956 (hlen | ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
1957 ETH_TX_PARSE_BD_LLC_SNAP_EN_SHIFT));
1958
1959 pbd->ip_hlen = (skb_transport_header(skb) -
1960 skb_network_header(skb)) / 2;
1961
1962 hlen += pbd->ip_hlen + tcp_hdrlen(skb) / 2;
1963
1964 pbd->total_hlen = cpu_to_le16(hlen);
1965 hlen = hlen*2;
1966
1967 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_L4_CSUM;
1968
1969 if (xmit_type & XMIT_CSUM_V4)
1970 tx_start_bd->bd_flags.as_bitfield |=
1971 ETH_TX_BD_FLAGS_IP_CSUM;
1972 else
1973 tx_start_bd->bd_flags.as_bitfield |=
1974 ETH_TX_BD_FLAGS_IPV6;
1975
1976 if (xmit_type & XMIT_CSUM_TCP) {
1977 pbd->tcp_pseudo_csum = swab16(tcp_hdr(skb)->check);
1978
1979 } else {
1980 s8 fix = SKB_CS_OFF(skb); /* signed! */
1981
1982 pbd->global_data |= ETH_TX_PARSE_BD_UDP_CS_FLG;
1983
1984 DP(NETIF_MSG_TX_QUEUED,
1985 "hlen %d fix %d csum before fix %x\n",
1986 le16_to_cpu(pbd->total_hlen), fix, SKB_CS(skb));
1987
1988 /* HW bug: fixup the CSUM */
1989 pbd->tcp_pseudo_csum =
1990 bnx2x_csum_fix(skb_transport_header(skb),
1991 SKB_CS(skb), fix);
1992
1993 DP(NETIF_MSG_TX_QUEUED, "csum after fix %x\n",
1994 pbd->tcp_pseudo_csum);
1995 }
1996 }
1997
1998 mapping = dma_map_single(&bp->pdev->dev, skb->data,
1999 skb_headlen(skb), DMA_TO_DEVICE);
2000
2001 tx_start_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
2002 tx_start_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
2003 nbd = skb_shinfo(skb)->nr_frags + 2; /* start_bd + pbd + frags */
2004 tx_start_bd->nbd = cpu_to_le16(nbd);
2005 tx_start_bd->nbytes = cpu_to_le16(skb_headlen(skb));
2006 pkt_size = tx_start_bd->nbytes;
2007
2008 DP(NETIF_MSG_TX_QUEUED, "first bd @%p addr (%x:%x) nbd %d"
2009 " nbytes %d flags %x vlan %x\n",
2010 tx_start_bd, tx_start_bd->addr_hi, tx_start_bd->addr_lo,
2011 le16_to_cpu(tx_start_bd->nbd), le16_to_cpu(tx_start_bd->nbytes),
2012 tx_start_bd->bd_flags.as_bitfield, le16_to_cpu(tx_start_bd->vlan));
2013
2014 if (xmit_type & XMIT_GSO) {
2015
2016 DP(NETIF_MSG_TX_QUEUED,
2017 "TSO packet len %d hlen %d total len %d tso size %d\n",
2018 skb->len, hlen, skb_headlen(skb),
2019 skb_shinfo(skb)->gso_size);
2020
2021 tx_start_bd->bd_flags.as_bitfield |= ETH_TX_BD_FLAGS_SW_LSO;
2022
2023 if (unlikely(skb_headlen(skb) > hlen))
2024 bd_prod = bnx2x_tx_split(bp, fp, tx_buf, &tx_start_bd,
2025 hlen, bd_prod, ++nbd);
2026
2027 pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
2028 pbd->tcp_send_seq = swab32(tcp_hdr(skb)->seq);
2029 pbd->tcp_flags = pbd_tcp_flags(skb);
2030
2031 if (xmit_type & XMIT_GSO_V4) {
2032 pbd->ip_id = swab16(ip_hdr(skb)->id);
2033 pbd->tcp_pseudo_csum =
2034 swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
2035 ip_hdr(skb)->daddr,
2036 0, IPPROTO_TCP, 0));
2037
2038 } else
2039 pbd->tcp_pseudo_csum =
2040 swab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
2041 &ipv6_hdr(skb)->daddr,
2042 0, IPPROTO_TCP, 0));
2043
2044 pbd->global_data |= ETH_TX_PARSE_BD_PSEUDO_CS_WITHOUT_LEN;
2045 }
2046 tx_data_bd = (struct eth_tx_bd *)tx_start_bd;
2047
2048 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2049 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2050
2051 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
2052 tx_data_bd = &fp->tx_desc_ring[bd_prod].reg_bd;
2053 if (total_pkt_bd == NULL)
2054 total_pkt_bd = &fp->tx_desc_ring[bd_prod].reg_bd;
2055
2056 mapping = dma_map_page(&bp->pdev->dev, frag->page,
2057 frag->page_offset,
2058 frag->size, DMA_TO_DEVICE);
2059
2060 tx_data_bd->addr_hi = cpu_to_le32(U64_HI(mapping));
2061 tx_data_bd->addr_lo = cpu_to_le32(U64_LO(mapping));
2062 tx_data_bd->nbytes = cpu_to_le16(frag->size);
2063 le16_add_cpu(&pkt_size, frag->size);
2064
2065 DP(NETIF_MSG_TX_QUEUED,
2066 "frag %d bd @%p addr (%x:%x) nbytes %d\n",
2067 i, tx_data_bd, tx_data_bd->addr_hi, tx_data_bd->addr_lo,
2068 le16_to_cpu(tx_data_bd->nbytes));
2069 }
2070
2071 DP(NETIF_MSG_TX_QUEUED, "last bd @%p\n", tx_data_bd);
2072
2073 bd_prod = TX_BD(NEXT_TX_IDX(bd_prod));
2074
2075 /* now send a tx doorbell, counting the next BD
2076 * if the packet contains or ends with it
2077 */
2078 if (TX_BD_POFF(bd_prod) < nbd)
2079 nbd++;
2080
2081 if (total_pkt_bd != NULL)
2082 total_pkt_bd->total_pkt_bytes = pkt_size;
2083
2084 if (pbd)
2085 DP(NETIF_MSG_TX_QUEUED,
2086 "PBD @%p ip_data %x ip_hlen %u ip_id %u lso_mss %u"
2087 " tcp_flags %x xsum %x seq %u hlen %u\n",
2088 pbd, pbd->global_data, pbd->ip_hlen, pbd->ip_id,
2089 pbd->lso_mss, pbd->tcp_flags, pbd->tcp_pseudo_csum,
2090 pbd->tcp_send_seq, le16_to_cpu(pbd->total_hlen));
2091
2092 DP(NETIF_MSG_TX_QUEUED, "doorbell: nbd %d bd %u\n", nbd, bd_prod);
2093
2094 /*
2095 * Make sure that the BD data is updated before updating the producer
2096 * since FW might read the BD right after the producer is updated.
2097 * This is only applicable for weak-ordered memory model archs such
2098 * as IA-64. The following barrier is also mandatory since FW will
2099 * assumes packets must have BDs.
2100 */
2101 wmb();
2102
2103 fp->tx_db.data.prod += nbd;
2104 barrier();
2105 DOORBELL(bp, fp->index, fp->tx_db.raw);
2106
2107 mmiowb();
2108
2109 fp->tx_bd_prod += nbd;
2110
2111 if (unlikely(bnx2x_tx_avail(fp) < MAX_SKB_FRAGS + 3)) {
2112 netif_tx_stop_queue(txq);
2113
2114 /* paired memory barrier is in bnx2x_tx_int(), we have to keep
2115 * ordering of set_bit() in netif_tx_stop_queue() and read of
2116 * fp->bd_tx_cons */
2117 smp_mb();
2118
2119 fp->eth_q_stats.driver_xoff++;
2120 if (bnx2x_tx_avail(fp) >= MAX_SKB_FRAGS + 3)
2121 netif_tx_wake_queue(txq);
2122 }
2123 fp->tx_pkt++;
2124
2125 return NETDEV_TX_OK;
2126}
2127/* called with rtnl_lock */
2128int bnx2x_change_mac_addr(struct net_device *dev, void *p)
2129{
2130 struct sockaddr *addr = p;
2131 struct bnx2x *bp = netdev_priv(dev);
2132
2133 if (!is_valid_ether_addr((u8 *)(addr->sa_data)))
2134 return -EINVAL;
2135
2136 memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
2137 if (netif_running(dev)) {
2138 if (CHIP_IS_E1(bp))
2139 bnx2x_set_eth_mac_addr_e1(bp, 1);
2140 else
2141 bnx2x_set_eth_mac_addr_e1h(bp, 1);
2142 }
2143
2144 return 0;
2145}
2146
2147/* called with rtnl_lock */
2148int bnx2x_change_mtu(struct net_device *dev, int new_mtu)
2149{
2150 struct bnx2x *bp = netdev_priv(dev);
2151 int rc = 0;
2152
2153 if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
2154 printk(KERN_ERR "Handling parity error recovery. Try again later\n");
2155 return -EAGAIN;
2156 }
2157
2158 if ((new_mtu > ETH_MAX_JUMBO_PACKET_SIZE) ||
2159 ((new_mtu + ETH_HLEN) < ETH_MIN_PACKET_SIZE))
2160 return -EINVAL;
2161
2162 /* This does not race with packet allocation
2163 * because the actual alloc size is
2164 * only updated as part of load
2165 */
2166 dev->mtu = new_mtu;
2167
2168 if (netif_running(dev)) {
2169 bnx2x_nic_unload(bp, UNLOAD_NORMAL);
2170 rc = bnx2x_nic_load(bp, LOAD_NORMAL);
2171 }
2172
2173 return rc;
2174}
2175
2176void bnx2x_tx_timeout(struct net_device *dev)
2177{
2178 struct bnx2x *bp = netdev_priv(dev);
2179
2180#ifdef BNX2X_STOP_ON_ERROR
2181 if (!bp->panic)
2182 bnx2x_panic();
2183#endif
2184 /* This allows the netif to be shutdown gracefully before resetting */
2185 schedule_delayed_work(&bp->reset_task, 0);
2186}
2187
2188#ifdef BCM_VLAN
2189/* called with rtnl_lock */
2190void bnx2x_vlan_rx_register(struct net_device *dev,
2191 struct vlan_group *vlgrp)
2192{
2193 struct bnx2x *bp = netdev_priv(dev);
2194
2195 bp->vlgrp = vlgrp;
2196
2197 /* Set flags according to the required capabilities */
2198 bp->flags &= ~(HW_VLAN_RX_FLAG | HW_VLAN_TX_FLAG);
2199
2200 if (dev->features & NETIF_F_HW_VLAN_TX)
2201 bp->flags |= HW_VLAN_TX_FLAG;
2202
2203 if (dev->features & NETIF_F_HW_VLAN_RX)
2204 bp->flags |= HW_VLAN_RX_FLAG;
2205
2206 if (netif_running(dev))
2207 bnx2x_set_client_config(bp);
2208}
2209
2210#endif
2211int bnx2x_suspend(struct pci_dev *pdev, pm_message_t state)
2212{
2213 struct net_device *dev = pci_get_drvdata(pdev);
2214 struct bnx2x *bp;
2215
2216 if (!dev) {
2217 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
2218 return -ENODEV;
2219 }
2220 bp = netdev_priv(dev);
2221
2222 rtnl_lock();
2223
2224 pci_save_state(pdev);
2225
2226 if (!netif_running(dev)) {
2227 rtnl_unlock();
2228 return 0;
2229 }
2230
2231 netif_device_detach(dev);
2232
2233 bnx2x_nic_unload(bp, UNLOAD_CLOSE);
2234
2235 bnx2x_set_power_state(bp, pci_choose_state(pdev, state));
2236
2237 rtnl_unlock();
2238
2239 return 0;
2240}
2241
2242int bnx2x_resume(struct pci_dev *pdev)
2243{
2244 struct net_device *dev = pci_get_drvdata(pdev);
2245 struct bnx2x *bp;
2246 int rc;
2247
2248 if (!dev) {
2249 dev_err(&pdev->dev, "BAD net device from bnx2x_init_one\n");
2250 return -ENODEV;
2251 }
2252 bp = netdev_priv(dev);
2253
2254 if (bp->recovery_state != BNX2X_RECOVERY_DONE) {
2255 printk(KERN_ERR "Handling parity error recovery. Try again later\n");
2256 return -EAGAIN;
2257 }
2258
2259 rtnl_lock();
2260
2261 pci_restore_state(pdev);
2262
2263 if (!netif_running(dev)) {
2264 rtnl_unlock();
2265 return 0;
2266 }
2267
2268 bnx2x_set_power_state(bp, PCI_D0);
2269 netif_device_attach(dev);
2270
2271 rc = bnx2x_nic_load(bp, LOAD_OPEN);
2272
2273 rtnl_unlock();
2274
2275 return rc;
2276}