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 <c_manoha@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Sujith Manoharan
2014-10-17 07:40:09 +05:30
committed by John W. Linville
parent df3c6eb34d
commit b8f9279be0
3 changed files with 10 additions and 9 deletions

View File

@@ -1569,6 +1569,13 @@ static int ath9k_sta_state(struct ieee80211_hw *hw,
"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(struct ieee80211_hw *hw,
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) {