]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
iwlwifi: mvm: require AP_LINK_PS for TVQM
authorJohannes Berg <johannes.berg@intel.com>
Tue, 20 Jun 2017 13:18:43 +0000 (15:18 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Tue, 1 Aug 2017 09:41:45 +0000 (12:41 +0300)
Since the TXQ timer freeze code will not properly handle the
large TVQM queue numbers, warn if we get into that code when
we have TVQM. Also, just to catch this earlier, warn if the
firmware image doesn't support AP_LINK_PS but we're running
on HW using TVQM.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 44f144c5872093fff11bc95a121c1304d72d47b3..a2e0acc23adc1c2546884df5357078e1c3c45942 100644 (file)
@@ -445,8 +445,18 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
        ieee80211_hw_set(hw, NEEDS_UNIQUE_STA_ADDR);
        if (iwl_mvm_has_new_rx_api(mvm))
                ieee80211_hw_set(hw, SUPPORTS_REORDERING_BUFFER);
-       if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_STA_PM_NOTIF))
+
+       if (fw_has_capa(&mvm->fw->ucode_capa,
+                       IWL_UCODE_TLV_CAPA_STA_PM_NOTIF)) {
                ieee80211_hw_set(hw, AP_LINK_PS);
+       } else if (WARN_ON(iwl_mvm_has_new_tx_api(mvm))) {
+               /*
+                * we absolutely need this for the new TX API since that comes
+                * with many more queues than the current code can deal with
+                * for station powersave
+                */
+               return -EINVAL;
+       }
 
        if (mvm->trans->num_rx_queues > 1)
                ieee80211_hw_set(hw, USES_RSS);
@@ -2399,6 +2409,14 @@ static void __iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
        unsigned long txqs = 0, tids = 0;
        int tid;
 
+       /*
+        * If we have TVQM then we get too high queue numbers - luckily
+        * we really shouldn't get here with that because such hardware
+        * should have firmware supporting buffer station offload.
+        */
+       if (WARN_ON(iwl_mvm_has_new_tx_api(mvm)))
+               return;
+
        spin_lock_bh(&mvmsta->lock);
        for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++) {
                struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];