ath9k: Process beacons properly
[deliverable/linux.git] / drivers / net / wireless / ath / ath9k / channel.c
index 945c89826b14cc70f1dd5f36b4bcd2b9efc21b10..135f74cd61475382dc4043eeff39e7d2ba0b9887 100644 (file)
@@ -171,7 +171,7 @@ static const char *chanctx_event_string(enum ath_chanctx_event ev)
                case_rtn_string(ATH_CHANCTX_EVENT_BEACON_SENT);
                case_rtn_string(ATH_CHANCTX_EVENT_TSF_TIMER);
                case_rtn_string(ATH_CHANCTX_EVENT_BEACON_RECEIVED);
-               case_rtn_string(ATH_CHANCTX_EVENT_ASSOC);
+               case_rtn_string(ATH_CHANCTX_EVENT_AUTHORIZED);
                case_rtn_string(ATH_CHANCTX_EVENT_SWITCH);
                case_rtn_string(ATH_CHANCTX_EVENT_ASSIGN);
                case_rtn_string(ATH_CHANCTX_EVENT_UNASSIGN);
@@ -495,10 +495,15 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
                    sc->cur_chan == &sc->offchannel.chan)
                        break;
 
-               ath_chanctx_adjust_tbtt_delta(sc);
                sc->sched.beacon_pending = false;
                sc->sched.beacon_miss = 0;
 
+               if (sc->sched.state == ATH_CHANCTX_STATE_FORCE_ACTIVE ||
+                   !sc->cur_chan->tsf_val)
+                       break;
+
+               ath_chanctx_adjust_tbtt_delta(sc);
+
                /* TSF time might have been updated by the incoming beacon,
                 * need update the channel switch timer to reflect the change.
                 */
@@ -510,7 +515,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
 
                ath_chanctx_setup_timer(sc, tsf_time);
                break;
-       case ATH_CHANCTX_EVENT_ASSOC:
+       case ATH_CHANCTX_EVENT_AUTHORIZED:
                if (sc->sched.state != ATH_CHANCTX_STATE_FORCE_ACTIVE ||
                    avp->chanctx != sc->cur_chan)
                        break;
This page took 0.02991 seconds and 5 git commands to generate.