OSDN Git Service

iwlwifi: add TX queue size parameter to TX queue allocation
authorSara Sharon <sara.sharon@intel.com>
Thu, 4 Jan 2018 12:17:06 +0000 (14:17 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 20 Apr 2018 07:57:16 +0000 (10:57 +0300)
As preparation for dynamic queue sizing, add a parameter
of the TX queue size to the dynamic queue allocation op
mode API.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/txq.h
drivers/net/wireless/intel/iwlwifi/iwl-trans.h
drivers/net/wireless/intel/iwlwifi/mvm/utils.c
drivers/net/wireless/intel/iwlwifi/pcie/internal.h
drivers/net/wireless/intel/iwlwifi/pcie/tx-gen2.c

index dfa111b..1f45b2c 100644 (file)
@@ -131,6 +131,7 @@ enum iwl_tx_queue_cfg_actions {
        TX_QUEUE_CFG_TFD_SHORT_FORMAT           = BIT(1),
 };
 
+#define IWL_DEFAULT_QUEUE_SIZE 256
 /**
  * struct iwl_tx_queue_cfg_cmd - txq hw scheduler config command
  * @sta_id: station id
index c25ed1a..a928327 100644 (file)
@@ -554,7 +554,7 @@ struct iwl_trans_ops {
        /* 22000 functions */
        int (*txq_alloc)(struct iwl_trans *trans,
                         struct iwl_tx_queue_cfg_cmd *cmd,
-                        int cmd_id,
+                        int cmd_id, int size,
                         unsigned int queue_wdg_timeout);
        void (*txq_free)(struct iwl_trans *trans, int queue);
 
@@ -952,8 +952,8 @@ iwl_trans_txq_free(struct iwl_trans *trans, int queue)
 static inline int
 iwl_trans_txq_alloc(struct iwl_trans *trans,
                    struct iwl_tx_queue_cfg_cmd *cmd,
-                   int cmd_id,
-                   unsigned int queue_wdg_timeout)
+                   int cmd_id, int size,
+                   unsigned int wdg_timeout)
 {
        might_sleep();
 
@@ -965,7 +965,7 @@ iwl_trans_txq_alloc(struct iwl_trans *trans,
                return -EIO;
        }
 
-       return trans->ops->txq_alloc(trans, cmd, cmd_id, queue_wdg_timeout);
+       return trans->ops->txq_alloc(trans, cmd, cmd_id, size, wdg_timeout);
 }
 
 static inline void iwl_trans_txq_set_shared_mode(struct iwl_trans *trans,
index 815d2d1..81c02d6 100644 (file)
@@ -733,7 +733,8 @@ int iwl_mvm_tvqm_enable_txq(struct iwl_mvm *mvm, int mac80211_queue,
        if (cmd.tid == IWL_MAX_TID_COUNT)
                cmd.tid = IWL_MGMT_TID;
        queue = iwl_trans_txq_alloc(mvm->trans, (void *)&cmd,
-                                   SCD_QUEUE_CFG, timeout);
+                                   SCD_QUEUE_CFG, IWL_DEFAULT_QUEUE_SIZE,
+                                   timeout);
 
        if (queue < 0) {
                IWL_DEBUG_TX_QUEUES(mvm,
index a883302..cda6634 100644 (file)
@@ -819,7 +819,7 @@ int iwl_trans_pcie_gen2_start_fw(struct iwl_trans *trans,
 void iwl_trans_pcie_gen2_fw_alive(struct iwl_trans *trans, u32 scd_addr);
 int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans,
                                 struct iwl_tx_queue_cfg_cmd *cmd,
-                                int cmd_id,
+                                int cmd_id, int size,
                                 unsigned int timeout);
 void iwl_trans_pcie_dyn_txq_free(struct iwl_trans *trans, int queue);
 int iwl_trans_pcie_gen2_tx(struct iwl_trans *trans, struct sk_buff *skb,
index 7bdb9c9..b3d151e 100644 (file)
@@ -1041,7 +1041,7 @@ static void iwl_pcie_gen2_txq_free(struct iwl_trans *trans, int txq_id)
 
 int iwl_trans_pcie_dyn_txq_alloc(struct iwl_trans *trans,
                                 struct iwl_tx_queue_cfg_cmd *cmd,
-                                int cmd_id,
+                                int cmd_id, int size,
                                 unsigned int timeout)
 {
        struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);