iwlwifi: mvm: move cmd queue to be #0 in dqa mode
authorLiad Kaufman <liad.kaufman@intel.com>
Sun, 9 Aug 2015 15:28:43 +0000 (18:28 +0300)
committerEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Wed, 30 Mar 2016 13:24:48 +0000 (16:24 +0300)
Change the CMD queue to be queue #0 (rather than queue #9)
when working in DQA mode.

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/fw.c
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/intel/iwlwifi/mvm/ops.c

index b38cb03ec0865d8521c2a9c80e9eeae2518cc8f7..60eed8485aba8b1ff0a2c297daeaeb47315c2a5c 100644 (file)
@@ -89,6 +89,7 @@ enum {
 /*
  * DQA queue numbers
  *
+ * @IWL_MVM_DQA_CMD_QUEUE: a queue reserved for sending HCMDs to the FW
  * @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.
@@ -103,6 +104,7 @@ enum {
  * @IWL_MVM_DQA_MAX_DATA_QUEUE: last TXQ in pool for DATA frames
  */
 enum iwl_mvm_dqa_txq {
+       IWL_MVM_DQA_CMD_QUEUE = 0,
        IWL_MVM_DQA_GCAST_QUEUE = 3,
        IWL_MVM_DQA_BSS_CLIENT_QUEUE = 4,
        IWL_MVM_DQA_MIN_MGMT_QUEUE = 5,
index 2dc97a19246ace3d354c956e760bdc3ce80a5094..6ad5c602e84c2aa0483dcb25d1345a3baa5bc9d4 100644 (file)
@@ -652,7 +652,10 @@ static int iwl_mvm_load_ucode_wait_alive(struct iwl_mvm *mvm,
         */
 
        memset(&mvm->queue_info, 0, sizeof(mvm->queue_info));
-       mvm->queue_info[IWL_MVM_CMD_QUEUE].hw_queue_refcount = 1;
+       if (iwl_mvm_is_dqa_supported(mvm))
+               mvm->queue_info[IWL_MVM_DQA_CMD_QUEUE].hw_queue_refcount = 1;
+       else
+               mvm->queue_info[IWL_MVM_CMD_QUEUE].hw_queue_refcount = 1;
 
        for (i = 0; i < IEEE80211_MAX_QUEUES; i++)
                atomic_set(&mvm->mac80211_queue_stop_count[i], 0);
index 43fd85725d45b35842105df14ac39ee1c535ec54..5f950568e92c9fe04b2fbc3c2842cbdc3c6d38bf 100644 (file)
@@ -252,10 +252,14 @@ unsigned long iwl_mvm_get_used_hw_queues(struct iwl_mvm *mvm,
                .exclude_vif = exclude_vif,
                .used_hw_queues =
                        BIT(IWL_MVM_OFFCHANNEL_QUEUE) |
-                       BIT(mvm->aux_queue) |
-                       BIT(IWL_MVM_CMD_QUEUE),
+                       BIT(mvm->aux_queue),
        };
 
+       if (iwl_mvm_is_dqa_supported(mvm))
+               data.used_hw_queues |= BIT(IWL_MVM_DQA_CMD_QUEUE);
+       else
+               data.used_hw_queues |= BIT(IWL_MVM_CMD_QUEUE);
+
        lockdep_assert_held(&mvm->mutex);
 
        /* mark all VIF used hw queues */
index e36bcade69d130ac8a29b1d0191edba114548ba7..cb0092609595153580188a5b3797840f4c203a4d 100644 (file)
@@ -619,7 +619,10 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
        trans_cfg.command_groups = iwl_mvm_groups;
        trans_cfg.command_groups_size = ARRAY_SIZE(iwl_mvm_groups);
 
-       trans_cfg.cmd_queue = IWL_MVM_CMD_QUEUE;
+       if (iwl_mvm_is_dqa_supported(mvm))
+               trans_cfg.cmd_queue = IWL_MVM_DQA_CMD_QUEUE;
+       else
+               trans_cfg.cmd_queue = IWL_MVM_CMD_QUEUE;
        trans_cfg.cmd_fifo = IWL_MVM_TX_FIFO_CMD;
        trans_cfg.scd_set_active = true;