diff options
author | Felix Fietkau <nbd@openwrt.org> | 2012-07-15 13:53:35 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-07-17 15:11:35 -0400 |
commit | 7702e788e77c175f5ddc8f792468b8af036a8146 (patch) | |
tree | 9339b153866b127577bec17efb47f5ef3fcbb163 /drivers | |
parent | 531bd079053cfeaa7536a997950905603f2bae70 (diff) |
ath9k: make per-WMM-AC queue sizes configurable via debugfs
Prepare for using different queue size defaults for each AC.
Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/ath/ath9k/ath9k.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/debug.c | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/init.c | 1 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/xmit.c | 6 |
4 files changed, 14 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h index 54f0c9d0049..db17ec4f0a8 100644 --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h | |||
@@ -297,6 +297,7 @@ struct ath_tx { | |||
297 | struct ath_txq txq[ATH9K_NUM_TX_QUEUES]; | 297 | struct ath_txq txq[ATH9K_NUM_TX_QUEUES]; |
298 | struct ath_descdma txdma; | 298 | struct ath_descdma txdma; |
299 | struct ath_txq *txq_map[WME_NUM_AC]; | 299 | struct ath_txq *txq_map[WME_NUM_AC]; |
300 | u32 txq_max_pending[WME_NUM_AC]; | ||
300 | }; | 301 | }; |
301 | 302 | ||
302 | struct ath_rx_edma { | 303 | struct ath_rx_edma { |
diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c index 5c3192ffc19..b9ea067a7bb 100644 --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c | |||
@@ -1556,6 +1556,14 @@ int ath9k_init_debug(struct ath_hw *ah) | |||
1556 | &fops_interrupt); | 1556 | &fops_interrupt); |
1557 | debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, | 1557 | debugfs_create_file("xmit", S_IRUSR, sc->debug.debugfs_phy, sc, |
1558 | &fops_xmit); | 1558 | &fops_xmit); |
1559 | debugfs_create_u32("qlen_bk", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | ||
1560 | &sc->tx.txq_max_pending[WME_AC_BK]); | ||
1561 | debugfs_create_u32("qlen_be", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | ||
1562 | &sc->tx.txq_max_pending[WME_AC_BE]); | ||
1563 | debugfs_create_u32("qlen_vi", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | ||
1564 | &sc->tx.txq_max_pending[WME_AC_VI]); | ||
1565 | debugfs_create_u32("qlen_vo", S_IRUSR | S_IWUSR, sc->debug.debugfs_phy, | ||
1566 | &sc->tx.txq_max_pending[WME_AC_VO]); | ||
1559 | debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, | 1567 | debugfs_create_file("stations", S_IRUSR, sc->debug.debugfs_phy, sc, |
1560 | &fops_stations); | 1568 | &fops_stations); |
1561 | debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, | 1569 | debugfs_create_file("misc", S_IRUSR, sc->debug.debugfs_phy, sc, |
diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c index af95d180d7f..181977a414e 100644 --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c | |||
@@ -434,6 +434,7 @@ static int ath9k_init_queues(struct ath_softc *sc) | |||
434 | for (i = 0; i < WME_NUM_AC; i++) { | 434 | for (i = 0; i < WME_NUM_AC; i++) { |
435 | sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i); | 435 | sc->tx.txq_map[i] = ath_txq_setup(sc, ATH9K_TX_QUEUE_DATA, i); |
436 | sc->tx.txq_map[i]->mac80211_qnum = i; | 436 | sc->tx.txq_map[i]->mac80211_qnum = i; |
437 | sc->tx.txq_max_pending[i] = ATH_MAX_QDEPTH; | ||
437 | } | 438 | } |
438 | return 0; | 439 | return 0; |
439 | } | 440 | } |
diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c index cafb4a09729..571d77362b6 100644 --- a/drivers/net/wireless/ath/ath9k/xmit.c +++ b/drivers/net/wireless/ath/ath9k/xmit.c | |||
@@ -1988,7 +1988,8 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, | |||
1988 | 1988 | ||
1989 | ath_txq_lock(sc, txq); | 1989 | ath_txq_lock(sc, txq); |
1990 | if (txq == sc->tx.txq_map[q] && | 1990 | if (txq == sc->tx.txq_map[q] && |
1991 | ++txq->pending_frames > ATH_MAX_QDEPTH && !txq->stopped) { | 1991 | ++txq->pending_frames > sc->tx.txq_max_pending[q] && |
1992 | !txq->stopped) { | ||
1992 | ieee80211_stop_queue(sc->hw, q); | 1993 | ieee80211_stop_queue(sc->hw, q); |
1993 | txq->stopped = true; | 1994 | txq->stopped = true; |
1994 | } | 1995 | } |
@@ -2047,7 +2048,8 @@ static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb, | |||
2047 | if (WARN_ON(--txq->pending_frames < 0)) | 2048 | if (WARN_ON(--txq->pending_frames < 0)) |
2048 | txq->pending_frames = 0; | 2049 | txq->pending_frames = 0; |
2049 | 2050 | ||
2050 | if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) { | 2051 | if (txq->stopped && |
2052 | txq->pending_frames < sc->tx.txq_max_pending[q]) { | ||
2051 | ieee80211_wake_queue(sc->hw, q); | 2053 | ieee80211_wake_queue(sc->hw, q); |
2052 | txq->stopped = false; | 2054 | txq->stopped = false; |
2053 | } | 2055 | } |