diff options
author | Bruno Randolf <bruno@thinktube.com> | 2008-01-19 18:18:41 +0900 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2008-01-28 15:10:53 -0800 |
commit | 6d91e1d80822da1c3e790bfbe8df432360fd7f68 (patch) | |
tree | cabcf6c28d7e25a45d68419d65a2e748973a62f7 | |
parent | 036cd1ec038f7e3a36740beaf2aa4a0d2e8ed2c1 (diff) | |
download | op-kernel-dev-6d91e1d80822da1c3e790bfbe8df432360fd7f68.zip op-kernel-dev-6d91e1d80822da1c3e790bfbe8df432360fd7f68.tar.gz |
ath5k: configure backoff for IBSS beacon queue
in "11.1.2.2 Beacon generation in an IBSS" the IEEE802.11 standard says, each
STA should... "b) Calculate a random delay uniformly distributed in the range
between zero and twice aCWmin × aSlotTime,".
configure cwmin and cwmax of the beacon queue in IBSS mode according to this.
unfortunately beacon backoff does not work reliably yet, so i suspect we have a
problem somewhere else, since the same settings (and similar beacon timer
configuration) work for madwifi.
drivers/net/wireless/ath5k/base.c: Changes-licensed-under: 3-Clause-BSD
Signed-off-by: Bruno Randolf <bruno@thinktube.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath5k/base.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath5k/base.c b/drivers/net/wireless/ath5k/base.c index eb98284..b2a6ef5 100644 --- a/drivers/net/wireless/ath5k/base.c +++ b/drivers/net/wireless/ath5k/base.c @@ -1458,8 +1458,7 @@ ath5k_beaconq_config(struct ath5k_softc *sc) ret = ath5k_hw_get_tx_queueprops(ah, sc->bhalq, &qi); if (ret) return ret; - if (sc->opmode == IEEE80211_IF_TYPE_AP || - sc->opmode == IEEE80211_IF_TYPE_IBSS) { + if (sc->opmode == IEEE80211_IF_TYPE_AP) { /* * Always burst out beacon and CAB traffic * (aifs = cwmin = cwmax = 0) @@ -1467,8 +1466,19 @@ ath5k_beaconq_config(struct ath5k_softc *sc) qi.tqi_aifs = 0; qi.tqi_cw_min = 0; qi.tqi_cw_max = 0; + } else if (sc->opmode == IEEE80211_IF_TYPE_IBSS) { + /* + * Adhoc mode; backoff between 0 and (2 * cw_min). + */ + qi.tqi_aifs = 0; + qi.tqi_cw_min = 0; + qi.tqi_cw_max = 2 * ah->ah_cw_min; } + ATH5K_DBG(sc, ATH5K_DEBUG_BEACON, + "beacon queueprops tqi_aifs:%d tqi_cw_min:%d tqi_cw_max:%d\n", + qi.tqi_aifs, qi.tqi_cw_min, qi.tqi_cw_max); + ret = ath5k_hw_setup_tx_queueprops(ah, sc->bhalq, &qi); if (ret) { ATH5K_ERR(sc, "%s: unable to update parameters for beacon " |