Lines Matching refs:lq_sta

403 				  struct iwl_lq_sta *lq_sta,
407 struct iwl_lq_sta *lq_sta,
409 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search);
688 struct iwl_lq_sta *lq_sta, in rs_collect_tx_data() argument
700 struct lq_sta_pers *pers = &lq_sta->pers; in rs_collect_tx_data()
891 static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta, in rs_get_supported_rates() argument
895 return lq_sta->active_legacy_rate; in rs_get_supported_rates()
897 return lq_sta->active_siso_rate; in rs_get_supported_rates()
899 return lq_sta->active_mimo2_rate; in rs_get_supported_rates()
959 static inline bool rs_rate_supported(struct iwl_lq_sta *lq_sta, in rs_rate_supported() argument
962 return BIT(rate->index) & rs_get_supported_rates(lq_sta, rate); in rs_rate_supported()
968 static bool rs_get_lower_rate_in_column(struct iwl_lq_sta *lq_sta, in rs_get_lower_rate_in_column() argument
974 struct iwl_mvm *mvm = lq_sta->pers.drv; in rs_get_lower_rate_in_column()
976 rate_mask = rs_get_supported_rates(lq_sta, rate); in rs_get_lower_rate_in_column()
990 static void rs_get_lower_rate_down_column(struct iwl_lq_sta *lq_sta, in rs_get_lower_rate_down_column() argument
993 struct iwl_mvm *mvm = lq_sta->pers.drv; in rs_get_lower_rate_down_column()
1000 if (lq_sta->band == IEEE80211_BAND_5GHZ) in rs_get_lower_rate_down_column()
1024 if (!rs_rate_supported(lq_sta, rate)) in rs_get_lower_rate_down_column()
1025 rs_get_lower_rate_in_column(lq_sta, rate); in rs_get_lower_rate_down_column()
1130 struct iwl_lq_sta *lq_sta = &mvmsta->lq_sta; in iwl_mvm_rs_tx_status() local
1135 if (!lq_sta) { in iwl_mvm_rs_tx_status()
1138 } else if (!lq_sta->pers.drv) { in iwl_mvm_rs_tx_status()
1153 if (lq_sta->pers.dbg_fixed_rate) { in iwl_mvm_rs_tx_status()
1172 lq_sta->pers.tx_stats[column][index].total += attempts; in iwl_mvm_rs_tx_status()
1173 lq_sta->pers.tx_stats[column][index].success += success; in iwl_mvm_rs_tx_status()
1182 (unsigned long)(lq_sta->last_tx + in iwl_mvm_rs_tx_status()
1193 lq_sta->last_tx = jiffies; in iwl_mvm_rs_tx_status()
1202 table = &lq_sta->lq; in iwl_mvm_rs_tx_status()
1217 lq_sta->missed_rate_counter++; in iwl_mvm_rs_tx_status()
1218 if (lq_sta->missed_rate_counter > IWL_MVM_RS_MISSED_RATE_MAX) { in iwl_mvm_rs_tx_status()
1219 lq_sta->missed_rate_counter = 0; in iwl_mvm_rs_tx_status()
1222 lq_sta->rs_state); in iwl_mvm_rs_tx_status()
1223 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, false); in iwl_mvm_rs_tx_status()
1229 lq_sta->missed_rate_counter = 0; in iwl_mvm_rs_tx_status()
1231 if (!lq_sta->search_better_tbl) { in iwl_mvm_rs_tx_status()
1232 curr_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1233 other_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1235 curr_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1236 other_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1242 tmp_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1244 tmp_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in iwl_mvm_rs_tx_status()
1252 rs_stay_in_table(lq_sta, true); in iwl_mvm_rs_tx_status()
1271 rs_collect_tx_data(mvm, lq_sta, curr_tbl, lq_rate.index, in iwl_mvm_rs_tx_status()
1277 if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN) { in iwl_mvm_rs_tx_status()
1278 lq_sta->total_success += info->status.ampdu_ack_len; in iwl_mvm_rs_tx_status()
1279 lq_sta->total_failed += (info->status.ampdu_len - in iwl_mvm_rs_tx_status()
1307 rs_collect_tx_data(mvm, lq_sta, tmp_tbl, lq_rate.index, in iwl_mvm_rs_tx_status()
1313 if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN) { in iwl_mvm_rs_tx_status()
1314 lq_sta->total_success += legacy_success; in iwl_mvm_rs_tx_status()
1315 lq_sta->total_failed += retries + (1 - legacy_success); in iwl_mvm_rs_tx_status()
1319 lq_sta->last_rate_n_flags = lq_hwrate; in iwl_mvm_rs_tx_status()
1324 rs_rate_scale_perform(mvm, sta, lq_sta, tid); in iwl_mvm_rs_tx_status()
1359 struct iwl_lq_sta *lq_sta) in rs_set_stay_in_table() argument
1362 lq_sta->rs_state = RS_STATE_STAY_IN_COLUMN; in rs_set_stay_in_table()
1364 lq_sta->table_count_limit = IWL_MVM_RS_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1365 lq_sta->max_failure_limit = IWL_MVM_RS_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1366 lq_sta->max_success_limit = IWL_MVM_RS_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1368 lq_sta->table_count_limit = IWL_MVM_RS_NON_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1369 lq_sta->max_failure_limit = IWL_MVM_RS_NON_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1370 lq_sta->max_success_limit = IWL_MVM_RS_NON_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1372 lq_sta->table_count = 0; in rs_set_stay_in_table()
1373 lq_sta->total_failed = 0; in rs_set_stay_in_table()
1374 lq_sta->total_success = 0; in rs_set_stay_in_table()
1375 lq_sta->flush_timer = jiffies; in rs_set_stay_in_table()
1376 lq_sta->visited_columns = 0; in rs_set_stay_in_table()
1386 static int rs_get_max_allowed_rate(struct iwl_lq_sta *lq_sta, in rs_get_max_allowed_rate() argument
1391 return lq_sta->max_legacy_rate_idx; in rs_get_max_allowed_rate()
1393 return lq_sta->max_siso_rate_idx; in rs_get_max_allowed_rate()
1395 return lq_sta->max_mimo2_rate_idx; in rs_get_max_allowed_rate()
1400 return lq_sta->max_legacy_rate_idx; in rs_get_max_allowed_rate()
1403 static const u16 *rs_get_expected_tpt_table(struct iwl_lq_sta *lq_sta, in rs_get_expected_tpt_table() argument
1455 if (!column->sgi && !lq_sta->is_agg) /* Normal */ in rs_get_expected_tpt_table()
1457 else if (column->sgi && !lq_sta->is_agg) /* SGI */ in rs_get_expected_tpt_table()
1459 else if (!column->sgi && lq_sta->is_agg) /* AGG */ in rs_get_expected_tpt_table()
1465 static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta, in rs_set_expected_tpt_table() argument
1471 tbl->expected_tpt = rs_get_expected_tpt_table(lq_sta, column, rate->bw); in rs_set_expected_tpt_table()
1475 struct iwl_lq_sta *lq_sta, in rs_get_best_rate() argument
1480 &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_get_best_rate()
1494 target_tpt = lq_sta->last_tpt; in rs_get_best_rate()
1537 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search) in rs_stay_in_table() argument
1544 mvm = lq_sta->pers.drv; in rs_stay_in_table()
1545 active_tbl = lq_sta->active_tbl; in rs_stay_in_table()
1547 tbl = &(lq_sta->lq_info[active_tbl]); in rs_stay_in_table()
1550 if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN) { in rs_stay_in_table()
1552 if (lq_sta->flush_timer) in rs_stay_in_table()
1555 (unsigned long)(lq_sta->flush_timer + in rs_stay_in_table()
1567 (lq_sta->total_failed > lq_sta->max_failure_limit) || in rs_stay_in_table()
1568 (lq_sta->total_success > lq_sta->max_success_limit) || in rs_stay_in_table()
1569 ((!lq_sta->search_better_tbl) && in rs_stay_in_table()
1570 (lq_sta->flush_timer) && (flush_interval_passed))) { in rs_stay_in_table()
1573 lq_sta->total_failed, in rs_stay_in_table()
1574 lq_sta->total_success, in rs_stay_in_table()
1578 lq_sta->rs_state = RS_STATE_SEARCH_CYCLE_STARTED; in rs_stay_in_table()
1581 lq_sta->total_failed = 0; in rs_stay_in_table()
1582 lq_sta->total_success = 0; in rs_stay_in_table()
1583 lq_sta->flush_timer = 0; in rs_stay_in_table()
1585 lq_sta->visited_columns = BIT(tbl->column); in rs_stay_in_table()
1593 lq_sta->table_count++; in rs_stay_in_table()
1594 if (lq_sta->table_count >= in rs_stay_in_table()
1595 lq_sta->table_count_limit) { in rs_stay_in_table()
1596 lq_sta->table_count = 0; in rs_stay_in_table()
1607 if (lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED) { in rs_stay_in_table()
1618 struct iwl_lq_sta *lq_sta, in rs_update_rate_tbl() argument
1621 rs_fill_lq_cmd(mvm, sta, lq_sta, &tbl->rate); in rs_update_rate_tbl()
1622 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, false); in rs_update_rate_tbl()
1626 struct iwl_lq_sta *lq_sta, in rs_get_next_column() argument
1645 if (lq_sta->visited_columns & BIT(next_col_id)) { in rs_get_next_column()
1674 tpt = lq_sta->last_tpt / 100; in rs_get_next_column()
1675 expected_tpt_tbl = rs_get_expected_tpt_table(lq_sta, next_col, in rs_get_next_column()
1680 max_rate = rs_get_max_allowed_rate(lq_sta, next_col); in rs_get_next_column()
1709 struct iwl_lq_sta *lq_sta, in rs_switch_to_column() argument
1713 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_switch_to_column()
1715 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_switch_to_column()
1730 if (lq_sta->band == IEEE80211_BAND_5GHZ) in rs_switch_to_column()
1737 rate_mask = lq_sta->active_legacy_rate; in rs_switch_to_column()
1739 rate->type = lq_sta->is_vht ? LQ_VHT_SISO : LQ_HT_SISO; in rs_switch_to_column()
1740 rate_mask = lq_sta->active_siso_rate; in rs_switch_to_column()
1742 rate->type = lq_sta->is_vht ? LQ_VHT_MIMO2 : LQ_HT_MIMO2; in rs_switch_to_column()
1743 rate_mask = lq_sta->active_mimo2_rate; in rs_switch_to_column()
1750 rate->ldpc = lq_sta->ldpc; in rs_switch_to_column()
1754 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_switch_to_column()
1756 lq_sta->visited_columns |= BIT(col_id); in rs_switch_to_column()
1762 rate_idx = rs_get_best_rate(mvm, lq_sta, search_tbl, in rs_switch_to_column()
1873 struct iwl_lq_sta *lq_sta) in rs_stbc_allow() argument
1878 if (!lq_sta->stbc_capable) in rs_stbc_allow()
1999 struct iwl_lq_sta *lq_sta, in rs_tpc_perform() argument
2010 u8 cur = lq_sta->lq.reduced_tpc; in rs_tpc_perform()
2016 if (lq_sta->pers.dbg_fixed_txp_reduction <= TPC_MAX_REDUCTION) { in rs_tpc_perform()
2018 lq_sta->pers.dbg_fixed_txp_reduction); in rs_tpc_perform()
2019 lq_sta->lq.reduced_tpc = lq_sta->pers.dbg_fixed_txp_reduction; in rs_tpc_perform()
2020 return cur != lq_sta->pers.dbg_fixed_txp_reduction; in rs_tpc_perform()
2035 lq_sta->lq.reduced_tpc = TPC_NO_REDUCTION; in rs_tpc_perform()
2071 lq_sta->lq.reduced_tpc = weak; in rs_tpc_perform()
2074 lq_sta->lq.reduced_tpc = strong; in rs_tpc_perform()
2077 lq_sta->lq.reduced_tpc = TPC_NO_REDUCTION; in rs_tpc_perform()
2091 struct iwl_lq_sta *lq_sta, in rs_rate_scale_perform() argument
2110 u8 prev_agg = lq_sta->is_agg; in rs_rate_scale_perform()
2115 lq_sta->is_agg = !!sta_priv->agg_tids; in rs_rate_scale_perform()
2122 if (!lq_sta->search_better_tbl) in rs_rate_scale_perform()
2123 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2125 active_tbl = 1 - lq_sta->active_tbl; in rs_rate_scale_perform()
2127 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2130 if (prev_agg != lq_sta->is_agg) { in rs_rate_scale_perform()
2133 prev_agg, lq_sta->is_agg); in rs_rate_scale_perform()
2134 rs_set_expected_tpt_table(lq_sta, tbl); in rs_rate_scale_perform()
2139 index = lq_sta->last_txrate_idx; in rs_rate_scale_perform()
2142 rate_mask = rs_get_supported_rates(lq_sta, rate); in rs_rate_scale_perform()
2146 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2149 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2150 tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2151 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2185 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2198 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2202 if (window->average_tpt > lq_sta->last_tpt) { in rs_rate_scale_perform()
2208 lq_sta->last_tpt); in rs_rate_scale_perform()
2211 lq_sta->active_tbl = active_tbl; in rs_rate_scale_perform()
2220 lq_sta->last_tpt); in rs_rate_scale_perform()
2226 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2227 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2231 current_tpt = lq_sta->last_tpt; in rs_rate_scale_perform()
2239 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2274 rs_stay_in_table(lq_sta, true); in rs_rate_scale_perform()
2303 if (lq_sta->rs_state == RS_STATE_STAY_IN_COLUMN) in rs_rate_scale_perform()
2304 update_lq = rs_tpc_perform(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2314 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2317 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2326 lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_STARTED in rs_rate_scale_perform()
2331 lq_sta->last_tpt = current_tpt; in rs_rate_scale_perform()
2335 update_lq, done_search, lq_sta->rs_state, in rs_rate_scale_perform()
2338 next_column = rs_get_next_column(mvm, lq_sta, sta, tbl); in rs_rate_scale_perform()
2340 int ret = rs_switch_to_column(mvm, lq_sta, sta, in rs_rate_scale_perform()
2343 lq_sta->search_better_tbl = 1; in rs_rate_scale_perform()
2347 lq_sta->rs_state = RS_STATE_SEARCH_CYCLE_ENDED; in rs_rate_scale_perform()
2351 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2353 tbl = &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_rate_scale_perform()
2361 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2367 if (done_search && lq_sta->rs_state == RS_STATE_SEARCH_CYCLE_ENDED) { in rs_rate_scale_perform()
2373 tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2386 rs_set_stay_in_table(mvm, 1, lq_sta); in rs_rate_scale_perform()
2391 if ((lq_sta->last_tpt > IWL_AGG_TPT_THREHOLD) && in rs_rate_scale_perform()
2392 (lq_sta->tx_agg_tid_en & (1 << tid)) && in rs_rate_scale_perform()
2400 lq_sta, sta); in rs_rate_scale_perform()
2403 rs_set_stay_in_table(mvm, 0, lq_sta); in rs_rate_scale_perform()
2408 lq_sta->last_txrate_idx = index; in rs_rate_scale_perform()
2444 struct iwl_lq_sta *lq_sta, in rs_get_initial_rate() argument
2454 for (i = 0; i < ARRAY_SIZE(lq_sta->pers.chain_signal); i++) { in rs_get_initial_rate()
2455 if (!(lq_sta->pers.chains & BIT(i))) in rs_get_initial_rate()
2458 if (lq_sta->pers.chain_signal[i] > best_rssi) { in rs_get_initial_rate()
2459 best_rssi = lq_sta->pers.chain_signal[i]; in rs_get_initial_rate()
2476 rate->index = find_first_bit(&lq_sta->active_legacy_rate, in rs_get_initial_rate()
2493 (BIT(rate_idx) & lq_sta->active_legacy_rate)) { in rs_get_initial_rate()
2506 struct iwl_lq_sta *lq_sta, in rs_update_last_rssi() argument
2509 lq_sta->pers.chains = rx_status->chains; in rs_update_last_rssi()
2510 lq_sta->pers.chain_signal[0] = rx_status->chain_signal[0]; in rs_update_last_rssi()
2511 lq_sta->pers.chain_signal[1] = rx_status->chain_signal[1]; in rs_update_last_rssi()
2512 lq_sta->pers.chain_signal[2] = rx_status->chain_signal[2]; in rs_update_last_rssi()
2531 struct iwl_lq_sta *lq_sta, in rs_initialize_lq() argument
2539 if (!sta || !lq_sta) in rs_initialize_lq()
2542 if (!lq_sta->search_better_tbl) in rs_initialize_lq()
2543 active_tbl = lq_sta->active_tbl; in rs_initialize_lq()
2545 active_tbl = 1 - lq_sta->active_tbl; in rs_initialize_lq()
2547 tbl = &(lq_sta->lq_info[active_tbl]); in rs_initialize_lq()
2550 rs_get_initial_rate(mvm, lq_sta, band, rate); in rs_initialize_lq()
2551 lq_sta->last_txrate_idx = rate->index; in rs_initialize_lq()
2559 rs_set_expected_tpt_table(lq_sta, tbl); in rs_initialize_lq()
2560 rs_fill_lq_cmd(mvm, sta, lq_sta, rate); in rs_initialize_lq()
2562 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, init); in rs_initialize_lq()
2573 struct iwl_lq_sta *lq_sta = mvm_sta; in rs_get_rate() local
2586 if (lq_sta && !lq_sta->pers.drv) { in rs_get_rate()
2595 iwl_mvm_hwrate_to_tx_rate(lq_sta->last_rate_n_flags, in rs_get_rate()
2607 struct iwl_lq_sta *lq_sta = &sta_priv->lq_sta; in rs_alloc_sta() local
2611 lq_sta->pers.drv = mvm; in rs_alloc_sta()
2613 lq_sta->pers.dbg_fixed_rate = 0; in rs_alloc_sta()
2614 lq_sta->pers.dbg_fixed_txp_reduction = TPC_INVALID; in rs_alloc_sta()
2615 lq_sta->pers.ss_force = RS_SS_FORCE_NONE; in rs_alloc_sta()
2617 lq_sta->pers.chains = 0; in rs_alloc_sta()
2618 memset(lq_sta->pers.chain_signal, 0, sizeof(lq_sta->pers.chain_signal)); in rs_alloc_sta()
2620 return &sta_priv->lq_sta; in rs_alloc_sta()
2643 struct iwl_lq_sta *lq_sta) in rs_vht_set_enabled_rates() argument
2658 lq_sta->active_siso_rate |= BIT(i); in rs_vht_set_enabled_rates()
2676 lq_sta->active_mimo2_rate |= BIT(i); in rs_vht_set_enabled_rates()
2683 struct iwl_lq_sta *lq_sta, in rs_ht_init() argument
2690 lq_sta->active_siso_rate = ht_cap->mcs.rx_mask[0] << 1; in rs_ht_init()
2691 lq_sta->active_siso_rate |= ht_cap->mcs.rx_mask[0] & 0x1; in rs_ht_init()
2692 lq_sta->active_siso_rate &= ~((u16)0x2); in rs_ht_init()
2693 lq_sta->active_siso_rate <<= IWL_FIRST_OFDM_RATE; in rs_ht_init()
2695 lq_sta->active_mimo2_rate = ht_cap->mcs.rx_mask[1] << 1; in rs_ht_init()
2696 lq_sta->active_mimo2_rate |= ht_cap->mcs.rx_mask[1] & 0x1; in rs_ht_init()
2697 lq_sta->active_mimo2_rate &= ~((u16)0x2); in rs_ht_init()
2698 lq_sta->active_mimo2_rate <<= IWL_FIRST_OFDM_RATE; in rs_ht_init()
2702 lq_sta->ldpc = true; in rs_ht_init()
2707 lq_sta->stbc_capable = true; in rs_ht_init()
2709 lq_sta->is_vht = false; in rs_ht_init()
2714 struct iwl_lq_sta *lq_sta, in rs_vht_init() argument
2717 rs_vht_set_enabled_rates(sta, vht_cap, lq_sta); in rs_vht_init()
2721 lq_sta->ldpc = true; in rs_vht_init()
2726 lq_sta->stbc_capable = true; in rs_vht_init()
2731 lq_sta->bfer_capable = true; in rs_vht_init()
2733 lq_sta->is_vht = true; in rs_vht_init()
2812 struct iwl_lq_sta *lq_sta = &sta_priv->lq_sta; in iwl_mvm_rs_rate_init() local
2817 memset(lq_sta, 0, offsetof(typeof(*lq_sta), pers)); in iwl_mvm_rs_rate_init()
2821 lq_sta->lq.sta_id = sta_priv->sta_id; in iwl_mvm_rs_rate_init()
2824 rs_rate_scale_clear_tbl_windows(mvm, &lq_sta->lq_info[j]); in iwl_mvm_rs_rate_init()
2826 lq_sta->flush_timer = 0; in iwl_mvm_rs_rate_init()
2827 lq_sta->last_tx = jiffies; in iwl_mvm_rs_rate_init()
2837 lq_sta->missed_rate_counter = IWL_MVM_RS_MISSED_RATE_MAX; in iwl_mvm_rs_rate_init()
2838 lq_sta->band = sband->band; in iwl_mvm_rs_rate_init()
2843 lq_sta->active_legacy_rate = 0; in iwl_mvm_rs_rate_init()
2845 lq_sta->active_legacy_rate |= BIT(sband->bitrates[i].hw_value); in iwl_mvm_rs_rate_init()
2849 rs_ht_init(mvm, sta, lq_sta, ht_cap); in iwl_mvm_rs_rate_init()
2851 rs_vht_init(mvm, sta, lq_sta, vht_cap); in iwl_mvm_rs_rate_init()
2854 lq_sta->active_mimo2_rate = 0; in iwl_mvm_rs_rate_init()
2856 lq_sta->max_legacy_rate_idx = in iwl_mvm_rs_rate_init()
2857 rs_get_max_rate_from_mask(lq_sta->active_legacy_rate); in iwl_mvm_rs_rate_init()
2858 lq_sta->max_siso_rate_idx = in iwl_mvm_rs_rate_init()
2859 rs_get_max_rate_from_mask(lq_sta->active_siso_rate); in iwl_mvm_rs_rate_init()
2860 lq_sta->max_mimo2_rate_idx = in iwl_mvm_rs_rate_init()
2861 rs_get_max_rate_from_mask(lq_sta->active_mimo2_rate); in iwl_mvm_rs_rate_init()
2865 lq_sta->active_legacy_rate, in iwl_mvm_rs_rate_init()
2866 lq_sta->active_siso_rate, in iwl_mvm_rs_rate_init()
2867 lq_sta->active_mimo2_rate, in iwl_mvm_rs_rate_init()
2868 lq_sta->is_vht, lq_sta->ldpc, lq_sta->stbc_capable, in iwl_mvm_rs_rate_init()
2869 lq_sta->bfer_capable); in iwl_mvm_rs_rate_init()
2871 lq_sta->max_legacy_rate_idx, in iwl_mvm_rs_rate_init()
2872 lq_sta->max_siso_rate_idx, in iwl_mvm_rs_rate_init()
2873 lq_sta->max_mimo2_rate_idx); in iwl_mvm_rs_rate_init()
2876 lq_sta->lq.single_stream_ant_msk = in iwl_mvm_rs_rate_init()
2878 lq_sta->lq.dual_stream_ant_msk = ANT_AB; in iwl_mvm_rs_rate_init()
2881 lq_sta->tx_agg_tid_en = IWL_AGG_ALL_TID; in iwl_mvm_rs_rate_init()
2882 lq_sta->is_agg = 0; in iwl_mvm_rs_rate_init()
2886 rs_initialize_lq(mvm, sta, lq_sta, band, init); in iwl_mvm_rs_rate_init()
2942 struct iwl_lq_sta *lq_sta, in rs_fill_rates_for_column() argument
2965 bottom_reached = rs_get_lower_rate_in_column(lq_sta, rate); in rs_fill_rates_for_column()
2998 struct iwl_lq_sta *lq_sta, in rs_build_rates_table() argument
3004 struct iwl_lq_cmd *lq_cmd = &lq_sta->lq; in rs_build_rates_table()
3013 rs_stbc_allow(mvm, sta, lq_sta)) in rs_build_rates_table()
3028 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3032 rs_get_lower_rate_down_column(lq_sta, &rate); in rs_build_rates_table()
3047 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3051 rs_get_lower_rate_down_column(lq_sta, &rate); in rs_build_rates_table()
3056 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3072 struct iwl_lq_cmd *lq_cmd = &mvmsta->lq_sta.lq; in rs_bfer_active_iter()
3126 struct iwl_lq_sta *lq_sta, in rs_set_lq_ss_params() argument
3129 struct iwl_lq_cmd *lq_cmd = &lq_sta->lq; in rs_set_lq_ss_params()
3145 if (lq_sta->pers.ss_force == RS_SS_FORCE_STBC) in rs_set_lq_ss_params()
3147 else if (lq_sta->pers.ss_force == RS_SS_FORCE_BFER) in rs_set_lq_ss_params()
3150 if (lq_sta->pers.ss_force != RS_SS_FORCE_NONE) { in rs_set_lq_ss_params()
3152 lq_sta->pers.ss_force); in rs_set_lq_ss_params()
3157 if (lq_sta->stbc_capable) in rs_set_lq_ss_params()
3160 if (!lq_sta->bfer_capable) in rs_set_lq_ss_params()
3184 struct iwl_lq_cmd *bfersta_lq_cmd = &bfer_mvmsta->lq_sta.lq; in rs_set_lq_ss_params()
3202 struct iwl_lq_sta *lq_sta, in rs_fill_lq_cmd() argument
3205 struct iwl_lq_cmd *lq_cmd = &lq_sta->lq; in rs_fill_lq_cmd()
3214 if (lq_sta->pers.dbg_fixed_rate) { in rs_fill_lq_cmd()
3216 lq_sta->band, in rs_fill_lq_cmd()
3217 lq_sta->pers.dbg_fixed_rate); in rs_fill_lq_cmd()
3224 rs_build_rates_table(mvm, sta, lq_sta, initial_rate); in rs_fill_lq_cmd()
3227 rs_set_lq_ss_params(mvm, sta, lq_sta, initial_rate); in rs_fill_lq_cmd()
3344 struct iwl_lq_sta *lq_sta) in rs_program_fix_rate() argument
3346 lq_sta->active_legacy_rate = 0x0FFF; /* 1 - 54 MBits, includes CCK */ in rs_program_fix_rate()
3347 lq_sta->active_siso_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
3348 lq_sta->active_mimo2_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
3351 lq_sta->lq.sta_id, lq_sta->pers.dbg_fixed_rate); in rs_program_fix_rate()
3353 if (lq_sta->pers.dbg_fixed_rate) { in rs_program_fix_rate()
3354 rs_fill_lq_cmd(mvm, NULL, lq_sta, NULL); in rs_program_fix_rate()
3355 iwl_mvm_send_lq_cmd(lq_sta->pers.drv, &lq_sta->lq, false); in rs_program_fix_rate()
3362 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_write() local
3368 mvm = lq_sta->pers.drv; in rs_sta_dbgfs_scale_table_write()
3375 lq_sta->pers.dbg_fixed_rate = parsed_rate; in rs_sta_dbgfs_scale_table_write()
3377 lq_sta->pers.dbg_fixed_rate = 0; in rs_sta_dbgfs_scale_table_write()
3379 rs_program_fix_rate(mvm, lq_sta); in rs_sta_dbgfs_scale_table_write()
3392 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_read() local
3394 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_sta_dbgfs_scale_table_read()
3397 mvm = lq_sta->pers.drv; in rs_sta_dbgfs_scale_table_read()
3402 desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); in rs_sta_dbgfs_scale_table_read()
3404 lq_sta->total_failed, lq_sta->total_success, in rs_sta_dbgfs_scale_table_read()
3405 lq_sta->active_legacy_rate); in rs_sta_dbgfs_scale_table_read()
3407 lq_sta->pers.dbg_fixed_rate); in rs_sta_dbgfs_scale_table_read()
3425 (lq_sta->is_agg) ? "AGG on" : ""); in rs_sta_dbgfs_scale_table_read()
3428 lq_sta->last_rate_n_flags); in rs_sta_dbgfs_scale_table_read()
3431 lq_sta->lq.flags, in rs_sta_dbgfs_scale_table_read()
3432 lq_sta->lq.mimo_delim, in rs_sta_dbgfs_scale_table_read()
3433 lq_sta->lq.single_stream_ant_msk, in rs_sta_dbgfs_scale_table_read()
3434 lq_sta->lq.dual_stream_ant_msk); in rs_sta_dbgfs_scale_table_read()
3438 le16_to_cpu(lq_sta->lq.agg_time_limit), in rs_sta_dbgfs_scale_table_read()
3439 lq_sta->lq.agg_disable_start_th, in rs_sta_dbgfs_scale_table_read()
3440 lq_sta->lq.agg_frame_cnt_limit); in rs_sta_dbgfs_scale_table_read()
3442 desc += sprintf(buff+desc, "reduced tpc=%d\n", lq_sta->lq.reduced_tpc); in rs_sta_dbgfs_scale_table_read()
3443 ss_params = le32_to_cpu(lq_sta->lq.ss_params); in rs_sta_dbgfs_scale_table_read()
3455 lq_sta->lq.initial_rate_index[0], in rs_sta_dbgfs_scale_table_read()
3456 lq_sta->lq.initial_rate_index[1], in rs_sta_dbgfs_scale_table_read()
3457 lq_sta->lq.initial_rate_index[2], in rs_sta_dbgfs_scale_table_read()
3458 lq_sta->lq.initial_rate_index[3]); in rs_sta_dbgfs_scale_table_read()
3461 u32 r = le32_to_cpu(lq_sta->lq.rs_table[i]); in rs_sta_dbgfs_scale_table_read()
3487 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_stats_table_read() local
3494 tbl = &(lq_sta->lq_info[i]); in rs_sta_dbgfs_stats_table_read()
3499 lq_sta->active_tbl == i ? "*" : "x", in rs_sta_dbgfs_stats_table_read()
3561 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_drv_tx_stats_read() local
3582 stats = &(lq_sta->pers.tx_stats[col][rate]); in rs_sta_dbgfs_drv_tx_stats_read()
3600 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_drv_tx_stats_write() local
3601 memset(lq_sta->pers.tx_stats, 0, sizeof(lq_sta->pers.tx_stats)); in rs_sta_dbgfs_drv_tx_stats_write()
3617 struct iwl_lq_sta *lq_sta = file->private_data; in iwl_dbgfs_ss_force_read() local
3629 ss_force_name[lq_sta->pers.ss_force]); in iwl_dbgfs_ss_force_read()
3633 static ssize_t iwl_dbgfs_ss_force_write(struct iwl_lq_sta *lq_sta, char *buf, in iwl_dbgfs_ss_force_write() argument
3636 struct iwl_mvm *mvm = lq_sta->pers.drv; in iwl_dbgfs_ss_force_write()
3640 lq_sta->pers.ss_force = RS_SS_FORCE_NONE; in iwl_dbgfs_ss_force_write()
3642 lq_sta->pers.ss_force = RS_SS_FORCE_SISO; in iwl_dbgfs_ss_force_write()
3644 if (lq_sta->stbc_capable) { in iwl_dbgfs_ss_force_write()
3645 lq_sta->pers.ss_force = RS_SS_FORCE_STBC; in iwl_dbgfs_ss_force_write()
3652 if (lq_sta->bfer_capable) { in iwl_dbgfs_ss_force_write()
3653 lq_sta->pers.ss_force = RS_SS_FORCE_BFER; in iwl_dbgfs_ss_force_write()
3669 if (!debugfs_create_file(#name, mode, parent, lq_sta, \
3678 struct iwl_lq_sta *lq_sta = priv_sta; in rs_add_debugfs() local
3681 mvmsta = container_of(lq_sta, struct iwl_mvm_sta, lq_sta); in rs_add_debugfs()
3687 lq_sta, &rs_sta_dbgfs_scale_table_ops); in rs_add_debugfs()
3689 lq_sta, &rs_sta_dbgfs_stats_table_ops); in rs_add_debugfs()
3691 lq_sta, &rs_sta_dbgfs_drv_tx_stats_ops); in rs_add_debugfs()
3693 &lq_sta->tx_agg_tid_en); in rs_add_debugfs()
3695 &lq_sta->pers.dbg_fixed_txp_reduction); in rs_add_debugfs()
3756 struct iwl_lq_cmd *lq = &mvmsta->lq_sta.lq; in iwl_mvm_tx_protection()