aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/ath9k/ath9k.h12
-rw-r--r--drivers/net/wireless/ath9k/main.c27
2 files changed, 17 insertions, 22 deletions
diff --git a/drivers/net/wireless/ath9k/ath9k.h b/drivers/net/wireless/ath9k/ath9k.h
index 0b0f82c83ffc..6481ea4bbc4e 100644
--- a/drivers/net/wireless/ath9k/ath9k.h
+++ b/drivers/net/wireless/ath9k/ath9k.h
@@ -464,13 +464,11 @@ void ath_beacon_sync(struct ath_softc *sc, int if_id);
464/* ANI */ 464/* ANI */
465/*******/ 465/*******/
466 466
467/* ANI values for STA only. 467#define ATH_STA_SHORT_CALINTERVAL 1000 /* 1 second */
468 FIXME: Add appropriate values for AP later */ 468#define ATH_AP_SHORT_CALINTERVAL 100 /* 100 ms */
469 469#define ATH_ANI_POLLINTERVAL 100 /* 100 ms */
470#define ATH_ANI_POLLINTERVAL 100 /* 100 milliseconds between ANI poll */ 470#define ATH_LONG_CALINTERVAL 30000 /* 30 seconds */
471#define ATH_SHORT_CALINTERVAL 1000 /* 1 second between calibrations */ 471#define ATH_RESTART_CALINTERVAL 1200000 /* 20 minutes */
472#define ATH_LONG_CALINTERVAL 30000 /* 30 seconds between calibrations */
473#define ATH_RESTART_CALINTERVAL 1200000 /* 20 minutes between calibrations */
474 472
475struct ath_ani { 473struct ath_ani {
476 bool caldone; 474 bool caldone;
diff --git a/drivers/net/wireless/ath9k/main.c b/drivers/net/wireless/ath9k/main.c
index 7264c4c36a5f..b47cbe9e7a5a 100644
--- a/drivers/net/wireless/ath9k/main.c
+++ b/drivers/net/wireless/ath9k/main.c
@@ -308,23 +308,23 @@ static int ath_set_channel(struct ath_softc *sc, struct ath9k_channel *hchan)
308 */ 308 */
309static void ath_ani_calibrate(unsigned long data) 309static void ath_ani_calibrate(unsigned long data)
310{ 310{
311 struct ath_softc *sc; 311 struct ath_softc *sc = (struct ath_softc *)data;
312 struct ath_hw *ah; 312 struct ath_hw *ah = sc->sc_ah;
313 bool longcal = false; 313 bool longcal = false;
314 bool shortcal = false; 314 bool shortcal = false;
315 bool aniflag = false; 315 bool aniflag = false;
316 unsigned int timestamp = jiffies_to_msecs(jiffies); 316 unsigned int timestamp = jiffies_to_msecs(jiffies);
317 u32 cal_interval; 317 u32 cal_interval, short_cal_interval;
318 318
319 sc = (struct ath_softc *)data; 319 short_cal_interval = (ah->opmode == NL80211_IFTYPE_AP) ?
320 ah = sc->sc_ah; 320 ATH_AP_SHORT_CALINTERVAL : ATH_STA_SHORT_CALINTERVAL;
321 321
322 /* 322 /*
323 * don't calibrate when we're scanning. 323 * don't calibrate when we're scanning.
324 * we are most likely not on our home channel. 324 * we are most likely not on our home channel.
325 */ 325 */
326 if (sc->rx.rxfilter & FIF_BCN_PRBRESP_PROMISC) 326 if (sc->rx.rxfilter & FIF_BCN_PRBRESP_PROMISC)
327 return; 327 goto set_timer;
328 328
329 /* Long calibration runs independently of short calibration. */ 329 /* Long calibration runs independently of short calibration. */
330 if ((timestamp - sc->ani.longcal_timer) >= ATH_LONG_CALINTERVAL) { 330 if ((timestamp - sc->ani.longcal_timer) >= ATH_LONG_CALINTERVAL) {
@@ -335,8 +335,7 @@ static void ath_ani_calibrate(unsigned long data)
335 335
336 /* Short calibration applies only while caldone is false */ 336 /* Short calibration applies only while caldone is false */
337 if (!sc->ani.caldone) { 337 if (!sc->ani.caldone) {
338 if ((timestamp - sc->ani.shortcal_timer) >= 338 if ((timestamp - sc->ani.shortcal_timer) >= short_cal_interval) {
339 ATH_SHORT_CALINTERVAL) {
340 shortcal = true; 339 shortcal = true;
341 DPRINTF(sc, ATH_DBG_ANI, "shortcal @%lu\n", jiffies); 340 DPRINTF(sc, ATH_DBG_ANI, "shortcal @%lu\n", jiffies);
342 sc->ani.shortcal_timer = timestamp; 341 sc->ani.shortcal_timer = timestamp;
@@ -352,8 +351,7 @@ static void ath_ani_calibrate(unsigned long data)
352 } 351 }
353 352
354 /* Verify whether we must check ANI */ 353 /* Verify whether we must check ANI */
355 if ((timestamp - sc->ani.checkani_timer) >= 354 if ((timestamp - sc->ani.checkani_timer) >= ATH_ANI_POLLINTERVAL) {
356 ATH_ANI_POLLINTERVAL) {
357 aniflag = true; 355 aniflag = true;
358 sc->ani.checkani_timer = timestamp; 356 sc->ani.checkani_timer = timestamp;
359 } 357 }
@@ -362,8 +360,7 @@ static void ath_ani_calibrate(unsigned long data)
362 if (longcal || shortcal || aniflag) { 360 if (longcal || shortcal || aniflag) {
363 /* Call ANI routine if necessary */ 361 /* Call ANI routine if necessary */
364 if (aniflag) 362 if (aniflag)
365 ath9k_hw_ani_monitor(ah, &sc->nodestats, 363 ath9k_hw_ani_monitor(ah, &sc->nodestats, ah->curchan);
366 ah->curchan);
367 364
368 /* Perform calibration if necessary */ 365 /* Perform calibration if necessary */
369 if (longcal || shortcal) { 366 if (longcal || shortcal) {
@@ -392,6 +389,7 @@ static void ath_ani_calibrate(unsigned long data)
392 } 389 }
393 } 390 }
394 391
392set_timer:
395 /* 393 /*
396 * Set timer interval based on previous results. 394 * Set timer interval based on previous results.
397 * The interval must be the shortest necessary to satisfy ANI, 395 * The interval must be the shortest necessary to satisfy ANI,
@@ -401,7 +399,7 @@ static void ath_ani_calibrate(unsigned long data)
401 if (sc->sc_ah->config.enable_ani) 399 if (sc->sc_ah->config.enable_ani)
402 cal_interval = min(cal_interval, (u32)ATH_ANI_POLLINTERVAL); 400 cal_interval = min(cal_interval, (u32)ATH_ANI_POLLINTERVAL);
403 if (!sc->ani.caldone) 401 if (!sc->ani.caldone)
404 cal_interval = min(cal_interval, (u32)ATH_SHORT_CALINTERVAL); 402 cal_interval = min(cal_interval, (u32)short_cal_interval);
405 403
406 mod_timer(&sc->ani.timer, jiffies + msecs_to_jiffies(cal_interval)); 404 mod_timer(&sc->ani.timer, jiffies + msecs_to_jiffies(cal_interval));
407} 405}
@@ -924,8 +922,7 @@ static void ath9k_bss_assoc_info(struct ath_softc *sc,
924 922
925 /* Start ANI */ 923 /* Start ANI */
926 mod_timer(&sc->ani.timer, 924 mod_timer(&sc->ani.timer,
927 jiffies + msecs_to_jiffies(ATH_ANI_POLLINTERVAL)); 925 jiffies + msecs_to_jiffies(ATH_ANI_POLLINTERVAL));
928
929 } else { 926 } else {
930 DPRINTF(sc, ATH_DBG_CONFIG, "Bss Info DISSOC\n"); 927 DPRINTF(sc, ATH_DBG_CONFIG, "Bss Info DISSOC\n");
931 sc->curaid = 0; 928 sc->curaid = 0;