|
@@ -42,25 +42,12 @@
|
|
|
|
|
|
#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,
|
|
@@ -173,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))
|
|
@@ -613,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)
|
|
|
{
|
|
@@ -668,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;
|
|
@@ -677,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)
|
|
@@ -698,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;
|
|
@@ -707,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);
|
|
|
}
|
|
|
|
|
@@ -1004,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;
|
|
@@ -1125,7 +1114,8 @@ 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))) {
|
|
|
+ (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");
|
|
@@ -1158,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",
|
|
@@ -1213,7 +1203,7 @@ void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
|
|
|
|
|
|
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);
|
|
@@ -1249,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);
|
|
|
}
|
|
@@ -1303,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;
|
|
@@ -1318,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)
|
|
|
{
|
|
@@ -1420,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",
|
|
@@ -1488,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.
|
|
@@ -1567,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;
|
|
|
|
|
@@ -1613,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) {
|
|
@@ -1724,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;
|
|
@@ -1783,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;
|
|
@@ -1825,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;
|
|
|
}
|
|
@@ -1885,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;
|
|
|
}
|
|
@@ -1908,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) {
|
|
@@ -1935,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;
|
|
@@ -2044,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;
|
|
|
|
|
@@ -2106,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),
|
|
@@ -2385,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++) {
|
|
@@ -2530,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;
|
|
@@ -2683,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));
|
|
|
|
|
@@ -2712,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
|
|
@@ -2745,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 {
|
|
@@ -2757,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;
|
|
|
}
|
|
@@ -2765,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",
|
|
@@ -2785,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 */
|
|
@@ -2913,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;
|
|
|
}
|
|
|
|
|
@@ -2935,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);
|
|
|
}
|
|
@@ -2953,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,
|
|
@@ -2971,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) {
|
|
@@ -3167,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");
|