|
|
@@ -326,6 +326,23 @@ static const char *iwl_mvm_cmd_strings[REPLY_MAX] = {
|
|
|
/* this forward declaration can avoid to export the function */
|
|
|
static void iwl_mvm_async_handlers_wk(struct work_struct *wk);
|
|
|
|
|
|
+static u32 calc_min_backoff(struct iwl_trans *trans, const struct iwl_cfg *cfg)
|
|
|
+{
|
|
|
+ const struct iwl_pwr_tx_backoff *pwr_tx_backoff = cfg->pwr_tx_backoffs;
|
|
|
+
|
|
|
+ if (!pwr_tx_backoff)
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ while (pwr_tx_backoff->pwr) {
|
|
|
+ if (trans->dflt_pwr_limit >= pwr_tx_backoff->pwr)
|
|
|
+ return pwr_tx_backoff->backoff;
|
|
|
+
|
|
|
+ pwr_tx_backoff++;
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
static struct iwl_op_mode *
|
|
|
iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
|
const struct iwl_fw *fw, struct dentry *dbgfs_dir)
|
|
|
@@ -338,6 +355,7 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
|
TX_CMD,
|
|
|
};
|
|
|
int err, scan_size;
|
|
|
+ u32 min_backoff;
|
|
|
|
|
|
/*
|
|
|
* We use IWL_MVM_STATION_COUNT to check the validity of the station
|
|
|
@@ -433,7 +451,8 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
|
|
IWL_INFO(mvm, "Detected %s, REV=0x%X\n",
|
|
|
mvm->cfg->name, mvm->trans->hw_rev);
|
|
|
|
|
|
- iwl_mvm_tt_initialize(mvm);
|
|
|
+ min_backoff = calc_min_backoff(trans, cfg);
|
|
|
+ iwl_mvm_tt_initialize(mvm, min_backoff);
|
|
|
|
|
|
/*
|
|
|
* If the NVM exists in an external file,
|