aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/mvm/mac80211.c
diff options
context:
space:
mode:
authorArik Nemtsov <arik@wizery.com>2014-10-23 11:03:10 -0400
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>2014-11-24 01:30:24 -0500
commit1d3c3f63f71ff19076a9bef89aa89bbbcaf44a15 (patch)
tree6de6840242b786ef8bdc0b262f13c10d46526f09 /drivers/net/wireless/iwlwifi/mvm/mac80211.c
parent9c126cd6e0ce8f02b7271b59c096598c55aa31d0 (diff)
iwlwifi: mvm: implement mac80211 TDLS channel-switch APIs
Maintain a TDLS channel-switch state and update it according to notifications from FW and timeouts. Explicitly check all state transitions are valid. When switching is initiated by mac80211, use a delayed work to periodically reschedule it from iwlwifi. Give the FW mac80211 generated TDLS channel-switch request/response templates. It will change appropriate values (switch timings) and Tx them at appropriate times. Enable the channel switch wiphy capability bit when the FW supports it. Signed-off-by: Arik Nemtsov <arikx.nemtsov@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm/mac80211.c')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index 5aedf9dbf23c..3841fcfbee2c 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -495,6 +495,12 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
495 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; 495 hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS;
496 } 496 }
497 497
498 if (mvm->fw->ucode_capa.capa[0] &
499 IWL_UCODE_TLV_CAPA_TDLS_CHANNEL_SWITCH) {
500 IWL_DEBUG_TDLS(mvm, "TDLS channel switch supported\n");
501 hw->wiphy->features |= NL80211_FEATURE_TDLS_CHANNEL_SWITCH;
502 }
503
498 ret = ieee80211_register_hw(mvm->hw); 504 ret = ieee80211_register_hw(mvm->hw);
499 if (ret) 505 if (ret)
500 iwl_mvm_leds_exit(mvm); 506 iwl_mvm_leds_exit(mvm);
@@ -3211,6 +3217,10 @@ const struct ieee80211_ops iwl_mvm_hw_ops = {
3211 3217
3212 .channel_switch_beacon = iwl_mvm_channel_switch_beacon, 3218 .channel_switch_beacon = iwl_mvm_channel_switch_beacon,
3213 3219
3220 .tdls_channel_switch = iwl_mvm_tdls_channel_switch,
3221 .tdls_cancel_channel_switch = iwl_mvm_tdls_cancel_channel_switch,
3222 .tdls_recv_channel_switch = iwl_mvm_tdls_recv_channel_switch,
3223
3214 CFG80211_TESTMODE_CMD(iwl_mvm_mac_testmode_cmd) 3224 CFG80211_TESTMODE_CMD(iwl_mvm_mac_testmode_cmd)
3215 3225
3216#ifdef CONFIG_PM_SLEEP 3226#ifdef CONFIG_PM_SLEEP