Skip to content

Commit

Permalink
ath9k: Adjust tbtt delta properly
Browse files Browse the repository at this point in the history
In a GO/STA setup, when we switch to the STA context,
the channel context timer is scheduled with a period of
half the beacon interval. If a beacon is received in
this duration, the timer is adjusted to accommodate
TSF sync done by the HW.

But, if the actual channel switch is delayed for some
reason, we end up rearming the timer every time a new
beacon is received. Avoid this by doing the adjustment
only once.

Signed-off-by: Sujith Manoharan <[email protected]>
Signed-off-by: John W. Linville <[email protected]>
  • Loading branch information
Sujith Manoharan authored and linvjw committed Nov 17, 2014
1 parent 2c3634a commit d9092c9
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 1 deletion.
1 change: 1 addition & 0 deletions drivers/net/wireless/ath/ath9k/ath9k.h
Original file line number Diff line number Diff line change
Expand Up @@ -381,6 +381,7 @@ enum ath_chanctx_state {

struct ath_chanctx_sched {
bool beacon_pending;
bool beacon_adjust;
bool offchannel_pending;
bool wait_switch;
bool force_noa_update;
Expand Down
4 changes: 3 additions & 1 deletion drivers/net/wireless/ath/ath9k/channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -659,6 +659,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
sc->sched.beacon_miss = 0;

if (sc->sched.state == ATH_CHANCTX_STATE_FORCE_ACTIVE ||
!sc->sched.beacon_adjust ||
!sc->cur_chan->tsf_val)
break;

Expand All @@ -672,7 +673,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,
ath9k_hw_get_tsf_offset(&sc->cur_chan->tsf_ts, NULL);
tsf_time += ath9k_hw_gettsf32(ah);


sc->sched.beacon_adjust = false;
ath_chanctx_setup_timer(sc, tsf_time);
break;
case ATH_CHANCTX_EVENT_AUTHORIZED:
Expand Down Expand Up @@ -717,6 +718,7 @@ void ath_chanctx_event(struct ath_softc *sc, struct ieee80211_vif *vif,

ath_chanctx_setup_timer(sc, tsf_time);
sc->sched.beacon_pending = true;
sc->sched.beacon_adjust = true;
break;
case ATH_CHANCTX_EVENT_ENABLE_MULTICHANNEL:
if (sc->cur_chan == &sc->offchannel.chan ||
Expand Down

0 comments on commit d9092c9

Please sign in to comment.