mirror of https://github.com/hak5/openwrt-owl.git
51 lines
1.5 KiB
Diff
51 lines
1.5 KiB
Diff
|
From: Hauke Mehrtens <hauke@hauke-m.de>
|
||
|
bgmac: add support for Byte Queue Limits
|
||
|
|
||
|
--- a/drivers/net/ethernet/broadcom/bgmac.c
|
||
|
+++ b/drivers/net/ethernet/broadcom/bgmac.c
|
||
|
@@ -183,6 +183,7 @@ static void bgmac_dma_tx_free(struct bgm
|
||
|
struct device *dma_dev = bgmac->core->dma_dev;
|
||
|
int empty_slot;
|
||
|
bool freed = false;
|
||
|
+ unsigned bytes_compl = 0, pkts_compl = 0;
|
||
|
|
||
|
/* The last slot that hardware didn't consume yet */
|
||
|
empty_slot = bgmac_read(bgmac, ring->mmio_base + BGMAC_DMA_TX_STATUS);
|
||
|
@@ -200,6 +201,9 @@ static void bgmac_dma_tx_free(struct bgm
|
||
|
slot->skb->len, DMA_TO_DEVICE);
|
||
|
slot->dma_addr = 0;
|
||
|
|
||
|
+ bytes_compl += slot->skb->len;
|
||
|
+ pkts_compl++;
|
||
|
+
|
||
|
/* Free memory! :) */
|
||
|
dev_kfree_skb(slot->skb);
|
||
|
slot->skb = NULL;
|
||
|
@@ -213,6 +217,8 @@ static void bgmac_dma_tx_free(struct bgm
|
||
|
freed = true;
|
||
|
}
|
||
|
|
||
|
+ netdev_completed_queue(bgmac->net_dev, pkts_compl, bytes_compl);
|
||
|
+
|
||
|
if (freed && netif_queue_stopped(bgmac->net_dev))
|
||
|
netif_wake_queue(bgmac->net_dev);
|
||
|
}
|
||
|
@@ -1013,6 +1019,8 @@ static void bgmac_chip_reset(struct bgma
|
||
|
bgmac_set(bgmac, BGMAC_PHY_CNTL, BGMAC_PC_MTE);
|
||
|
bgmac_miiconfig(bgmac);
|
||
|
bgmac_phy_init(bgmac);
|
||
|
+
|
||
|
+ netdev_reset_queue(bgmac->net_dev);
|
||
|
|
||
|
bgmac->int_status = 0;
|
||
|
}
|
||
|
@@ -1227,6 +1235,8 @@ static netdev_tx_t bgmac_start_xmit(stru
|
||
|
struct bgmac *bgmac = netdev_priv(net_dev);
|
||
|
struct bgmac_dma_ring *ring;
|
||
|
|
||
|
+ netdev_sent_queue(net_dev, skb->len);
|
||
|
+
|
||
|
/* No QOS support yet */
|
||
|
ring = &bgmac->tx_ring[0];
|
||
|
return bgmac_dma_tx_add(bgmac, ring, skb);
|