iwlwifi: mvm: rs: organize and cleanup consts
[cascardo/linux.git] / drivers / net / wireless / iwlwifi / mvm / rs.c
index ce88484..7ba6e5d 100644 (file)
 
 #define RS_NAME "iwl-mvm-rs"
 
-#define NUM_TRY_BEFORE_ANT_TOGGLE       1
-#define RS_LEGACY_RETRIES_PER_RATE      1
-#define RS_HT_VHT_RETRIES_PER_RATE      2
-#define RS_HT_VHT_RETRIES_PER_RATE_TW   1
-#define RS_INITIAL_MIMO_NUM_RATES       3
-#define RS_INITIAL_SISO_NUM_RATES       3
-#define RS_INITIAL_LEGACY_NUM_RATES     LINK_QUAL_MAX_RETRY_NUM
-#define RS_SECONDARY_LEGACY_NUM_RATES   LINK_QUAL_MAX_RETRY_NUM
-#define RS_SECONDARY_SISO_NUM_RATES     3
-#define RS_SECONDARY_SISO_RETRIES       1
-
 #define IWL_RATE_MAX_WINDOW            62      /* # tx in history window */
-#define IWL_RATE_MIN_FAILURE_TH                3       /* min failures to calc tpt */
-#define IWL_RATE_MIN_SUCCESS_TH                8       /* min successes to calc tpt */
 
-/* max allowed rate miss before sync LQ cmd */
-#define IWL_MISSED_RATE_MAX            15
-#define RS_STAY_IN_COLUMN_TIMEOUT       (5*HZ)
-#define RS_IDLE_TIMEOUT                 (5*HZ)
+/* Calculations of success ratio are done in fixed point where 12800 is 100%.
+ * Use this macro when dealing with thresholds consts set as a percentage
+ */
+#define RS_PERCENT(x) (128 * x)
 
 static u8 rs_ht_to_legacy[] = {
        [IWL_RATE_MCS_0_INDEX] = IWL_RATE_6M_INDEX,
@@ -158,6 +145,12 @@ struct rs_tx_column {
        allow_column_func_t checks[MAX_COLUMN_CHECKS];
 };
 
+static bool rs_ant_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
+                        struct iwl_scale_tbl_info *tbl)
+{
+       return iwl_mvm_bt_coex_is_ant_avail(mvm, tbl->rate.ant);
+}
+
 static bool rs_mimo_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                          struct iwl_scale_tbl_info *tbl)
 {
@@ -167,7 +160,7 @@ static bool rs_mimo_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
        if (sta->smps_mode == IEEE80211_SMPS_STATIC)
                return false;
 
-       if (num_of_ant(mvm->fw->valid_tx_ant) < 2)
+       if (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) < 2)
                return false;
 
        if (!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta))
@@ -218,6 +211,9 @@ static const struct rs_tx_column rs_tx_columns[] = {
                        RS_COLUMN_INVALID,
                        RS_COLUMN_INVALID,
                },
+               .checks = {
+                       rs_ant_allow,
+               },
        },
        [RS_COLUMN_LEGACY_ANT_B] = {
                .mode = RS_LEGACY,
@@ -231,6 +227,9 @@ static const struct rs_tx_column rs_tx_columns[] = {
                        RS_COLUMN_INVALID,
                        RS_COLUMN_INVALID,
                },
+               .checks = {
+                       rs_ant_allow,
+               },
        },
        [RS_COLUMN_SISO_ANT_A] = {
                .mode = RS_SISO,
@@ -246,6 +245,7 @@ static const struct rs_tx_column rs_tx_columns[] = {
                },
                .checks = {
                        rs_siso_allow,
+                       rs_ant_allow,
                },
        },
        [RS_COLUMN_SISO_ANT_B] = {
@@ -262,6 +262,7 @@ static const struct rs_tx_column rs_tx_columns[] = {
                },
                .checks = {
                        rs_siso_allow,
+                       rs_ant_allow,
                },
        },
        [RS_COLUMN_SISO_ANT_A_SGI] = {
@@ -279,6 +280,7 @@ static const struct rs_tx_column rs_tx_columns[] = {
                },
                .checks = {
                        rs_siso_allow,
+                       rs_ant_allow,
                        rs_sgi_allow,
                },
        },
@@ -297,6 +299,7 @@ static const struct rs_tx_column rs_tx_columns[] = {
                },
                .checks = {
                        rs_siso_allow,
+                       rs_ant_allow,
                        rs_sgi_allow,
                },
        },
@@ -506,7 +509,7 @@ static inline void rs_dump_rate(struct iwl_mvm *mvm, const struct rs_rate *rate,
                                const char *prefix)
 {
        IWL_DEBUG_RATE(mvm,
-                      "%s: (%s: %d) ANT: %s BW: %d SGI: %d LDPC: %d STBC %d\n",
+                      "%s: (%s: %d) ANT: %s BW: %d SGI: %d LDPC: %d STBC: %d\n",
                       prefix, rs_pretty_lq_type(rate->type),
                       rate->index, rs_pretty_ant(rate->ant),
                       rate->bw, rate->sgi, rate->ldpc, rate->stbc);
@@ -597,7 +600,8 @@ static s32 get_expected_tpt(struct iwl_scale_tbl_info *tbl, int rs_index)
  * at this rate.  window->data contains the bitmask of successful
  * packets.
  */
-static int _rs_collect_tx_data(struct iwl_scale_tbl_info *tbl,
+static int _rs_collect_tx_data(struct iwl_mvm *mvm,
+                              struct iwl_scale_tbl_info *tbl,
                               int scale_index, int attempts, int successes,
                               struct iwl_rate_scale_data *window)
 {
@@ -652,8 +656,8 @@ static int _rs_collect_tx_data(struct iwl_scale_tbl_info *tbl,
        fail_count = window->counter - window->success_counter;
 
        /* Calculate average throughput, if we have enough history. */
-       if ((fail_count >= IWL_RATE_MIN_FAILURE_TH) ||
-           (window->success_counter >= IWL_RATE_MIN_SUCCESS_TH))
+       if ((fail_count >= IWL_MVM_RS_RATE_MIN_FAILURE_TH) ||
+           (window->success_counter >= IWL_MVM_RS_RATE_MIN_SUCCESS_TH))
                window->average_tpt = (window->success_ratio * tpt + 64) / 128;
        else
                window->average_tpt = IWL_INVALID_VALUE;
@@ -661,7 +665,8 @@ static int _rs_collect_tx_data(struct iwl_scale_tbl_info *tbl,
        return 0;
 }
 
-static int rs_collect_tx_data(struct iwl_lq_sta *lq_sta,
+static int rs_collect_tx_data(struct iwl_mvm *mvm,
+                             struct iwl_lq_sta *lq_sta,
                              struct iwl_scale_tbl_info *tbl,
                              int scale_index, int attempts, int successes,
                              u8 reduced_txp)
@@ -682,7 +687,7 @@ static int rs_collect_tx_data(struct iwl_lq_sta *lq_sta,
        /* Select window for current tx bit rate */
        window = &(tbl->win[scale_index]);
 
-       ret = _rs_collect_tx_data(tbl, scale_index, attempts, successes,
+       ret = _rs_collect_tx_data(mvm, tbl, scale_index, attempts, successes,
                                  window);
        if (ret)
                return ret;
@@ -691,7 +696,7 @@ static int rs_collect_tx_data(struct iwl_lq_sta *lq_sta,
                return -EINVAL;
 
        window = &tbl->tpc_win[reduced_txp];
-       return _rs_collect_tx_data(tbl, scale_index, attempts, successes,
+       return _rs_collect_tx_data(mvm, tbl, scale_index, attempts, successes,
                                   window);
 }
 
@@ -816,7 +821,7 @@ static int rs_rate_from_ucode_rate(const u32 ucode_rate,
 
                if (nss == 1) {
                        rate->type = LQ_VHT_SISO;
-                       WARN_ON_ONCE(num_of_ant != 1);
+                       WARN_ON_ONCE(!rate->stbc && num_of_ant != 1);
                } else if (nss == 2) {
                        rate->type = LQ_VHT_MIMO2;
                        WARN_ON_ONCE(num_of_ant != 2);
@@ -988,7 +993,7 @@ static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta,
        }
 
        if (num_of_ant(rate->ant) > 1)
-               rate->ant = first_antenna(mvm->fw->valid_tx_ant);
+               rate->ant = first_antenna(iwl_mvm_get_valid_tx_ant(mvm));
 
        /* Relevant in both switching to SISO or Legacy */
        rate->sgi = false;
@@ -1109,11 +1114,13 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
        }
 
        if (time_after(jiffies,
-                      (unsigned long)(lq_sta->last_tx + RS_IDLE_TIMEOUT))) {
-               int tid;
+                      (unsigned long)(lq_sta->last_tx +
+                                      (IWL_MVM_RS_IDLE_TIMEOUT * HZ)))) {
+               int t;
+
                IWL_DEBUG_RATE(mvm, "Tx idle for too long. reinit rs\n");
-               for (tid = 0; tid < IWL_MAX_TID_COUNT; tid++)
-                       ieee80211_stop_tx_ba_session(sta, tid);
+               for (t = 0; t < IWL_MAX_TID_COUNT; t++)
+                       ieee80211_stop_tx_ba_session(sta, t);
 
                iwl_mvm_rs_rate_init(mvm, sta, info->band, false);
                return;
@@ -1141,7 +1148,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                 * ... driver.
                 */
                lq_sta->missed_rate_counter++;
-               if (lq_sta->missed_rate_counter > IWL_MISSED_RATE_MAX) {
+               if (lq_sta->missed_rate_counter > IWL_MVM_RS_MISSED_RATE_MAX) {
                        lq_sta->missed_rate_counter = 0;
                        IWL_DEBUG_RATE(mvm,
                                       "Too many rates mismatch. Send sync LQ. rs_state %d\n",
@@ -1154,16 +1161,15 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                /* Rate did match, so reset the missed_rate_counter */
                lq_sta->missed_rate_counter = 0;
 
-       /* Figure out if rate scale algorithm is in active or search table */
-       if (rs_rate_match(&rate,
-                         &(lq_sta->lq_info[lq_sta->active_tbl].rate))) {
+       if (!lq_sta->search_better_tbl) {
                curr_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]);
                other_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]);
-       } else if (rs_rate_match(&rate,
-                        &lq_sta->lq_info[1 - lq_sta->active_tbl].rate)) {
+       } else {
                curr_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]);
                other_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]);
-       } else {
+       }
+
+       if (WARN_ON_ONCE(!rs_rate_match(&rate, &curr_tbl->rate))) {
                IWL_DEBUG_RATE(mvm,
                               "Neither active nor search matches tx rate\n");
                tmp_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]);
@@ -1188,9 +1194,16 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
         * first index into rate scale table.
         */
        if (info->flags & IEEE80211_TX_STAT_AMPDU) {
+               /* ampdu_ack_len = 0 marks no BA was received. In this case
+                * treat it as a single frame loss as we don't want the success
+                * ratio to dip too quickly because a BA wasn't received
+                */
+               if (info->status.ampdu_ack_len == 0)
+                       info->status.ampdu_len = 1;
+
                ucode_rate = le32_to_cpu(table->rs_table[0]);
                rs_rate_from_ucode_rate(ucode_rate, info->band, &rate);
-               rs_collect_tx_data(lq_sta, curr_tbl, rate.index,
+               rs_collect_tx_data(mvm, lq_sta, curr_tbl, rate.index,
                                   info->status.ampdu_len,
                                   info->status.ampdu_ack_len,
                                   reduced_txp);
@@ -1226,7 +1239,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                        else
                                continue;
 
-                       rs_collect_tx_data(lq_sta, tmp_tbl, rate.index, 1,
+                       rs_collect_tx_data(mvm, lq_sta, tmp_tbl, rate.index, 1,
                                           i < retries ? 0 : legacy_success,
                                           reduced_txp);
                }
@@ -1280,13 +1293,13 @@ static void rs_set_stay_in_table(struct iwl_mvm *mvm, u8 is_legacy,
        IWL_DEBUG_RATE(mvm, "Moving to RS_STATE_STAY_IN_COLUMN\n");
        lq_sta->rs_state = RS_STATE_STAY_IN_COLUMN;
        if (is_legacy) {
-               lq_sta->table_count_limit = IWL_LEGACY_TABLE_COUNT;
-               lq_sta->max_failure_limit = IWL_LEGACY_FAILURE_LIMIT;
-               lq_sta->max_success_limit = IWL_LEGACY_SUCCESS_LIMIT;
+               lq_sta->table_count_limit = IWL_MVM_RS_LEGACY_TABLE_COUNT;
+               lq_sta->max_failure_limit = IWL_MVM_RS_LEGACY_FAILURE_LIMIT;
+               lq_sta->max_success_limit = IWL_MVM_RS_LEGACY_SUCCESS_LIMIT;
        } else {
-               lq_sta->table_count_limit = IWL_NONE_LEGACY_TABLE_COUNT;
-               lq_sta->max_failure_limit = IWL_NONE_LEGACY_FAILURE_LIMIT;
-               lq_sta->max_success_limit = IWL_NONE_LEGACY_SUCCESS_LIMIT;
+               lq_sta->table_count_limit = IWL_MVM_RS_NON_LEGACY_TABLE_COUNT;
+               lq_sta->max_failure_limit = IWL_MVM_RS_NON_LEGACY_FAILURE_LIMIT;
+               lq_sta->max_success_limit = IWL_MVM_RS_NON_LEGACY_SUCCESS_LIMIT;
        }
        lq_sta->table_count = 0;
        lq_sta->total_failed = 0;
@@ -1295,6 +1308,13 @@ static void rs_set_stay_in_table(struct iwl_mvm *mvm, u8 is_legacy,
        lq_sta->visited_columns = 0;
 }
 
+static inline int rs_get_max_rate_from_mask(unsigned long rate_mask)
+{
+       if (rate_mask)
+               return find_last_bit(&rate_mask, BITS_PER_LONG);
+       return IWL_RATE_INVALID;
+}
+
 static int rs_get_max_allowed_rate(struct iwl_lq_sta *lq_sta,
                                   const struct rs_tx_column *column)
 {
@@ -1397,7 +1417,7 @@ static s32 rs_get_best_rate(struct iwl_mvm *mvm,
        u32 target_tpt;
        int rate_idx;
 
-       if (success_ratio > RS_SR_NO_DECREASE) {
+       if (success_ratio > IWL_MVM_RS_SR_NO_DECREASE) {
                target_tpt = 100 * expected_current_tpt;
                IWL_DEBUG_RATE(mvm,
                               "SR %d high. Find rate exceeding EXPECTED_CURRENT %d\n",
@@ -1465,7 +1485,7 @@ static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search)
                        flush_interval_passed =
                                time_after(jiffies,
                                           (unsigned long)(lq_sta->flush_timer +
-                                               RS_STAY_IN_COLUMN_TIMEOUT));
+                                                          (IWL_MVM_RS_STAY_IN_COLUMN_TIMEOUT * HZ)));
 
                /*
                 * Check if we should allow search for new modulation mode.
@@ -1544,7 +1564,7 @@ static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
        const struct rs_tx_column *curr_col = &rs_tx_columns[tbl->column];
        const struct rs_tx_column *next_col;
        allow_column_func_t allow_func;
-       u8 valid_ants = mvm->fw->valid_tx_ant;
+       u8 valid_ants = iwl_mvm_get_valid_tx_ant(mvm);
        const u16 *expected_tpt_tbl;
        u16 tpt, max_expected_tpt;
 
@@ -1590,8 +1610,12 @@ static enum rs_column rs_get_next_column(struct iwl_mvm *mvm,
                        continue;
 
                max_rate = rs_get_max_allowed_rate(lq_sta, next_col);
-               if (WARN_ON_ONCE(max_rate == IWL_RATE_INVALID))
+               if (max_rate == IWL_RATE_INVALID) {
+                       IWL_DEBUG_RATE(mvm,
+                                      "Skip column %d: no rate is allowed in this column\n",
+                                      next_col_id);
                        continue;
+               }
 
                max_expected_tpt = expected_tpt_tbl[max_rate];
                if (tpt >= max_expected_tpt) {
@@ -1701,7 +1725,8 @@ static enum rs_action rs_get_rate_action(struct iwl_mvm *mvm,
 {
        enum rs_action action = RS_ACTION_STAY;
 
-       if ((sr <= RS_SR_FORCE_DECREASE) || (current_tpt == 0)) {
+       if ((sr <= RS_PERCENT(IWL_MVM_RS_SR_FORCE_DECREASE)) ||
+           (current_tpt == 0)) {
                IWL_DEBUG_RATE(mvm,
                               "Decrease rate because of low SR\n");
                return RS_ACTION_DOWNSCALE;
@@ -1760,7 +1785,7 @@ static enum rs_action rs_get_rate_action(struct iwl_mvm *mvm,
 
 out:
        if ((action == RS_ACTION_DOWNSCALE) && (low != IWL_RATE_INVALID)) {
-               if (sr >= RS_SR_NO_DECREASE) {
+               if (sr >= RS_PERCENT(IWL_MVM_RS_SR_NO_DECREASE)) {
                        IWL_DEBUG_RATE(mvm,
                                       "SR is above NO DECREASE. Avoid downscale\n");
                        action = RS_ACTION_STAY;
@@ -1802,11 +1827,11 @@ static bool rs_stbc_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
 static void rs_get_adjacent_txp(struct iwl_mvm *mvm, int index,
                                int *weaker, int *stronger)
 {
-       *weaker = index + TPC_TX_POWER_STEP;
+       *weaker = index + IWL_MVM_RS_TPC_TX_POWER_STEP;
        if (*weaker > TPC_MAX_REDUCTION)
                *weaker = TPC_INVALID;
 
-       *stronger = index - TPC_TX_POWER_STEP;
+       *stronger = index - IWL_MVM_RS_TPC_TX_POWER_STEP;
        if (*stronger < 0)
                *stronger = TPC_INVALID;
 }
@@ -1862,7 +1887,8 @@ static enum tpc_action rs_get_tpc_action(struct iwl_mvm *mvm,
        }
 
        /* Too many failures, increase txp */
-       if (sr <= TPC_SR_FORCE_INCREASE || current_tpt == 0) {
+       if (sr <= RS_PERCENT(IWL_MVM_RS_TPC_SR_FORCE_INCREASE) ||
+           current_tpt == 0) {
                IWL_DEBUG_RATE(mvm, "increase txp because of weak SR\n");
                return TPC_ACTION_NO_RESTIRCTION;
        }
@@ -1885,7 +1911,8 @@ static enum tpc_action rs_get_tpc_action(struct iwl_mvm *mvm,
        }
 
        /* next, increase if needed */
-       if (sr < TPC_SR_NO_INCREASE && strong != TPC_INVALID) {
+       if (sr < RS_PERCENT(IWL_MVM_RS_TPC_SR_NO_INCREASE) &&
+           strong != TPC_INVALID) {
                if (weak_tpt == IWL_INVALID_VALUE &&
                    strong_tpt != IWL_INVALID_VALUE &&
                    current_tpt < strong_tpt) {
@@ -1912,7 +1939,7 @@ static bool rs_tpc_perform(struct iwl_mvm *mvm,
                           struct iwl_lq_sta *lq_sta,
                           struct iwl_scale_tbl_info *tbl)
 {
-       struct iwl_mvm_sta *mvm_sta = (void *)sta->drv_priv;
+       struct iwl_mvm_sta *mvm_sta = iwl_mvm_sta_from_mac80211(sta);
        struct ieee80211_vif *vif = mvm_sta->vif;
        struct ieee80211_chanctx_conf *chanctx_conf;
        enum ieee80211_band band;
@@ -2021,7 +2048,7 @@ static void rs_rate_scale_perform(struct iwl_mvm *mvm,
        u16 high_low;
        s32 sr;
        u8 prev_agg = lq_sta->is_agg;
-       struct iwl_mvm_sta *sta_priv = (void *)sta->drv_priv;
+       struct iwl_mvm_sta *sta_priv = iwl_mvm_sta_from_mac80211(sta);
        struct iwl_mvm_tid_data *tid_data;
        struct rs_rate *rate;
 
@@ -2083,8 +2110,8 @@ static void rs_rate_scale_perform(struct iwl_mvm *mvm,
         * in current association (use new rate found above).
         */
        fail_count = window->counter - window->success_counter;
-       if ((fail_count < IWL_RATE_MIN_FAILURE_TH) &&
-           (window->success_counter < IWL_RATE_MIN_SUCCESS_TH)) {
+       if ((fail_count < IWL_MVM_RS_RATE_MIN_FAILURE_TH) &&
+           (window->success_counter < IWL_MVM_RS_RATE_MIN_SUCCESS_TH)) {
                IWL_DEBUG_RATE(mvm,
                               "(%s: %d): Test Window: succ %d total %d\n",
                               rs_pretty_lq_type(rate->type),
@@ -2362,7 +2389,7 @@ static void rs_get_initial_rate(struct iwl_mvm *mvm,
        int i, nentries;
        s8 best_rssi = S8_MIN;
        u8 best_ant = ANT_NONE;
-       u8 valid_tx_ant = mvm->fw->valid_tx_ant;
+       u8 valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm);
        const struct rs_init_rate_info *initial_rates;
 
        for (i = 0; i < ARRAY_SIZE(lq_sta->pers.chain_signal); i++) {
@@ -2507,7 +2534,7 @@ static void rs_get_rate(void *mvm_r, struct ieee80211_sta *sta, void *mvm_sta,
 static void *rs_alloc_sta(void *mvm_rate, struct ieee80211_sta *sta,
                          gfp_t gfp)
 {
-       struct iwl_mvm_sta *sta_priv = (struct iwl_mvm_sta *)sta->drv_priv;
+       struct iwl_mvm_sta *sta_priv = iwl_mvm_sta_from_mac80211(sta);
        struct iwl_op_mode *op_mode = (struct iwl_op_mode *)mvm_rate;
        struct iwl_mvm *mvm  = IWL_OP_MODE_GET_MVM(op_mode);
        struct iwl_lq_sta *lq_sta = &sta_priv->lq_sta;
@@ -2660,14 +2687,11 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
        struct ieee80211_hw *hw = mvm->hw;
        struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap;
        struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap;
-       struct iwl_mvm_sta *sta_priv;
-       struct iwl_lq_sta *lq_sta;
+       struct iwl_mvm_sta *sta_priv = iwl_mvm_sta_from_mac80211(sta);
+       struct iwl_lq_sta *lq_sta = &sta_priv->lq_sta;
        struct ieee80211_supported_band *sband;
        unsigned long supp; /* must be unsigned long for for_each_set_bit */
 
-       sta_priv = (struct iwl_mvm_sta *)sta->drv_priv;
-       lq_sta = &sta_priv->lq_sta;
-
        /* clear all non-persistent lq data */
        memset(lq_sta, 0, offsetof(typeof(*lq_sta), pers));
 
@@ -2689,7 +2713,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
         * previous packets? Need to have IEEE 802.1X auth succeed immediately
         * after assoc.. */
 
-       lq_sta->missed_rate_counter = IWL_MISSED_RATE_MAX;
+       lq_sta->missed_rate_counter = IWL_MVM_RS_MISSED_RATE_MAX;
        lq_sta->band = sband->band;
        /*
         * active legacy rates as per supported rates bitmap
@@ -2722,7 +2746,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                        lq_sta->ldpc = true;
 
                if (mvm->cfg->ht_params->stbc &&
-                   (num_of_ant(mvm->fw->valid_tx_ant) > 1) &&
+                   (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) &&
                    (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC))
                        lq_sta->stbc = true;
        } else {
@@ -2734,7 +2758,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
                        lq_sta->ldpc = true;
 
                if (mvm->cfg->ht_params->stbc &&
-                   (num_of_ant(mvm->fw->valid_tx_ant) > 1) &&
+                   (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) &&
                    (vht_cap->cap & IEEE80211_VHT_CAP_RXSTBC_MASK))
                        lq_sta->stbc = true;
        }
@@ -2742,12 +2766,12 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
        if (IWL_MVM_RS_DISABLE_MIMO)
                lq_sta->active_mimo2_rate = 0;
 
-       lq_sta->max_legacy_rate_idx = find_last_bit(&lq_sta->active_legacy_rate,
-                                                   BITS_PER_LONG);
-       lq_sta->max_siso_rate_idx = find_last_bit(&lq_sta->active_siso_rate,
-                                                 BITS_PER_LONG);
-       lq_sta->max_mimo2_rate_idx = find_last_bit(&lq_sta->active_mimo2_rate,
-                                                  BITS_PER_LONG);
+       lq_sta->max_legacy_rate_idx =
+               rs_get_max_rate_from_mask(lq_sta->active_legacy_rate);
+       lq_sta->max_siso_rate_idx =
+               rs_get_max_rate_from_mask(lq_sta->active_siso_rate);
+       lq_sta->max_mimo2_rate_idx =
+               rs_get_max_rate_from_mask(lq_sta->active_mimo2_rate);
 
        IWL_DEBUG_RATE(mvm,
                       "RATE MASK: LEGACY=%lX SISO=%lX MIMO2=%lX VHT=%d LDPC=%d STBC%d\n",
@@ -2762,7 +2786,7 @@ void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
 
        /* These values will be overridden later */
        lq_sta->lq.single_stream_ant_msk =
-               first_antenna(mvm->fw->valid_tx_ant);
+               first_antenna(iwl_mvm_get_valid_tx_ant(mvm));
        lq_sta->lq.dual_stream_ant_msk = ANT_AB;
 
        /* as default allow aggregation for all tids */
@@ -2890,18 +2914,18 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
 
        memcpy(&rate, initial_rate, sizeof(rate));
 
-       valid_tx_ant = mvm->fw->valid_tx_ant;
+       valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm);
        rate.stbc = rs_stbc_allow(mvm, sta, lq_sta);
 
        if (is_siso(&rate)) {
-               num_rates = RS_INITIAL_SISO_NUM_RATES;
-               num_retries = RS_HT_VHT_RETRIES_PER_RATE;
+               num_rates = IWL_MVM_RS_INITIAL_SISO_NUM_RATES;
+               num_retries = IWL_MVM_RS_HT_VHT_RETRIES_PER_RATE;
        } else if (is_mimo(&rate)) {
-               num_rates = RS_INITIAL_MIMO_NUM_RATES;
-               num_retries = RS_HT_VHT_RETRIES_PER_RATE;
+               num_rates = IWL_MVM_RS_INITIAL_MIMO_NUM_RATES;
+               num_retries = IWL_MVM_RS_HT_VHT_RETRIES_PER_RATE;
        } else {
-               num_rates = RS_INITIAL_LEGACY_NUM_RATES;
-               num_retries = RS_LEGACY_RETRIES_PER_RATE;
+               num_rates = IWL_MVM_RS_INITIAL_LEGACY_NUM_RATES;
+               num_retries = IWL_MVM_RS_LEGACY_RETRIES_PER_RATE;
                toggle_ant = true;
        }
 
@@ -2912,12 +2936,12 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
        rs_get_lower_rate_down_column(lq_sta, &rate);
 
        if (is_siso(&rate)) {
-               num_rates = RS_SECONDARY_SISO_NUM_RATES;
-               num_retries = RS_SECONDARY_SISO_RETRIES;
+               num_rates = IWL_MVM_RS_SECONDARY_SISO_NUM_RATES;
+               num_retries = IWL_MVM_RS_SECONDARY_SISO_RETRIES;
                lq_cmd->mimo_delim = index;
        } else if (is_legacy(&rate)) {
-               num_rates = RS_SECONDARY_LEGACY_NUM_RATES;
-               num_retries = RS_LEGACY_RETRIES_PER_RATE;
+               num_rates = IWL_MVM_RS_SECONDARY_LEGACY_NUM_RATES;
+               num_retries = IWL_MVM_RS_LEGACY_RETRIES_PER_RATE;
        } else {
                WARN_ON_ONCE(1);
        }
@@ -2930,8 +2954,8 @@ static void rs_build_rates_table(struct iwl_mvm *mvm,
 
        rs_get_lower_rate_down_column(lq_sta, &rate);
 
-       num_rates = RS_SECONDARY_LEGACY_NUM_RATES;
-       num_retries = RS_LEGACY_RETRIES_PER_RATE;
+       num_rates = IWL_MVM_RS_SECONDARY_LEGACY_NUM_RATES;
+       num_retries = IWL_MVM_RS_LEGACY_RETRIES_PER_RATE;
 
        rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index,
                                 num_rates, num_retries, valid_tx_ant,
@@ -2948,9 +2972,9 @@ static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
        struct iwl_mvm_sta *mvmsta;
        struct iwl_mvm_vif *mvmvif;
 
-       lq_cmd->agg_disable_start_th = LINK_QUAL_AGG_DISABLE_START_DEF;
+       lq_cmd->agg_disable_start_th = IWL_MVM_RS_AGG_DISABLE_START;
        lq_cmd->agg_time_limit =
-               cpu_to_le16(LINK_QUAL_AGG_TIME_LIMIT_DEF);
+               cpu_to_le16(IWL_MVM_RS_AGG_TIME_LIMIT);
 
 #ifdef CONFIG_MAC80211_DEBUGFS
        if (lq_sta->pers.dbg_fixed_rate) {
@@ -3144,9 +3168,9 @@ static ssize_t rs_sta_dbgfs_scale_table_read(struct file *file,
        desc += sprintf(buff+desc, "fixed rate 0x%X\n",
                        lq_sta->pers.dbg_fixed_rate);
        desc += sprintf(buff+desc, "valid_tx_ant %s%s%s\n",
-           (mvm->fw->valid_tx_ant & ANT_A) ? "ANT_A," : "",
-           (mvm->fw->valid_tx_ant & ANT_B) ? "ANT_B," : "",
-           (mvm->fw->valid_tx_ant & ANT_C) ? "ANT_C" : "");
+           (iwl_mvm_get_valid_tx_ant(mvm) & ANT_A) ? "ANT_A," : "",
+           (iwl_mvm_get_valid_tx_ant(mvm) & ANT_B) ? "ANT_B," : "",
+           (iwl_mvm_get_valid_tx_ant(mvm) & ANT_C) ? "ANT_C" : "");
        desc += sprintf(buff+desc, "lq type %s\n",
                        (is_legacy(rate)) ? "legacy" :
                        is_vht(rate) ? "VHT" : "HT");