12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- From: Sujith Manoharan <[email protected]>
- Date: Fri, 17 Oct 2014 07:40:09 +0530
- Subject: [PATCH] ath9k: Enable multi-channel properly
- In MCC mode, currently the decision to enable
- the multi-channel state machine is done
- based on the association status if one of
- the interfaces assigned to a context is in
- station mode.
- This allows the driver to switch to the other
- context before the current station is able to
- complete the 4-way handshake in case it is
- required and this causes problems.
- Instead, enable multi-channel mode when the
- station moves to the authorized state. This
- disallows an early switch to the other channel.
- Signed-off-by: Sujith Manoharan <[email protected]>
- ---
- --- a/drivers/net/wireless/ath/ath9k/ath9k.h
- +++ b/drivers/net/wireless/ath/ath9k/ath9k.h
- @@ -362,7 +362,7 @@ enum ath_chanctx_event {
- ATH_CHANCTX_EVENT_BEACON_SENT,
- ATH_CHANCTX_EVENT_TSF_TIMER,
- ATH_CHANCTX_EVENT_BEACON_RECEIVED,
- - ATH_CHANCTX_EVENT_ASSOC,
- + ATH_CHANCTX_EVENT_AUTHORIZED,
- ATH_CHANCTX_EVENT_SWITCH,
- ATH_CHANCTX_EVENT_ASSIGN,
- ATH_CHANCTX_EVENT_UNASSIGN,
- --- a/drivers/net/wireless/ath/ath9k/channel.c
- +++ b/drivers/net/wireless/ath/ath9k/channel.c
- @@ -171,7 +171,7 @@ static const char *chanctx_event_string(
- 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);
- @@ -510,7 +510,7 @@ void ath_chanctx_event(struct ath_softc
-
- 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;
- --- a/drivers/net/wireless/ath/ath9k/main.c
- +++ b/drivers/net/wireless/ath/ath9k/main.c
- @@ -1569,6 +1569,13 @@ static int ath9k_sta_state(struct ieee80
- "Remove station: %pM\n", sta->addr);
- }
-
- + if (ath9k_is_chanctx_enabled()) {
- + if (old_state == IEEE80211_STA_ASSOC &&
- + new_state == IEEE80211_STA_AUTHORIZED)
- + ath_chanctx_event(sc, vif,
- + ATH_CHANCTX_EVENT_AUTHORIZED);
- + }
- +
- return ret;
- }
-
- @@ -1761,12 +1768,6 @@ static void ath9k_bss_info_changed(struc
- avp->assoc = bss_conf->assoc;
-
- ath9k_calculate_summary_state(sc, avp->chanctx);
- -
- - if (ath9k_is_chanctx_enabled()) {
- - if (bss_conf->assoc)
- - ath_chanctx_event(sc, vif,
- - ATH_CHANCTX_EVENT_ASSOC);
- - }
- }
-
- if (changed & BSS_CHANGED_IBSS) {
|