iwlwifi: mvm: allocate dedicated queue for cab in dqa mode
authorLiad Kaufman <liad.kaufman@intel.com>
Tue, 4 Aug 2015 12:13:38 +0000 (15:13 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 30 Mar 2016 13:24:47 +0000 (16:24 +0300)
In DQA mode, allocate a dedicated queue (#3) for content
after beacon (AKA "CaB").

Signed-off-by: Liad Kaufman <liad.kaufman@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
drivers/net/wireless/intel/iwlwifi/mvm/fw-api.h
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c

index 965268766ac2ebe7515ff3ea8dd2e65bf9422c95..b38cb03ec0865d8521c2a9c80e9eeae2518cc8f7 100644 (file)
@@ -89,6 +89,7 @@ enum {
 /*
  * DQA queue numbers
  *
+ * @IWL_MVM_DQA_GCAST_QUEUE: a queue reserved for P2P GO/SoftAP GCAST frames
  * @IWL_MVM_DQA_BSS_CLIENT_QUEUE: a queue reserved for BSS activity, to ensure
  *     that we are never left without the possibility to connect to an AP.
  * @IWL_MVM_DQA_MIN_MGMT_QUEUE: first TXQ in pool for MGMT and non-QOS frames.
@@ -102,6 +103,7 @@ enum {
  * @IWL_MVM_DQA_MAX_DATA_QUEUE: last TXQ in pool for DATA frames
  */
 enum iwl_mvm_dqa_txq {
+       IWL_MVM_DQA_GCAST_QUEUE = 3,
        IWL_MVM_DQA_BSS_CLIENT_QUEUE = 4,
        IWL_MVM_DQA_MIN_MGMT_QUEUE = 5,
        IWL_MVM_DQA_MAX_MGMT_QUEUE = 8,
index c02c1055d534aab455e906543eee9dd59b061ab7..43fd85725d45b35842105df14ac39ee1c535ec54 100644 (file)
@@ -447,13 +447,19 @@ static int iwl_mvm_mac_ctxt_allocate_resources(struct iwl_mvm *mvm,
 
        /* Allocate the CAB queue for softAP and GO interfaces */
        if (vif->type == NL80211_IFTYPE_AP) {
-               u8 queue = find_first_zero_bit(&used_hw_queues,
-                                              mvm->first_agg_queue);
+               u8 queue;
 
-               if (queue >= mvm->first_agg_queue) {
-                       IWL_ERR(mvm, "Failed to allocate cab queue\n");
-                       ret = -EIO;
-                       goto exit_fail;
+               if (!iwl_mvm_is_dqa_supported(mvm)) {
+                       queue = find_first_zero_bit(&used_hw_queues,
+                                                   mvm->first_agg_queue);
+
+                       if (queue >= mvm->first_agg_queue) {
+                               IWL_ERR(mvm, "Failed to allocate cab queue\n");
+                               ret = -EIO;
+                               goto exit_fail;
+                       }
+               } else {
+                       queue = IWL_MVM_DQA_GCAST_QUEUE;
                }
 
                vif->cab_queue = queue;