iwlwifi: mvm: add missing implementation of flush for a000 devices
authorSara Sharon <sara.sharon@intel.com>
Tue, 12 Sep 2017 07:52:53 +0000 (10:52 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 3 Nov 2017 09:56:09 +0000 (11:56 +0200)
In the mac flush flow, we should flush all existing queues.
Since FW API for a000 devices is flush per RA-TID, simply
flush all stations with all tids.
From FW perspective, asking to flush a TID that doesn't have
a queue is valid, so we can just set all bits in the TID mask.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 941dbde..ae2eb0c 100644 (file)
@@ -4004,19 +4004,12 @@ static void iwl_mvm_flush_no_vif(struct iwl_mvm *mvm, u32 queues, bool drop)
 {
        int i;
 
-       if (drop) {
-               if (iwl_mvm_has_new_tx_api(mvm))
-                       /* TODO new tx api */
-                       WARN_ONCE(1,
-                                 "Need to implement flush TX queue\n");
-               else
+       if (!iwl_mvm_has_new_tx_api(mvm)) {
+               if (drop)
                        iwl_mvm_flush_tx_path(mvm,
                                iwl_mvm_flushable_queues(mvm) & queues, 0);
-               return;
-       }
-
-       if (!iwl_mvm_has_new_tx_api(mvm)) {
-               iwl_trans_wait_tx_queues_empty(mvm->trans, queues);
+               else
+                       iwl_trans_wait_tx_queues_empty(mvm->trans, queues);
                return;
        }
 
@@ -4029,8 +4022,11 @@ static void iwl_mvm_flush_no_vif(struct iwl_mvm *mvm, u32 queues, bool drop)
                if (IS_ERR_OR_NULL(sta))
                        continue;
 
-               iwl_mvm_wait_sta_queues_empty(mvm,
-                                             iwl_mvm_sta_from_mac80211(sta));
+               if (drop)
+                       iwl_mvm_flush_sta_tids(mvm, i, 0xFF, 0);
+               else
+                       iwl_mvm_wait_sta_queues_empty(mvm,
+                                       iwl_mvm_sta_from_mac80211(sta));
        }
        mutex_unlock(&mvm->mutex);
 }