Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+10 −0
Original line number Original line Diff line number Diff line
@@ -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)
				 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)
	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)


	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)