diff options
author | Arik Nemtsov <arik@wizery.com> | 2014-10-23 11:03:10 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2014-11-24 01:30:24 -0500 |
commit | 1d3c3f63f71ff19076a9bef89aa89bbbcaf44a15 (patch) | |
tree | 6de6840242b786ef8bdc0b262f13c10d46526f09 /drivers/net/wireless/iwlwifi/mvm/mac80211.c | |
parent | 9c126cd6e0ce8f02b7271b59c096598c55aa31d0 (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.c | 10 |
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 |