* [PATCH] ath9k: Ensure a fair beacon distribution in IBSS mode
@ 2012-05-29 10:29 Vivek Natarajan
0 siblings, 0 replies; 3+ messages in thread
From: Vivek Natarajan @ 2012-05-29 10:29 UTC (permalink / raw)
To: linville; +Cc: linux-wireless
Configure CWmin based on slot time for IBSS mode. This helps
in increasing the beacon distribution of ath9k to accepted
levels in 11a mode.
Signed-off-by: Vivek Natarajan <nataraja@qca.qualcomm.com>
---
drivers/net/wireless/ath/ath9k/beacon.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index 11bc55e..70b8025 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -48,7 +48,10 @@ int ath_beaconq_config(struct ath_softc *sc)
txq = sc->tx.txq_map[WME_AC_BE];
ath9k_hw_get_txq_props(ah, txq->axq_qnum, &qi_be);
qi.tqi_aifs = qi_be.tqi_aifs;
- qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
+ if (ah->slottime == ATH9K_SLOT_TIME_20)
+ qi.tqi_cwmin = 2*qi_be.tqi_cwmin;
+ else
+ qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
qi.tqi_cwmax = qi_be.tqi_cwmax;
}
--
1.7.10
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH] ath9k: Ensure a fair beacon distribution in IBSS mode.
@ 2009-11-24 11:53 Vivek Natarajan
2009-11-25 4:42 ` Sujith
0 siblings, 1 reply; 3+ messages in thread
From: Vivek Natarajan @ 2009-11-24 11:53 UTC (permalink / raw)
To: linville; +Cc: linux-wireless
Update the beacon queue parameters with best effort queue parameters for
IBSS mode. This reduces the number of beacons generated by ath9k and
ensures a fair beacon distribution when there are multiple IBSS stations.
Also CWmin is quadrupled to achieve the expected percentage of
distribution.
Signed-off-by: Vivek Natarajan <vnatarajan@atheros.com>
---
drivers/net/wireless/ath/ath9k/ath9k.h | 1 +
drivers/net/wireless/ath/ath9k/beacon.c | 14 +++++++++-----
drivers/net/wireless/ath/ath9k/main.c | 4 ++++
3 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h
index bc81401..c093928 100644
--- a/drivers/net/wireless/ath/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath/ath9k/ath9k.h
@@ -330,6 +330,7 @@ void ath_beacon_tasklet(unsigned long data);
void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif);
int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif);
void ath_beacon_return(struct ath_softc *sc, struct ath_vif *avp);
+int ath_beaconq_config(struct ath_softc *sc);
/*******/
/* ANI */
diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
index b10c884..0a9f9a1 100644
--- a/drivers/net/wireless/ath/ath9k/beacon.c
+++ b/drivers/net/wireless/ath/ath9k/beacon.c
@@ -23,11 +23,12 @@
* the operating mode of the station (AP or AdHoc). Parameters are AIFS
* settings and channel width min/max
*/
-static int ath_beaconq_config(struct ath_softc *sc)
+int ath_beaconq_config(struct ath_softc *sc)
{
struct ath_hw *ah = sc->sc_ah;
struct ath_common *common = ath9k_hw_common(ah);
- struct ath9k_tx_queue_info qi;
+ struct ath9k_tx_queue_info qi, qi_be;
+ int qnum;
ath9k_hw_get_txq_props(ah, sc->beacon.beaconq, &qi);
if (sc->sc_ah->opmode == NL80211_IFTYPE_AP) {
@@ -37,9 +38,12 @@ static int ath_beaconq_config(struct ath_softc *sc)
qi.tqi_cwmax = 0;
} else {
/* Adhoc mode; important thing is to use 2x cwmin. */
- qi.tqi_aifs = sc->beacon.beacon_qi.tqi_aifs;
- qi.tqi_cwmin = 2*sc->beacon.beacon_qi.tqi_cwmin;
- qi.tqi_cwmax = sc->beacon.beacon_qi.tqi_cwmax;
+ qnum = ath_tx_get_qnum(sc, ATH9K_TX_QUEUE_DATA,
+ ATH9K_WME_AC_BE);
+ ath9k_hw_get_txq_props(ah, qnum, &qi_be);
+ qi.tqi_aifs = qi_be.tqi_aifs;
+ qi.tqi_cwmin = 4*qi_be.tqi_cwmin;
+ qi.tqi_cwmax = qi_be.tqi_cwmax;
}
if (!ath9k_hw_set_txq_props(ah, sc->beacon.beaconq, &qi)) {
diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c
index 68f9788..e95c645 100644
--- a/drivers/net/wireless/ath/ath9k/main.c
+++ b/drivers/net/wireless/ath/ath9k/main.c
@@ -2914,6 +2914,10 @@ static int ath9k_conf_tx(struct ieee80211_hw *hw, u16 queue,
if (ret)
ath_print(common, ATH_DBG_FATAL, "TXQ Update failed\n");
+ if (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC)
+ if (qnum == sc->tx.hwq_map[ATH9K_WME_AC_BE])
+ ath_beaconq_config(sc);
+
mutex_unlock(&sc->mutex);
return ret;
--
1.6.0.4
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH] ath9k: Ensure a fair beacon distribution in IBSS mode.
2009-11-24 11:53 Vivek Natarajan
@ 2009-11-25 4:42 ` Sujith
0 siblings, 0 replies; 3+ messages in thread
From: Sujith @ 2009-11-25 4:42 UTC (permalink / raw)
To: Vivek Natarajan; +Cc: linville@tuxdriver.com, linux-wireless@vger.kernel.org
Vivek Natarajan wrote:
> @@ -2914,6 +2914,10 @@ static int ath9k_conf_tx(struct ieee80211_hw *hw, u16 queue,
> if (ret)
> ath_print(common, ATH_DBG_FATAL, "TXQ Update failed\n");
>
> + if (sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC)
> + if (qnum == sc->tx.hwq_map[ATH9K_WME_AC_BE])
> + ath_beaconq_config(sc);
> +
If queue parameter updation has failed earlier, this code chunk would be
redundant. Handling the special case for IBSS should probably be done only if
the earlier ath_txq_update() is successful.
Sujith
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-05-29 10:30 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-05-29 10:29 [PATCH] ath9k: Ensure a fair beacon distribution in IBSS mode Vivek Natarajan
-- strict thread matches above, loose matches on Subject: below --
2009-11-24 11:53 Vivek Natarajan
2009-11-25 4:42 ` Sujith
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox