iwlmvm: tdls: Check TDLS channel switch support
authorAviya Erenfeld <aviya.erenfeld@intel.com>
Mon, 26 Mar 2018 11:35:32 +0000 (14:35 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 30 May 2018 06:31:08 +0000 (09:31 +0300)
Some versions of the FW don't support channel switch in TDLS.
Add a condition that checks it.

Fixes: 307e47235a10 ("iwlwifi: mvm: configure TDLS peers to FW")
Signed-off-by: Aviya Erenfeld <aviya.erenfeld@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/tdls.c

index 3d97436bbdf550cd1e015cf2f6c1b5dbc58331b9..67f360c0d17e1d6f359b2f67dccd1b260a63eba6 100644 (file)
@@ -7,6 +7,7 @@
  *
  * Copyright(c) 2014 Intel Mobile Communications GmbH
  * Copyright(c) 2017 Intel Deutschland GmbH
+ * Copyright(C) 2018 Intel Corporation
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of version 2 of the GNU General Public License as
@@ -18,9 +19,7 @@
  * General Public License for more details.
  *
  * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
- * USA
+ * along with this program.
  *
  * The full GNU General Public License is included in this distribution
  * in the file called COPYING.
@@ -33,6 +32,7 @@
  *
  * Copyright(c) 2014 Intel Mobile Communications GmbH
  * Copyright(c) 2017 Intel Deutschland GmbH
+ * Copyright(C) 2018 Intel Corporation
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -188,8 +188,14 @@ void iwl_mvm_recalc_tdls_state(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
        if (tdls_sta_cnt == 1 && sta_added)
                iwl_mvm_power_update_mac(mvm);
 
-       /* configure the FW with TDLS peer info */
-       iwl_mvm_tdls_config(mvm, vif);
+       /* Configure the FW with TDLS peer info only if TDLS channel switch
+        * capability is set.
+        * TDLS config data is used currently only in TDLS channel switch code.
+        * Supposed to serve also TDLS buffer station which is not implemneted
+        * yet in FW*/
+       if (fw_has_capa(&mvm->fw->ucode_capa,
+                       IWL_UCODE_TLV_CAPA_TDLS_CHANNEL_SWITCH))
+               iwl_mvm_tdls_config(mvm, vif);
 
        /* when the last peer leaves, send a power update last */
        if (tdls_sta_cnt == 0 && !sta_added)