aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath9k/main.c
diff options
context:
space:
mode:
authorSujith <Sujith.Manoharan@atheros.com>2009-03-02 23:46:56 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-03-05 14:39:42 -0500
commitb238e90e99fe51aed14d20eae8a6a1c04ce4ca30 (patch)
treeb9cd8add0647c0ce98959710d682191300a71a9b /drivers/net/wireless/ath9k/main.c
parent5379c8a26686e12058e23322615df68f9123bccd (diff)
ath9k: Handle TSF properly for AP mode
The TSF has to be reset only once, upon bringing the interface up in AP mode. For any beacon reconfigure calls after that, resetting the TSF results in incorrect beacon generation. The only exception is a change in the beacon interval, which is indicated to the driver by mac80211 through IEEE80211_CONF_CHANGE_BEACON_INTERVAL, handle this properly. Signed-off-by: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/ath9k/main.c')
-rw-r--r--drivers/net/wireless/ath9k/main.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
index 9e8f954877c9..a25dcf949f36 100644
--- a/drivers/net/wireless/ath9k/main.c
+++ b/drivers/net/wireless/ath9k/main.c
@@ -2168,8 +2168,10 @@ static int ath9k_add_interface(struct ieee80211_hw *hw,
2168 avp->av_opmode = ic_opmode; 2168 avp->av_opmode = ic_opmode;
2169 avp->av_bslot = -1; 2169 avp->av_bslot = -1;
2170 2170
2171 if (ic_opmode == NL80211_IFTYPE_AP) 2171 if (ic_opmode == NL80211_IFTYPE_AP) {
2172 ath9k_hw_set_tsfadjust(sc->sc_ah, 1); 2172 ath9k_hw_set_tsfadjust(sc->sc_ah, 1);
2173 sc->sc_flags |= SC_OP_TSF_RESET;
2174 }
2173 2175
2174 sc->vifs[0] = conf->vif; 2176 sc->vifs[0] = conf->vif;
2175 sc->nvifs++; 2177 sc->nvifs++;
@@ -2291,6 +2293,16 @@ static int ath9k_config(struct ieee80211_hw *hw, u32 changed)
2291 if (changed & IEEE80211_CONF_CHANGE_POWER) 2293 if (changed & IEEE80211_CONF_CHANGE_POWER)
2292 sc->config.txpowlimit = 2 * conf->power_level; 2294 sc->config.txpowlimit = 2 * conf->power_level;
2293 2295
2296 /*
2297 * The HW TSF has to be reset when the beacon interval changes.
2298 * We set the flag here, and ath_beacon_config_ap() would take this
2299 * into account when it gets called through the subsequent
2300 * config_interface() call - with IFCC_BEACON in the changed field.
2301 */
2302
2303 if (changed & IEEE80211_CONF_CHANGE_BEACON_INTERVAL)
2304 sc->sc_flags |= SC_OP_TSF_RESET;
2305
2294 mutex_unlock(&sc->mutex); 2306 mutex_unlock(&sc->mutex);
2295 2307
2296 return 0; 2308 return 0;