Commit 5055544e authored by Hauke Mehrtens's avatar Hauke Mehrtens Committed by David S. Miller

b44: add support for Byte Queue Limits

This makes it possible to use some more advanced queuing
techniques with this driver.
Signed-off-by: default avatarHauke Mehrtens <hauke@hauke-m.de>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0bbf87d8
...@@ -596,6 +596,7 @@ static void b44_timer(unsigned long __opaque) ...@@ -596,6 +596,7 @@ static void b44_timer(unsigned long __opaque)
static void b44_tx(struct b44 *bp) static void b44_tx(struct b44 *bp)
{ {
u32 cur, cons; u32 cur, cons;
unsigned bytes_compl = 0, pkts_compl = 0;
cur = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK; cur = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK;
cur /= sizeof(struct dma_desc); cur /= sizeof(struct dma_desc);
...@@ -612,9 +613,14 @@ static void b44_tx(struct b44 *bp) ...@@ -612,9 +613,14 @@ static void b44_tx(struct b44 *bp)
skb->len, skb->len,
DMA_TO_DEVICE); DMA_TO_DEVICE);
rp->skb = NULL; rp->skb = NULL;
bytes_compl += skb->len;
pkts_compl++;
dev_kfree_skb_irq(skb); dev_kfree_skb_irq(skb);
} }
netdev_completed_queue(bp->dev, pkts_compl, bytes_compl);
bp->tx_cons = cons; bp->tx_cons = cons;
if (netif_queue_stopped(bp->dev) && if (netif_queue_stopped(bp->dev) &&
TX_BUFFS_AVAIL(bp) > B44_TX_WAKEUP_THRESH) TX_BUFFS_AVAIL(bp) > B44_TX_WAKEUP_THRESH)
...@@ -1018,6 +1024,8 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -1018,6 +1024,8 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
if (bp->flags & B44_FLAG_REORDER_BUG) if (bp->flags & B44_FLAG_REORDER_BUG)
br32(bp, B44_DMATX_PTR); br32(bp, B44_DMATX_PTR);
netdev_sent_queue(dev, skb->len);
if (TX_BUFFS_AVAIL(bp) < 1) if (TX_BUFFS_AVAIL(bp) < 1)
netif_stop_queue(dev); netif_stop_queue(dev);
...@@ -1416,6 +1424,8 @@ static void b44_init_hw(struct b44 *bp, int reset_kind) ...@@ -1416,6 +1424,8 @@ static void b44_init_hw(struct b44 *bp, int reset_kind)
val = br32(bp, B44_ENET_CTRL); val = br32(bp, B44_ENET_CTRL);
bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE)); bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
netdev_reset_queue(bp->dev);
} }
static int b44_open(struct net_device *dev) static int b44_open(struct net_device *dev)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment