brcm47xx: b44: fix error handling for dummy phy creation
[openwrt.git] / target / linux / brcm47xx / patches-3.10 / 200-b44-add-support-for-Byte-Queue-Limits.patch
1 --- a/drivers/net/ethernet/broadcom/b44.c
2 +++ b/drivers/net/ethernet/broadcom/b44.c
3 @@ -596,6 +596,7 @@ static void b44_timer(unsigned long __op
4  static void b44_tx(struct b44 *bp)
5  {
6         u32 cur, cons;
7 +       unsigned bytes_compl = 0, pkts_compl = 0;
8  
9         cur  = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK;
10         cur /= sizeof(struct dma_desc);
11 @@ -612,9 +613,14 @@ static void b44_tx(struct b44 *bp)
12                                  skb->len,
13                                  DMA_TO_DEVICE);
14                 rp->skb = NULL;
15 +
16 +               bytes_compl += skb->len;
17 +               pkts_compl++;
18 +
19                 dev_kfree_skb_irq(skb);
20         }
21  
22 +       netdev_completed_queue(bp->dev, pkts_compl, bytes_compl);
23         bp->tx_cons = cons;
24         if (netif_queue_stopped(bp->dev) &&
25             TX_BUFFS_AVAIL(bp) > B44_TX_WAKEUP_THRESH)
26 @@ -1018,6 +1024,8 @@ static netdev_tx_t b44_start_xmit(struct
27         if (bp->flags & B44_FLAG_REORDER_BUG)
28                 br32(bp, B44_DMATX_PTR);
29  
30 +       netdev_sent_queue(dev, skb->len);
31 +
32         if (TX_BUFFS_AVAIL(bp) < 1)
33                 netif_stop_queue(dev);
34  
35 @@ -1416,6 +1424,8 @@ static void b44_init_hw(struct b44 *bp,
36  
37         val = br32(bp, B44_ENET_CTRL);
38         bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
39 +
40 +       netdev_reset_queue(bp->dev);
41  }
42  
43  static int b44_open(struct net_device *dev)