mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-26 08:51:13 +00:00
4f93bde681
This adds support for Byte Queue Limits in bgmac and b44, now it is possible to use more advanced network queue control algorithms. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> SVN-Revision: 38038
47 lines
1.2 KiB
Diff
47 lines
1.2 KiB
Diff
From: Hauke Mehrtens <hauke@hauke-m.de>
|
|
b44: add support for Byte Queue Limits
|
|
|
|
--- a/drivers/net/ethernet/broadcom/b44.c
|
|
+++ b/drivers/net/ethernet/broadcom/b44.c
|
|
@@ -622,6 +622,7 @@ static void b44_timer(unsigned long __op
|
|
static void b44_tx(struct b44 *bp)
|
|
{
|
|
u32 cur, cons;
|
|
+ unsigned bytes_compl = 0, pkts_compl = 0;
|
|
|
|
cur = br32(bp, B44_DMATX_STAT) & DMATX_STAT_CDMASK;
|
|
cur /= sizeof(struct dma_desc);
|
|
@@ -638,9 +639,14 @@ static void b44_tx(struct b44 *bp)
|
|
skb->len,
|
|
DMA_TO_DEVICE);
|
|
rp->skb = NULL;
|
|
+
|
|
+ bytes_compl += skb->len;
|
|
+ pkts_compl++;
|
|
+
|
|
dev_kfree_skb_irq(skb);
|
|
}
|
|
|
|
+ netdev_completed_queue(bp->dev, pkts_compl, bytes_compl);
|
|
bp->tx_cons = cons;
|
|
if (netif_queue_stopped(bp->dev) &&
|
|
TX_BUFFS_AVAIL(bp) > B44_TX_WAKEUP_THRESH)
|
|
@@ -1044,6 +1050,8 @@ static netdev_tx_t b44_start_xmit(struct
|
|
if (bp->flags & B44_FLAG_REORDER_BUG)
|
|
br32(bp, B44_DMATX_PTR);
|
|
|
|
+ netdev_sent_queue(dev, skb->len);
|
|
+
|
|
if (TX_BUFFS_AVAIL(bp) < 1)
|
|
netif_stop_queue(dev);
|
|
|
|
@@ -1442,6 +1450,8 @@ static void b44_init_hw(struct b44 *bp,
|
|
|
|
val = br32(bp, B44_ENET_CTRL);
|
|
bw32(bp, B44_ENET_CTRL, (val | ENET_CTRL_ENABLE));
|
|
+
|
|
+ netdev_reset_queue(bp->dev);
|
|
}
|
|
|
|
static int b44_open(struct net_device *dev)
|