Lines Matching refs:mvm
139 typedef bool (*allow_column_func_t) (struct iwl_mvm *mvm,
152 static bool rs_ant_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in rs_ant_allow() argument
156 return iwl_mvm_bt_coex_is_ant_avail(mvm, next_col->ant); in rs_ant_allow()
159 static bool rs_mimo_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in rs_mimo_allow() argument
172 if (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) < 2) in rs_mimo_allow()
175 if (!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta)) in rs_mimo_allow()
181 if (mvm->nvm_data->sku_cap_mimo_disabled) in rs_mimo_allow()
187 static bool rs_siso_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in rs_siso_allow() argument
197 static bool rs_sgi_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in rs_sgi_allow() argument
398 static void rs_rate_scale_perform(struct iwl_mvm *mvm,
402 static void rs_fill_lq_cmd(struct iwl_mvm *mvm,
567 static inline void rs_dump_rate(struct iwl_mvm *mvm, const struct rs_rate *rate, in rs_dump_rate() argument
570 IWL_DEBUG_RATE(mvm, in rs_dump_rate()
585 static void rs_rate_scale_clear_tbl_windows(struct iwl_mvm *mvm, in rs_rate_scale_clear_tbl_windows() argument
590 IWL_DEBUG_RATE(mvm, "Clearing up window stats\n"); in rs_rate_scale_clear_tbl_windows()
603 static int rs_tl_turn_on_agg_for_tid(struct iwl_mvm *mvm, in rs_tl_turn_on_agg_for_tid() argument
609 IWL_DEBUG_HT(mvm, "Starting Tx agg: STA: %pM tid: %d\n", in rs_tl_turn_on_agg_for_tid()
618 IWL_ERR(mvm, "Fail start Tx agg on tid: %d\n", in rs_tl_turn_on_agg_for_tid()
625 static void rs_tl_turn_on_agg(struct iwl_mvm *mvm, u8 tid, in rs_tl_turn_on_agg() argument
630 rs_tl_turn_on_agg_for_tid(mvm, lq_data, tid, sta); in rs_tl_turn_on_agg()
632 IWL_ERR(mvm, "tid exceeds max TID count: %d/%d\n", in rs_tl_turn_on_agg()
661 static int _rs_collect_tx_data(struct iwl_mvm *mvm, in _rs_collect_tx_data() argument
726 static int rs_collect_tx_data(struct iwl_mvm *mvm, in rs_collect_tx_data() argument
748 ret = _rs_collect_tx_data(mvm, tbl, scale_index, attempts, successes, in rs_collect_tx_data()
757 return _rs_collect_tx_data(mvm, tbl, scale_index, attempts, successes, in rs_collect_tx_data()
762 static u32 ucode_rate_from_rs_rate(struct iwl_mvm *mvm, in ucode_rate_from_rs_rate() argument
780 IWL_ERR(mvm, "Invalid HT rate index %d\n", index); in ucode_rate_from_rs_rate()
793 IWL_ERR(mvm, "Invalid VHT rate index %d\n", index); in ucode_rate_from_rs_rate()
805 IWL_ERR(mvm, "Invalid rate->type %d\n", rate->type); in ucode_rate_from_rs_rate()
944 static u16 rs_get_adjacent_rate(struct iwl_mvm *mvm, u8 index, u16 rate_mask, in rs_get_adjacent_rate() argument
1013 struct iwl_mvm *mvm = lq_sta->pers.drv; in rs_get_lower_rate_in_column() local
1016 high_low = rs_get_adjacent_rate(mvm, rate->index, rate_mask, in rs_get_lower_rate_in_column()
1032 struct iwl_mvm *mvm = lq_sta->pers.drv; in rs_get_lower_rate_down_column() local
1058 rate->ant = first_antenna(iwl_mvm_get_valid_tx_ant(mvm)); in rs_get_lower_rate_down_column()
1156 void iwl_mvm_rs_tx_status(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in iwl_mvm_rs_tx_status() argument
1170 bool allow_ant_mismatch = fw_has_api(&mvm->fw->ucode_capa, in iwl_mvm_rs_tx_status()
1175 IWL_DEBUG_RATE(mvm, "Station rate scaling not created yet.\n"); in iwl_mvm_rs_tx_status()
1178 IWL_DEBUG_RATE(mvm, "Rate scaling not initialized yet.\n"); in iwl_mvm_rs_tx_status()
1214 IWL_DEBUG_RATE(mvm, "Fixed rate 0x%x success %d attempts %d\n", in iwl_mvm_rs_tx_status()
1225 IWL_DEBUG_RATE(mvm, "Tx idle for too long. reinit rs\n"); in iwl_mvm_rs_tx_status()
1229 iwl_mvm_rs_rate_init(mvm, sta, info->band, false); in iwl_mvm_rs_tx_status()
1247 IWL_DEBUG_RATE(mvm, in iwl_mvm_rs_tx_status()
1259 IWL_DEBUG_RATE(mvm, in iwl_mvm_rs_tx_status()
1262 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, false); in iwl_mvm_rs_tx_status()
1279 IWL_DEBUG_RATE(mvm, in iwl_mvm_rs_tx_status()
1282 rs_dump_rate(mvm, &tmp_tbl->rate, "ACTIVE"); in iwl_mvm_rs_tx_status()
1284 rs_dump_rate(mvm, &tmp_tbl->rate, "SEARCH"); in iwl_mvm_rs_tx_status()
1285 rs_dump_rate(mvm, &lq_rate, "ACTUAL"); in iwl_mvm_rs_tx_status()
1310 rs_collect_tx_data(mvm, lq_sta, curr_tbl, lq_rate.index, in iwl_mvm_rs_tx_status()
1346 rs_collect_tx_data(mvm, lq_sta, tmp_tbl, lq_rate.index, in iwl_mvm_rs_tx_status()
1359 IWL_DEBUG_RATE(mvm, "reduced txpower: %d\n", reduced_txp); in iwl_mvm_rs_tx_status()
1363 rs_rate_scale_perform(mvm, sta, lq_sta, tid); in iwl_mvm_rs_tx_status()
1376 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in rs_mac80211_tx_status() local
1386 iwl_mvm_rs_tx_status(mvm, sta, rs_get_tid(hdr), info); in rs_mac80211_tx_status()
1397 static void rs_set_stay_in_table(struct iwl_mvm *mvm, u8 is_legacy, in rs_set_stay_in_table() argument
1400 IWL_DEBUG_RATE(mvm, "Moving to RS_STATE_STAY_IN_COLUMN\n"); in rs_set_stay_in_table()
1513 static s32 rs_get_best_rate(struct iwl_mvm *mvm, in rs_get_best_rate() argument
1529 IWL_DEBUG_RATE(mvm, in rs_get_best_rate()
1534 IWL_DEBUG_RATE(mvm, in rs_get_best_rate()
1545 high_low = rs_get_adjacent_rate(mvm, rate_idx, rate_mask, in rs_get_best_rate()
1551 IWL_DEBUG_RATE(mvm, "Best rate found %d target_tp %d expected_new %d\n", in rs_get_best_rate()
1581 struct iwl_mvm *mvm; in rs_stay_in_table() local
1583 mvm = lq_sta->pers.drv; in rs_stay_in_table()
1610 IWL_DEBUG_RATE(mvm, in rs_stay_in_table()
1618 IWL_DEBUG_RATE(mvm, in rs_stay_in_table()
1637 IWL_DEBUG_RATE(mvm, in rs_stay_in_table()
1639 rs_rate_scale_clear_tbl_windows(mvm, tbl); in rs_stay_in_table()
1647 rs_rate_scale_clear_tbl_windows(mvm, tbl); in rs_stay_in_table()
1655 static void rs_update_rate_tbl(struct iwl_mvm *mvm, in rs_update_rate_tbl() argument
1660 rs_fill_lq_cmd(mvm, sta, lq_sta, &tbl->rate); in rs_update_rate_tbl()
1661 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, false); in rs_update_rate_tbl()
1664 static bool rs_tweak_rate_tbl(struct iwl_mvm *mvm, in rs_tweak_rate_tbl() argument
1681 IWL_DEBUG_RATE(mvm, "Switch 80Mhz SISO MCS0 -> 20Mhz MCS4\n"); in rs_tweak_rate_tbl()
1697 IWL_DEBUG_RATE(mvm, "Switch 20Mhz SISO MCS5 -> 80Mhz MCS1\n"); in rs_tweak_rate_tbl()
1705 rs_rate_scale_clear_tbl_windows(mvm, tbl); in rs_tweak_rate_tbl()
1709 static enum rs_column rs_get_next_column(struct iwl_mvm *mvm, in rs_get_next_column() argument
1719 u8 valid_ants = iwl_mvm_get_valid_tx_ant(mvm); in rs_get_next_column()
1730 IWL_DEBUG_RATE(mvm, "Skip already visited column %d\n", in rs_get_next_column()
1738 IWL_DEBUG_RATE(mvm, in rs_get_next_column()
1746 if (allow_func && !allow_func(mvm, sta, &tbl->rate, in rs_get_next_column()
1752 IWL_DEBUG_RATE(mvm, in rs_get_next_column()
1767 IWL_DEBUG_RATE(mvm, in rs_get_next_column()
1775 IWL_DEBUG_RATE(mvm, in rs_get_next_column()
1781 IWL_DEBUG_RATE(mvm, in rs_get_next_column()
1793 static int rs_switch_to_column(struct iwl_mvm *mvm, in rs_switch_to_column() argument
1847 rate_idx = rs_get_best_rate(mvm, lq_sta, search_tbl, in rs_switch_to_column()
1852 IWL_DEBUG_RATE(mvm, in rs_switch_to_column()
1863 IWL_DEBUG_RATE(mvm, "Switched to column %d: Index %d\n", in rs_switch_to_column()
1873 static enum rs_action rs_get_rate_action(struct iwl_mvm *mvm, in rs_get_rate_action() argument
1883 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1891 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1900 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1907 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1916 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1923 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1931 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1937 IWL_DEBUG_RATE(mvm, "Maintain rate\n"); in rs_get_rate_action()
1942 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1946 IWL_DEBUG_RATE(mvm, in rs_get_rate_action()
1950 IWL_DEBUG_RATE(mvm, "Decrease rate\n"); in rs_get_rate_action()
1957 static bool rs_stbc_allow(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in rs_stbc_allow() argument
1966 if (!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta)) in rs_stbc_allow()
1972 static void rs_get_adjacent_txp(struct iwl_mvm *mvm, int index, in rs_get_adjacent_txp() argument
1984 static bool rs_tpc_allowed(struct iwl_mvm *mvm, struct ieee80211_vif *vif, in rs_tpc_allowed() argument
1992 IWL_DEBUG_RATE(mvm, "cam: %d sta_ps_disabled %d\n", in rs_tpc_allowed()
1999 !iwl_mvm_bt_coex_is_tpc_allowed(mvm, band)) in rs_tpc_allowed()
2002 IWL_DEBUG_RATE(mvm, "check rate, table type: %d\n", rate->type); in rs_tpc_allowed()
2023 static enum tpc_action rs_get_tpc_action(struct iwl_mvm *mvm, in rs_get_tpc_action() argument
2030 IWL_DEBUG_RATE(mvm, "no current tpt. stay.\n"); in rs_get_tpc_action()
2037 IWL_DEBUG_RATE(mvm, "increase txp because of weak SR\n"); in rs_get_tpc_action()
2046 IWL_DEBUG_RATE(mvm, in rs_get_tpc_action()
2052 IWL_DEBUG_RATE(mvm, in rs_get_tpc_action()
2064 IWL_DEBUG_RATE(mvm, in rs_get_tpc_action()
2072 IWL_DEBUG_RATE(mvm, in rs_get_tpc_action()
2078 IWL_DEBUG_RATE(mvm, "no need to increase or decrease txp - stay\n"); in rs_get_tpc_action()
2082 static bool rs_tpc_perform(struct iwl_mvm *mvm, in rs_tpc_perform() argument
2102 IWL_DEBUG_RATE(mvm, "fixed tpc: %d\n", in rs_tpc_perform()
2117 if (!rs_tpc_allowed(mvm, vif, rate, band)) { in rs_tpc_perform()
2118 IWL_DEBUG_RATE(mvm, in rs_tpc_perform()
2124 rs_get_adjacent_txp(mvm, cur, &weak, &strong); in rs_tpc_perform()
2135 IWL_DEBUG_RATE(mvm, in rs_tpc_perform()
2140 action = rs_get_tpc_action(mvm, sr, weak, strong, in rs_tpc_perform()
2145 IWL_DEBUG_RATE(mvm, "already in lowest txp, stay\n"); in rs_tpc_perform()
2150 IWL_DEBUG_RATE(mvm, "already in highest txp, stay\n"); in rs_tpc_perform()
2174 static void rs_rate_scale_perform(struct iwl_mvm *mvm, in rs_rate_scale_perform() argument
2216 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2220 rs_rate_scale_clear_tbl_windows(mvm, tbl); in rs_rate_scale_perform()
2230 IWL_ERR(mvm, "Current Rate is not valid\n"); in rs_rate_scale_perform()
2236 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2243 IWL_ERR(mvm, "tbl->expected_tpt is NULL\n"); in rs_rate_scale_perform()
2260 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2281 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2293 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2324 high_low = rs_get_adjacent_rate(mvm, index, rate_mask, rate->type); in rs_rate_scale_perform()
2339 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2344 scale_action = rs_get_rate_action(mvm, tbl, sr, low, high, in rs_rate_scale_perform()
2349 !iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta)) { in rs_rate_scale_perform()
2350 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2363 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2374 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2382 update_lq = rs_tpc_perform(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2393 rs_tweak_rate_tbl(mvm, sta, lq_sta, tbl, scale_action); in rs_rate_scale_perform()
2394 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2413 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2418 next_column = rs_get_next_column(mvm, lq_sta, sta, tbl); in rs_rate_scale_perform()
2420 int ret = rs_switch_to_column(mvm, lq_sta, sta, in rs_rate_scale_perform()
2425 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2434 rs_rate_scale_clear_tbl_windows(mvm, tbl); in rs_rate_scale_perform()
2439 rs_dump_rate(mvm, &tbl->rate, in rs_rate_scale_perform()
2441 rs_update_rate_tbl(mvm, sta, lq_sta, tbl); in rs_rate_scale_perform()
2455 IWL_DEBUG_RATE(mvm, "LQ: STAY in legacy table\n"); in rs_rate_scale_perform()
2460 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2466 rs_set_stay_in_table(mvm, 1, lq_sta); in rs_rate_scale_perform()
2476 IWL_DEBUG_RATE(mvm, in rs_rate_scale_perform()
2479 rs_tl_turn_on_agg(mvm, tid, in rs_rate_scale_perform()
2483 rs_set_stay_in_table(mvm, 0, lq_sta); in rs_rate_scale_perform()
2557 static void rs_init_optimal_rate(struct iwl_mvm *mvm, in rs_init_optimal_rate() argument
2573 rate->sgi = rs_sgi_allow(mvm, sta, rate, NULL); in rs_init_optimal_rate()
2612 static struct rs_rate *rs_get_optimal_rate(struct iwl_mvm *mvm, in rs_get_optimal_rate() argument
2637 static void rs_get_initial_rate(struct iwl_mvm *mvm, in rs_get_initial_rate() argument
2645 u8 valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm); in rs_get_initial_rate()
2658 IWL_DEBUG_RATE(mvm, "Best ANT: %s Best RSSI: %d\n", in rs_get_initial_rate()
2694 IWL_DEBUG_RATE(mvm, "rate_idx %d ANT %s\n", rate->index, in rs_get_initial_rate()
2699 void rs_update_last_rssi(struct iwl_mvm *mvm, in rs_update_last_rssi() argument
2734 static void rs_initialize_lq(struct iwl_mvm *mvm, in rs_initialize_lq() argument
2755 rs_get_initial_rate(mvm, lq_sta, band, rate); in rs_initialize_lq()
2756 rs_init_optimal_rate(mvm, sta, lq_sta); in rs_initialize_lq()
2765 rs_fill_lq_cmd(mvm, sta, lq_sta, rate); in rs_initialize_lq()
2767 iwl_mvm_send_lq_cmd(mvm, &lq_sta->lq, init); in rs_initialize_lq()
2776 struct iwl_mvm *mvm __maybe_unused = IWL_OP_MODE_GET_MVM(op_mode); in rs_get_rate()
2794 IWL_DEBUG_RATE(mvm, "Rate scaling not initialized yet.\n"); in rs_get_rate()
2810 optimal_rate = rs_get_optimal_rate(mvm, lq_sta); in rs_get_rate()
2811 last_ucode_rate = ucode_rate_from_rs_rate(mvm, in rs_get_rate()
2823 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in rs_alloc_sta() local
2826 IWL_DEBUG_RATE(mvm, "create station rate scale window\n"); in rs_alloc_sta()
2828 lq_sta->pers.drv = mvm; in rs_alloc_sta()
2899 static void rs_ht_init(struct iwl_mvm *mvm, in rs_ht_init() argument
2918 if (mvm->cfg->ht_params->ldpc && in rs_ht_init()
2922 if (mvm->cfg->ht_params->stbc && in rs_ht_init()
2923 (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) && in rs_ht_init()
2930 static void rs_vht_init(struct iwl_mvm *mvm, in rs_vht_init() argument
2937 if (mvm->cfg->ht_params->ldpc && in rs_vht_init()
2941 if (mvm->cfg->ht_params->stbc && in rs_vht_init()
2942 (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) && in rs_vht_init()
2946 if (fw_has_capa(&mvm->fw->ucode_capa, IWL_UCODE_TLV_CAPA_BEAMFORMER) && in rs_vht_init()
2947 (num_of_ant(iwl_mvm_get_valid_tx_ant(mvm)) > 1) && in rs_vht_init()
2955 static void iwl_mvm_reset_frame_stats(struct iwl_mvm *mvm) in iwl_mvm_reset_frame_stats() argument
2957 spin_lock_bh(&mvm->drv_stats_lock); in iwl_mvm_reset_frame_stats()
2958 memset(&mvm->drv_rx_stats, 0, sizeof(mvm->drv_rx_stats)); in iwl_mvm_reset_frame_stats()
2959 spin_unlock_bh(&mvm->drv_stats_lock); in iwl_mvm_reset_frame_stats()
2962 void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg) in iwl_mvm_update_frame_stats() argument
2966 spin_lock(&mvm->drv_stats_lock); in iwl_mvm_update_frame_stats()
2969 mvm->drv_rx_stats.agg_frames++; in iwl_mvm_update_frame_stats()
2971 mvm->drv_rx_stats.success_frames++; in iwl_mvm_update_frame_stats()
2975 mvm->drv_rx_stats.bw_20_frames++; in iwl_mvm_update_frame_stats()
2978 mvm->drv_rx_stats.bw_40_frames++; in iwl_mvm_update_frame_stats()
2981 mvm->drv_rx_stats.bw_80_frames++; in iwl_mvm_update_frame_stats()
2988 mvm->drv_rx_stats.ht_frames++; in iwl_mvm_update_frame_stats()
2992 mvm->drv_rx_stats.vht_frames++; in iwl_mvm_update_frame_stats()
2997 mvm->drv_rx_stats.legacy_frames++; in iwl_mvm_update_frame_stats()
3001 mvm->drv_rx_stats.siso_frames++; in iwl_mvm_update_frame_stats()
3003 mvm->drv_rx_stats.mimo2_frames++; in iwl_mvm_update_frame_stats()
3006 mvm->drv_rx_stats.sgi_frames++; in iwl_mvm_update_frame_stats()
3008 mvm->drv_rx_stats.ngi_frames++; in iwl_mvm_update_frame_stats()
3010 mvm->drv_rx_stats.last_rates[mvm->drv_rx_stats.last_frame_idx] = rate; in iwl_mvm_update_frame_stats()
3011 mvm->drv_rx_stats.last_frame_idx = in iwl_mvm_update_frame_stats()
3012 (mvm->drv_rx_stats.last_frame_idx + 1) % in iwl_mvm_update_frame_stats()
3013 ARRAY_SIZE(mvm->drv_rx_stats.last_rates); in iwl_mvm_update_frame_stats()
3015 spin_unlock(&mvm->drv_stats_lock); in iwl_mvm_update_frame_stats()
3022 void iwl_mvm_rs_rate_init(struct iwl_mvm *mvm, struct ieee80211_sta *sta, in iwl_mvm_rs_rate_init() argument
3026 struct ieee80211_hw *hw = mvm->hw; in iwl_mvm_rs_rate_init()
3042 rs_rate_scale_clear_tbl_windows(mvm, &lq_sta->lq_info[j]); in iwl_mvm_rs_rate_init()
3047 IWL_DEBUG_RATE(mvm, in iwl_mvm_rs_rate_init()
3067 rs_ht_init(mvm, sta, lq_sta, ht_cap); in iwl_mvm_rs_rate_init()
3069 rs_vht_init(mvm, sta, lq_sta, vht_cap); in iwl_mvm_rs_rate_init()
3078 IWL_DEBUG_RATE(mvm, in iwl_mvm_rs_rate_init()
3085 IWL_DEBUG_RATE(mvm, "MAX RATE: LEGACY=%d SISO=%d MIMO2=%d\n", in iwl_mvm_rs_rate_init()
3092 first_antenna(iwl_mvm_get_valid_tx_ant(mvm)); in iwl_mvm_rs_rate_init()
3099 iwl_mvm_reset_frame_stats(mvm); in iwl_mvm_rs_rate_init()
3101 rs_initialize_lq(mvm, sta, lq_sta, band, init); in iwl_mvm_rs_rate_init()
3113 struct iwl_mvm *mvm = IWL_OP_MODE_GET_MVM(op_mode); in rs_rate_update() local
3122 iwl_mvm_rs_rate_init(mvm, sta, sband->band, false); in rs_rate_update()
3126 static void rs_build_rates_table_from_fixed(struct iwl_mvm *mvm, in rs_build_rates_table_from_fixed() argument
3156 static void rs_fill_rates_for_column(struct iwl_mvm *mvm, in rs_fill_rates_for_column() argument
3172 ucode_rate = cpu_to_le32(ucode_rate_from_rs_rate(mvm, in rs_fill_rates_for_column()
3211 static void rs_build_rates_table(struct iwl_mvm *mvm, in rs_build_rates_table() argument
3224 valid_tx_ant = iwl_mvm_get_valid_tx_ant(mvm); in rs_build_rates_table()
3227 if (!fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_LQ_SS_PARAMS) && in rs_build_rates_table()
3228 rs_stbc_allow(mvm, sta, lq_sta)) in rs_build_rates_table()
3243 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3262 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3271 rs_fill_rates_for_column(mvm, lq_sta, &rate, lq_cmd->rs_table, &index, in rs_build_rates_table()
3339 static void rs_set_lq_ss_params(struct iwl_mvm *mvm, in rs_set_lq_ss_params() argument
3353 if (!iwl_mvm_bt_coex_is_mimo_allowed(mvm, sta)) in rs_set_lq_ss_params()
3366 IWL_DEBUG_RATE(mvm, "Forcing single stream Tx decision %d\n", in rs_set_lq_ss_params()
3378 ieee80211_iterate_stations_atomic(mvm->hw, in rs_set_lq_ss_params()
3388 IWL_DEBUG_RATE(mvm, "No sta with BFER allowed found. Allow\n"); in rs_set_lq_ss_params()
3394 IWL_DEBUG_RATE(mvm, "Found existing sta %d with BFER activated\n", in rs_set_lq_ss_params()
3404 iwl_mvm_send_lq_cmd(mvm, bfersta_lq_cmd, false); in rs_set_lq_ss_params()
3407 IWL_DEBUG_RATE(mvm, in rs_set_lq_ss_params()
3415 static void rs_fill_lq_cmd(struct iwl_mvm *mvm, in rs_fill_lq_cmd() argument
3430 rs_build_rates_table_from_fixed(mvm, lq_cmd, in rs_fill_lq_cmd()
3439 rs_build_rates_table(mvm, sta, lq_sta, initial_rate); in rs_fill_lq_cmd()
3441 if (fw_has_api(&mvm->fw->ucode_capa, IWL_UCODE_TLV_API_LQ_SS_PARAMS)) in rs_fill_lq_cmd()
3442 rs_set_lq_ss_params(mvm, sta, lq_sta, initial_rate); in rs_fill_lq_cmd()
3460 if (mvm->low_latency_agg_frame_limit) in rs_fill_lq_cmd()
3463 mvm->low_latency_agg_frame_limit); in rs_fill_lq_cmd()
3470 cpu_to_le16(iwl_mvm_coex_agg_time_limit(mvm, sta)); in rs_fill_lq_cmd()
3487 struct iwl_mvm *mvm __maybe_unused = IWL_OP_MODE_GET_MVM(op_mode); in rs_free_sta()
3489 IWL_DEBUG_RATE(mvm, "enter\n"); in rs_free_sta()
3490 IWL_DEBUG_RATE(mvm, "leave\n"); in rs_free_sta()
3555 static void rs_program_fix_rate(struct iwl_mvm *mvm, in rs_program_fix_rate() argument
3562 IWL_DEBUG_RATE(mvm, "sta_id %d rate 0x%X\n", in rs_program_fix_rate()
3566 rs_fill_lq_cmd(mvm, NULL, lq_sta, NULL); in rs_program_fix_rate()
3575 struct iwl_mvm *mvm; in rs_sta_dbgfs_scale_table_write() local
3580 mvm = lq_sta->pers.drv; in rs_sta_dbgfs_scale_table_write()
3591 rs_program_fix_rate(mvm, lq_sta); in rs_sta_dbgfs_scale_table_write()
3605 struct iwl_mvm *mvm; in rs_sta_dbgfs_scale_table_read() local
3609 mvm = lq_sta->pers.drv; in rs_sta_dbgfs_scale_table_read()
3621 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_A) ? "ANT_A," : "", in rs_sta_dbgfs_scale_table_read()
3622 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_B) ? "ANT_B," : "", in rs_sta_dbgfs_scale_table_read()
3623 (iwl_mvm_get_valid_tx_ant(mvm) & ANT_C) ? "ANT_C" : ""); in rs_sta_dbgfs_scale_table_read()
3848 struct iwl_mvm *mvm = lq_sta->pers.drv; in iwl_dbgfs_ss_force_write() local
3859 IWL_ERR(mvm, in iwl_dbgfs_ss_force_write()
3867 IWL_ERR(mvm, in iwl_dbgfs_ss_force_write()
3872 IWL_ERR(mvm, "valid values none|siso|stbc|bfer\n"); in iwl_dbgfs_ss_force_write()
3888 static void rs_add_debugfs(void *mvm, void *priv_sta, struct dentry *dir) in rs_add_debugfs() argument
3912 IWL_ERR((struct iwl_mvm *)mvm, "Can't create debugfs entity\n"); in rs_add_debugfs()
3915 static void rs_remove_debugfs(void *mvm, void *mvm_sta) in rs_remove_debugfs() argument
3965 int iwl_mvm_tx_protection(struct iwl_mvm *mvm, struct iwl_mvm_sta *mvmsta, in iwl_mvm_tx_protection() argument
3970 lockdep_assert_held(&mvm->mutex); in iwl_mvm_tx_protection()
3982 return iwl_mvm_send_lq_cmd(mvm, lq, false); in iwl_mvm_tx_protection()