diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath5k/base.c')
-rw-r--r-- | drivers/net/wireless/ath/ath5k/base.c | 20 |
1 files changed, 6 insertions, 14 deletions
diff --git a/drivers/net/wireless/ath/ath5k/base.c b/drivers/net/wireless/ath/ath5k/base.c index a339693fbe26..0e643b016b32 100644 --- a/drivers/net/wireless/ath/ath5k/base.c +++ b/drivers/net/wireless/ath/ath5k/base.c | |||
@@ -1867,7 +1867,8 @@ ath5k_beacon_send(struct ath5k_hw *ah) | |||
1867 | ah->bmisscount = 0; | 1867 | ah->bmisscount = 0; |
1868 | } | 1868 | } |
1869 | 1869 | ||
1870 | if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs > 1) || | 1870 | if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs + |
1871 | ah->num_mesh_vifs > 1) || | ||
1871 | ah->opmode == NL80211_IFTYPE_MESH_POINT) { | 1872 | ah->opmode == NL80211_IFTYPE_MESH_POINT) { |
1872 | u64 tsf = ath5k_hw_get_tsf64(ah); | 1873 | u64 tsf = ath5k_hw_get_tsf64(ah); |
1873 | u32 tsftu = TSF_TO_TU(tsf); | 1874 | u32 tsftu = TSF_TO_TU(tsf); |
@@ -1952,7 +1953,8 @@ ath5k_beacon_update_timers(struct ath5k_hw *ah, u64 bc_tsf) | |||
1952 | u64 hw_tsf; | 1953 | u64 hw_tsf; |
1953 | 1954 | ||
1954 | intval = ah->bintval & AR5K_BEACON_PERIOD; | 1955 | intval = ah->bintval & AR5K_BEACON_PERIOD; |
1955 | if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs > 1) { | 1956 | if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs |
1957 | + ah->num_mesh_vifs > 1) { | ||
1956 | intval /= ATH_BCBUF; /* staggered multi-bss beacons */ | 1958 | intval /= ATH_BCBUF; /* staggered multi-bss beacons */ |
1957 | if (intval < 15) | 1959 | if (intval < 15) |
1958 | ATH5K_WARN(ah, "intval %u is too low, min 15\n", | 1960 | ATH5K_WARN(ah, "intval %u is too low, min 15\n", |
@@ -2330,15 +2332,6 @@ ath5k_calibrate_work(struct work_struct *work) | |||
2330 | "got new rfgain, resetting\n"); | 2332 | "got new rfgain, resetting\n"); |
2331 | ieee80211_queue_work(ah->hw, &ah->reset_work); | 2333 | ieee80211_queue_work(ah->hw, &ah->reset_work); |
2332 | } | 2334 | } |
2333 | |||
2334 | /* TODO: On full calibration we should stop TX here, | ||
2335 | * so that it doesn't interfere (mostly due to gain_f | ||
2336 | * calibration that messes with tx packets -see phy.c). | ||
2337 | * | ||
2338 | * NOTE: Stopping the queues from above is not enough | ||
2339 | * to stop TX but saves us from disconecting (at least | ||
2340 | * we don't lose packets). */ | ||
2341 | ieee80211_stop_queues(ah->hw); | ||
2342 | } else | 2335 | } else |
2343 | ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT; | 2336 | ah->ah_cal_mask |= AR5K_CALIBRATION_SHORT; |
2344 | 2337 | ||
@@ -2353,10 +2346,9 @@ ath5k_calibrate_work(struct work_struct *work) | |||
2353 | ah->curchan->center_freq)); | 2346 | ah->curchan->center_freq)); |
2354 | 2347 | ||
2355 | /* Clear calibration flags */ | 2348 | /* Clear calibration flags */ |
2356 | if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) { | 2349 | if (ah->ah_cal_mask & AR5K_CALIBRATION_FULL) |
2357 | ieee80211_wake_queues(ah->hw); | ||
2358 | ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL; | 2350 | ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL; |
2359 | } else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT) | 2351 | else if (ah->ah_cal_mask & AR5K_CALIBRATION_SHORT) |
2360 | ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT; | 2352 | ah->ah_cal_mask &= ~AR5K_CALIBRATION_SHORT; |
2361 | } | 2353 | } |
2362 | 2354 | ||