Lines Matching refs:lq_sta

134 				   struct iwl_lq_sta *lq_sta);
136 struct iwl_lq_sta *lq_sta, u32 rate_n_flags);
137 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search);
141 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta,
144 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, in rs_dbgfs_set_mcs() argument
323 struct iwl_lq_sta *lq_sta) in rs_program_fix_rate() argument
326 container_of(lq_sta, struct iwl_station_priv, lq_sta); in rs_program_fix_rate()
329 lq_sta->active_legacy_rate = 0x0FFF; /* 1 - 54 MBits, includes CCK */ in rs_program_fix_rate()
330 lq_sta->active_siso_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
331 lq_sta->active_mimo2_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
332 lq_sta->active_mimo3_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
335 lq_sta->lq.sta_id, lq_sta->dbg_fixed_rate); in rs_program_fix_rate()
337 if (lq_sta->dbg_fixed_rate) { in rs_program_fix_rate()
338 rs_fill_link_cmd(NULL, lq_sta, lq_sta->dbg_fixed_rate); in rs_program_fix_rate()
339 iwl_send_lq_cmd(lq_sta->drv, ctx, &lq_sta->lq, CMD_ASYNC, in rs_program_fix_rate()
694 static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta, in rs_get_supported_rates() argument
699 return lq_sta->active_legacy_rate; in rs_get_supported_rates()
702 return lq_sta->active_siso_rate; in rs_get_supported_rates()
704 return lq_sta->active_mimo2_rate; in rs_get_supported_rates()
706 return lq_sta->active_mimo3_rate; in rs_get_supported_rates()
769 static u32 rs_get_lower_rate(struct iwl_lq_sta *lq_sta, in rs_get_lower_rate() argument
777 u8 is_green = lq_sta->is_green; in rs_get_lower_rate()
778 struct iwl_priv *priv = lq_sta->drv; in rs_get_lower_rate()
786 if (lq_sta->band == NL80211_BAND_5GHZ) in rs_get_lower_rate()
800 rate_mask = rs_get_supported_rates(lq_sta, NULL, tbl->lq_type); in rs_get_lower_rate()
805 if (lq_sta->band == NL80211_BAND_5GHZ) in rs_get_lower_rate()
807 (lq_sta->supp_rates << IWL_FIRST_OFDM_RATE)); in rs_get_lower_rate()
809 rate_mask = (u16)(rate_mask & lq_sta->supp_rates); in rs_get_lower_rate()
818 high_low = rs_get_adjacent_rate(lq_sta->drv, scale_index, rate_mask, in rs_get_lower_rate()
826 return rate_n_flags_from_tbl(lq_sta->drv, tbl, low, is_green); in rs_get_lower_rate()
840 struct iwl_lq_sta *lq_sta) in rs_bt_update_lq() argument
851 tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_bt_update_lq()
852 rs_fill_link_cmd(priv, lq_sta, tbl->current_rate); in rs_bt_update_lq()
853 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_bt_update_lq()
869 struct iwl_lq_sta *lq_sta = priv_sta; in rs_tx_status() local
885 if (!lq_sta) { in rs_tx_status()
888 } else if (!lq_sta->drv) { in rs_tx_status()
910 table = &lq_sta->lq; in rs_tx_status()
944 lq_sta->missed_rate_counter++; in rs_tx_status()
945 if (lq_sta->missed_rate_counter > IWL_MISSED_RATE_MAX) { in rs_tx_status()
946 lq_sta->missed_rate_counter = 0; in rs_tx_status()
947 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_tx_status()
953 lq_sta->missed_rate_counter = 0; in rs_tx_status()
957 &(lq_sta->lq_info[lq_sta->active_tbl]))) { in rs_tx_status()
958 curr_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
959 other_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
961 &lq_sta->lq_info[1 - lq_sta->active_tbl])) { in rs_tx_status()
962 curr_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
963 other_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
966 tmp_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
969 tmp_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
978 rs_stay_in_table(lq_sta, true); in rs_tx_status()
998 if (lq_sta->stay_in_tbl) { in rs_tx_status()
999 lq_sta->total_success += info->status.ampdu_ack_len; in rs_tx_status()
1000 lq_sta->total_failed += (info->status.ampdu_len - in rs_tx_status()
1033 if (lq_sta->stay_in_tbl) { in rs_tx_status()
1034 lq_sta->total_success += legacy_success; in rs_tx_status()
1035 lq_sta->total_failed += retries + (1 - legacy_success); in rs_tx_status()
1039 lq_sta->last_rate_n_flags = tx_rate; in rs_tx_status()
1043 rs_rate_scale_perform(priv, skb, sta, lq_sta); in rs_tx_status()
1046 rs_bt_update_lq(priv, ctx, lq_sta); in rs_tx_status()
1058 struct iwl_lq_sta *lq_sta) in rs_set_stay_in_table() argument
1061 lq_sta->stay_in_tbl = 1; /* only place this gets set */ in rs_set_stay_in_table()
1063 lq_sta->table_count_limit = IWL_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1064 lq_sta->max_failure_limit = IWL_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1065 lq_sta->max_success_limit = IWL_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1067 lq_sta->table_count_limit = IWL_NONE_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1068 lq_sta->max_failure_limit = IWL_NONE_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1069 lq_sta->max_success_limit = IWL_NONE_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1071 lq_sta->table_count = 0; in rs_set_stay_in_table()
1072 lq_sta->total_failed = 0; in rs_set_stay_in_table()
1073 lq_sta->total_success = 0; in rs_set_stay_in_table()
1074 lq_sta->flush_timer = jiffies; in rs_set_stay_in_table()
1075 lq_sta->action_counter = 0; in rs_set_stay_in_table()
1081 static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta, in rs_set_expected_tpt_table() argument
1102 if (is_siso(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1106 else if (is_mimo2(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1110 else if (is_mimo3(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1115 if (!tbl->is_SGI && !lq_sta->is_agg) /* Normal */ in rs_set_expected_tpt_table()
1117 else if (tbl->is_SGI && !lq_sta->is_agg) /* SGI */ in rs_set_expected_tpt_table()
1119 else if (!tbl->is_SGI && lq_sta->is_agg) /* AGG */ in rs_set_expected_tpt_table()
1138 struct iwl_lq_sta *lq_sta, in rs_get_best_rate() argument
1144 &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_get_best_rate()
1178 if ((((100 * tpt_tbl[rate]) > lq_sta->last_tpt) && in rs_get_best_rate()
1231 struct iwl_lq_sta *lq_sta, in rs_switch_to_mimo2() argument
1238 s8 is_green = lq_sta->is_green; in rs_switch_to_mimo2()
1255 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_mimo2()
1258 rate_mask = lq_sta->active_mimo2_rate; in rs_switch_to_mimo2()
1265 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_mimo2()
1267 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_mimo2()
1286 struct iwl_lq_sta *lq_sta, in rs_switch_to_mimo3() argument
1293 s8 is_green = lq_sta->is_green; in rs_switch_to_mimo3()
1310 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_mimo3()
1313 rate_mask = lq_sta->active_mimo3_rate; in rs_switch_to_mimo3()
1320 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_mimo3()
1322 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_mimo3()
1342 struct iwl_lq_sta *lq_sta, in rs_switch_to_siso() argument
1348 u8 is_green = lq_sta->is_green; in rs_switch_to_siso()
1358 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_siso()
1362 rate_mask = lq_sta->active_siso_rate; in rs_switch_to_siso()
1372 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_siso()
1373 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_siso()
1391 struct iwl_lq_sta *lq_sta, in rs_move_legacy_other() argument
1396 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_legacy_other()
1398 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_legacy_other()
1450 lq_sta->action_counter++; in rs_move_legacy_other()
1475 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_legacy_other()
1485 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1488 lq_sta->action_counter = 0; in rs_move_legacy_other()
1512 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1515 lq_sta->action_counter = 0; in rs_move_legacy_other()
1532 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1535 lq_sta->action_counter = 0; in rs_move_legacy_other()
1552 lq_sta->search_better_tbl = 1; in rs_move_legacy_other()
1564 struct iwl_lq_sta *lq_sta, in rs_move_siso_to_other() argument
1568 u8 is_green = lq_sta->is_green; in rs_move_siso_to_other()
1569 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_siso_to_other()
1571 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_siso_to_other()
1620 lq_sta->action_counter++; in rs_move_siso_to_other()
1661 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_siso_to_other()
1685 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_siso_to_other()
1687 s32 tpt = lq_sta->last_tpt / 100; in rs_move_siso_to_other()
1705 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_siso_to_other()
1722 lq_sta->search_better_tbl = 1; in rs_move_siso_to_other()
1734 struct iwl_lq_sta *lq_sta, in rs_move_mimo2_to_other() argument
1738 s8 is_green = lq_sta->is_green; in rs_move_mimo2_to_other()
1739 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_mimo2_to_other()
1741 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_mimo2_to_other()
1788 lq_sta->action_counter++; in rs_move_mimo2_to_other()
1825 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_mimo2_to_other()
1845 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_mimo2_to_other()
1853 s32 tpt = lq_sta->last_tpt / 100; in rs_move_mimo2_to_other()
1872 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_mimo2_to_other()
1889 lq_sta->search_better_tbl = 1; in rs_move_mimo2_to_other()
1902 struct iwl_lq_sta *lq_sta, in rs_move_mimo3_to_other() argument
1906 s8 is_green = lq_sta->is_green; in rs_move_mimo3_to_other()
1907 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_mimo3_to_other()
1909 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_mimo3_to_other()
1956 lq_sta->action_counter++; in rs_move_mimo3_to_other()
1991 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_mimo3_to_other()
2015 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_mimo3_to_other()
2035 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_mimo3_to_other()
2043 s32 tpt = lq_sta->last_tpt / 100; in rs_move_mimo3_to_other()
2063 lq_sta->search_better_tbl = 1; in rs_move_mimo3_to_other()
2078 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search) in rs_stay_in_table() argument
2086 priv = lq_sta->drv; in rs_stay_in_table()
2087 active_tbl = lq_sta->active_tbl; in rs_stay_in_table()
2089 tbl = &(lq_sta->lq_info[active_tbl]); in rs_stay_in_table()
2092 if (lq_sta->stay_in_tbl) { in rs_stay_in_table()
2095 if (lq_sta->flush_timer) in rs_stay_in_table()
2098 (unsigned long)(lq_sta->flush_timer + in rs_stay_in_table()
2110 (lq_sta->total_failed > lq_sta->max_failure_limit) || in rs_stay_in_table()
2111 (lq_sta->total_success > lq_sta->max_success_limit) || in rs_stay_in_table()
2112 ((!lq_sta->search_better_tbl) && (lq_sta->flush_timer) in rs_stay_in_table()
2115 lq_sta->total_failed, in rs_stay_in_table()
2116 lq_sta->total_success, in rs_stay_in_table()
2120 lq_sta->stay_in_tbl = 0; /* only place reset */ in rs_stay_in_table()
2121 lq_sta->total_failed = 0; in rs_stay_in_table()
2122 lq_sta->total_success = 0; in rs_stay_in_table()
2123 lq_sta->flush_timer = 0; in rs_stay_in_table()
2132 lq_sta->table_count++; in rs_stay_in_table()
2133 if (lq_sta->table_count >= in rs_stay_in_table()
2134 lq_sta->table_count_limit) { in rs_stay_in_table()
2135 lq_sta->table_count = 0; in rs_stay_in_table()
2147 if (!lq_sta->stay_in_tbl) { in rs_stay_in_table()
2159 struct iwl_lq_sta *lq_sta, in rs_update_rate_tbl() argument
2167 rs_fill_link_cmd(priv, lq_sta, rate); in rs_update_rate_tbl()
2168 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_update_rate_tbl()
2177 struct iwl_lq_sta *lq_sta) in rs_rate_scale_perform() argument
2215 lq_sta->supp_rates = sta->deflink.supp_rates[lq_sta->band]; in rs_rate_scale_perform()
2217 tid = rs_tl_add_packet(lq_sta, hdr); in rs_rate_scale_perform()
2219 (lq_sta->tx_agg_tid_en & (1 << tid))) { in rs_rate_scale_perform()
2220 tid_data = &priv->tid_data[lq_sta->lq.sta_id][tid]; in rs_rate_scale_perform()
2222 lq_sta->is_agg = 0; in rs_rate_scale_perform()
2224 lq_sta->is_agg = 1; in rs_rate_scale_perform()
2226 lq_sta->is_agg = 0; in rs_rate_scale_perform()
2233 if (!lq_sta->search_better_tbl) in rs_rate_scale_perform()
2234 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2236 active_tbl = 1 - lq_sta->active_tbl; in rs_rate_scale_perform()
2238 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2240 lq_sta->is_green = 0; in rs_rate_scale_perform()
2242 lq_sta->is_green = rs_use_green(sta); in rs_rate_scale_perform()
2243 is_green = lq_sta->is_green; in rs_rate_scale_perform()
2246 index = lq_sta->last_txrate_idx; in rs_rate_scale_perform()
2252 rate_mask = rs_get_supported_rates(lq_sta, hdr, tbl->lq_type); in rs_rate_scale_perform()
2258 if (lq_sta->band == NL80211_BAND_5GHZ) in rs_rate_scale_perform()
2261 (lq_sta->supp_rates << IWL_FIRST_OFDM_RATE)); in rs_rate_scale_perform()
2264 lq_sta->supp_rates); in rs_rate_scale_perform()
2274 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2277 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2278 tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2281 rs_update_rate_tbl(priv, ctx, lq_sta, tbl, in rs_rate_scale_perform()
2294 if ((lq_sta->max_rate_idx != -1) && in rs_rate_scale_perform()
2295 (lq_sta->max_rate_idx < index)) { in rs_rate_scale_perform()
2296 index = lq_sta->max_rate_idx; in rs_rate_scale_perform()
2323 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2337 if (lq_sta->search_better_tbl && in rs_rate_scale_perform()
2342 if (window->average_tpt > lq_sta->last_tpt) { in rs_rate_scale_perform()
2348 lq_sta->last_tpt); in rs_rate_scale_perform()
2351 lq_sta->enable_counter = 1; in rs_rate_scale_perform()
2354 lq_sta->active_tbl = active_tbl; in rs_rate_scale_perform()
2364 lq_sta->last_tpt); in rs_rate_scale_perform()
2370 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2371 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2375 current_tpt = lq_sta->last_tpt; in rs_rate_scale_perform()
2383 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2396 if ((lq_sta->max_rate_idx != -1) && in rs_rate_scale_perform()
2397 (lq_sta->max_rate_idx < high)) in rs_rate_scale_perform()
2474 if (lq_sta->last_bt_traffic > priv->bt_traffic_load) { in rs_rate_scale_perform()
2480 } else if (lq_sta->last_bt_traffic <= priv->bt_traffic_load) { in rs_rate_scale_perform()
2484 lq_sta->last_bt_traffic = priv->bt_traffic_load; in rs_rate_scale_perform()
2489 rs_stay_in_table(lq_sta, true); in rs_rate_scale_perform()
2523 rs_update_rate_tbl(priv, ctx, lq_sta, tbl, index, is_green); in rs_rate_scale_perform()
2528 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2536 if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { in rs_rate_scale_perform()
2538 lq_sta->last_tpt = current_tpt; in rs_rate_scale_perform()
2543 rs_move_legacy_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2545 rs_move_siso_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2547 rs_move_mimo2_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2549 rs_move_mimo3_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2552 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2554 tbl = &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_rate_scale_perform()
2563 rs_fill_link_cmd(priv, lq_sta, tbl->current_rate); in rs_rate_scale_perform()
2564 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_rate_scale_perform()
2569 if (done_search && !lq_sta->stay_in_tbl) { in rs_rate_scale_perform()
2575 tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2577 lq_sta->action_counter > tbl1->max_search) { in rs_rate_scale_perform()
2579 rs_set_stay_in_table(priv, 1, lq_sta); in rs_rate_scale_perform()
2585 if (lq_sta->enable_counter && in rs_rate_scale_perform()
2586 (lq_sta->action_counter >= tbl1->max_search) && in rs_rate_scale_perform()
2588 if ((lq_sta->last_tpt > IWL_AGG_TPT_THREHOLD) && in rs_rate_scale_perform()
2589 (lq_sta->tx_agg_tid_en & (1 << tid)) && in rs_rate_scale_perform()
2591 u8 sta_id = lq_sta->lq.sta_id; in rs_rate_scale_perform()
2598 lq_sta, sta); in rs_rate_scale_perform()
2601 rs_set_stay_in_table(priv, 0, lq_sta); in rs_rate_scale_perform()
2607 lq_sta->last_txrate_idx = index; in rs_rate_scale_perform()
2626 struct iwl_lq_sta *lq_sta) in rs_initialize_lq() argument
2638 if (!sta || !lq_sta) in rs_initialize_lq()
2644 i = lq_sta->last_txrate_idx; in rs_initialize_lq()
2648 if (!lq_sta->search_better_tbl) in rs_initialize_lq()
2649 active_tbl = lq_sta->active_tbl; in rs_initialize_lq()
2651 active_tbl = 1 - lq_sta->active_tbl; in rs_initialize_lq()
2653 tbl = &(lq_sta->lq_info[active_tbl]); in rs_initialize_lq()
2671 rs_set_expected_tpt_table(lq_sta, tbl); in rs_initialize_lq()
2672 rs_fill_link_cmd(NULL, lq_sta, rate); in rs_initialize_lq()
2673 priv->stations[lq_sta->lq.sta_id].lq = &lq_sta->lq; in rs_initialize_lq()
2674 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, 0, true); in rs_initialize_lq()
2687 struct iwl_lq_sta *lq_sta = priv_sta; in rs_get_rate() local
2693 if (lq_sta) { in rs_get_rate()
2694 lq_sta->max_rate_idx = fls(txrc->rate_idx_mask) - 1; in rs_get_rate()
2696 (lq_sta->max_rate_idx != -1)) in rs_get_rate()
2697 lq_sta->max_rate_idx += IWL_FIRST_OFDM_RATE; in rs_get_rate()
2698 if ((lq_sta->max_rate_idx < 0) || in rs_get_rate()
2699 (lq_sta->max_rate_idx >= IWL_RATE_COUNT)) in rs_get_rate()
2700 lq_sta->max_rate_idx = -1; in rs_get_rate()
2704 if (lq_sta && !lq_sta->drv) { in rs_get_rate()
2709 rate_idx = lq_sta->last_txrate_idx; in rs_get_rate()
2711 if (lq_sta->last_rate_n_flags & RATE_MCS_HT_MSK) { in rs_get_rate()
2715 if (rs_extract_rate(lq_sta->last_rate_n_flags) >= in rs_get_rate()
2718 else if (rs_extract_rate(lq_sta->last_rate_n_flags) >= in rs_get_rate()
2722 if (lq_sta->last_rate_n_flags & RATE_MCS_SGI_MSK) in rs_get_rate()
2724 if (lq_sta->last_rate_n_flags & RATE_MCS_DUP_MSK) in rs_get_rate()
2726 if (lq_sta->last_rate_n_flags & RATE_MCS_HT40_MSK) in rs_get_rate()
2728 if (lq_sta->last_rate_n_flags & RATE_MCS_GF_MSK) in rs_get_rate()
2755 return &sta_priv->lq_sta; in rs_alloc_sta()
2768 struct iwl_lq_sta *lq_sta; in iwl_rs_rate_init() local
2773 lq_sta = &sta_priv->lq_sta; in iwl_rs_rate_init()
2777 lq_sta->lq.sta_id = sta_id; in iwl_rs_rate_init()
2781 rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]); in iwl_rs_rate_init()
2783 lq_sta->flush_timer = 0; in iwl_rs_rate_init()
2784 lq_sta->supp_rates = sta->deflink.supp_rates[sband->band]; in iwl_rs_rate_init()
2793 lq_sta->is_dup = 0; in iwl_rs_rate_init()
2794 lq_sta->max_rate_idx = -1; in iwl_rs_rate_init()
2795 lq_sta->missed_rate_counter = IWL_MISSED_RATE_MAX; in iwl_rs_rate_init()
2796 lq_sta->is_green = rs_use_green(sta); in iwl_rs_rate_init()
2797 lq_sta->band = sband->band; in iwl_rs_rate_init()
2802 lq_sta->active_legacy_rate = 0; in iwl_rs_rate_init()
2804 lq_sta->active_legacy_rate |= BIT(sband->bitrates[i].hw_value); in iwl_rs_rate_init()
2810 lq_sta->active_siso_rate = ht_cap->mcs.rx_mask[0] << 1; in iwl_rs_rate_init()
2811 lq_sta->active_siso_rate |= ht_cap->mcs.rx_mask[0] & 0x1; in iwl_rs_rate_init()
2812 lq_sta->active_siso_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2813 lq_sta->active_siso_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2816 lq_sta->active_mimo2_rate = ht_cap->mcs.rx_mask[1] << 1; in iwl_rs_rate_init()
2817 lq_sta->active_mimo2_rate |= ht_cap->mcs.rx_mask[1] & 0x1; in iwl_rs_rate_init()
2818 lq_sta->active_mimo2_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2819 lq_sta->active_mimo2_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2821 lq_sta->active_mimo3_rate = ht_cap->mcs.rx_mask[2] << 1; in iwl_rs_rate_init()
2822 lq_sta->active_mimo3_rate |= ht_cap->mcs.rx_mask[2] & 0x1; in iwl_rs_rate_init()
2823 lq_sta->active_mimo3_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2824 lq_sta->active_mimo3_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2827 lq_sta->active_siso_rate, in iwl_rs_rate_init()
2828 lq_sta->active_mimo2_rate, in iwl_rs_rate_init()
2829 lq_sta->active_mimo3_rate); in iwl_rs_rate_init()
2832 lq_sta->lq.general_params.single_stream_ant_msk = in iwl_rs_rate_init()
2834 lq_sta->lq.general_params.dual_stream_ant_msk = in iwl_rs_rate_init()
2837 if (!lq_sta->lq.general_params.dual_stream_ant_msk) { in iwl_rs_rate_init()
2838 lq_sta->lq.general_params.dual_stream_ant_msk = ANT_AB; in iwl_rs_rate_init()
2840 lq_sta->lq.general_params.dual_stream_ant_msk = in iwl_rs_rate_init()
2845 lq_sta->tx_agg_tid_en = IWL_AGG_ALL_TID; in iwl_rs_rate_init()
2846 lq_sta->drv = priv; in iwl_rs_rate_init()
2849 lq_sta->last_txrate_idx = rate_lowest_index(sband, sta); in iwl_rs_rate_init()
2851 lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2852 lq_sta->is_agg = 0; in iwl_rs_rate_init()
2854 lq_sta->dbg_fixed_rate = 0; in iwl_rs_rate_init()
2857 rs_initialize_lq(priv, sta, lq_sta); in iwl_rs_rate_init()
2861 struct iwl_lq_sta *lq_sta, u32 new_rate) in rs_fill_link_cmd() argument
2871 container_of(lq_sta, struct iwl_station_priv, lq_sta); in rs_fill_link_cmd()
2872 struct iwl_link_quality_cmd *lq_cmd = &lq_sta->lq; in rs_fill_link_cmd()
2875 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
2878 rs_get_tbl_info_from_mcs(new_rate, lq_sta->band, in rs_fill_link_cmd()
2935 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
2944 rs_get_tbl_info_from_mcs(new_rate, lq_sta->band, &tbl_type, in rs_fill_link_cmd()
2960 new_rate = rs_get_lower_rate(lq_sta, &tbl_type, rate_idx, in rs_fill_link_cmd()
2982 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
3029 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, in rs_dbgfs_set_mcs() argument
3036 priv = lq_sta->drv; in rs_dbgfs_set_mcs()
3038 if (lq_sta->dbg_fixed_rate) { in rs_dbgfs_set_mcs()
3040 ((lq_sta->dbg_fixed_rate & RATE_MCS_ANT_ABC_MSK) in rs_dbgfs_set_mcs()
3043 *rate_n_flags = lq_sta->dbg_fixed_rate; in rs_dbgfs_set_mcs()
3046 lq_sta->dbg_fixed_rate = 0; in rs_dbgfs_set_mcs()
3060 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_write() local
3067 priv = lq_sta->drv; in rs_sta_dbgfs_scale_table_write()
3074 lq_sta->dbg_fixed_rate = parsed_rate; in rs_sta_dbgfs_scale_table_write()
3076 lq_sta->dbg_fixed_rate = 0; in rs_sta_dbgfs_scale_table_write()
3078 rs_program_fix_rate(priv, lq_sta); in rs_sta_dbgfs_scale_table_write()
3092 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_read() local
3094 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_sta_dbgfs_scale_table_read()
3096 priv = lq_sta->drv; in rs_sta_dbgfs_scale_table_read()
3101 desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); in rs_sta_dbgfs_scale_table_read()
3103 lq_sta->total_failed, lq_sta->total_success, in rs_sta_dbgfs_scale_table_read()
3104 lq_sta->active_legacy_rate); in rs_sta_dbgfs_scale_table_read()
3106 lq_sta->dbg_fixed_rate); in rs_sta_dbgfs_scale_table_read()
3121 (lq_sta->is_green) ? "GF enabled" : "", in rs_sta_dbgfs_scale_table_read()
3122 (lq_sta->is_agg) ? "AGG on" : ""); in rs_sta_dbgfs_scale_table_read()
3125 lq_sta->last_rate_n_flags); in rs_sta_dbgfs_scale_table_read()
3128 lq_sta->lq.general_params.flags, in rs_sta_dbgfs_scale_table_read()
3129 lq_sta->lq.general_params.mimo_delimiter, in rs_sta_dbgfs_scale_table_read()
3130 lq_sta->lq.general_params.single_stream_ant_msk, in rs_sta_dbgfs_scale_table_read()
3131 lq_sta->lq.general_params.dual_stream_ant_msk); in rs_sta_dbgfs_scale_table_read()
3135 le16_to_cpu(lq_sta->lq.agg_params.agg_time_limit), in rs_sta_dbgfs_scale_table_read()
3136 lq_sta->lq.agg_params.agg_dis_start_th, in rs_sta_dbgfs_scale_table_read()
3137 lq_sta->lq.agg_params.agg_frame_cnt_limit); in rs_sta_dbgfs_scale_table_read()
3141 lq_sta->lq.general_params.start_rate_index[0], in rs_sta_dbgfs_scale_table_read()
3142 lq_sta->lq.general_params.start_rate_index[1], in rs_sta_dbgfs_scale_table_read()
3143 lq_sta->lq.general_params.start_rate_index[2], in rs_sta_dbgfs_scale_table_read()
3144 lq_sta->lq.general_params.start_rate_index[3]); in rs_sta_dbgfs_scale_table_read()
3148 le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags)); in rs_sta_dbgfs_scale_table_read()
3151 i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags), in rs_sta_dbgfs_scale_table_read()
3155 i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags), in rs_sta_dbgfs_scale_table_read()
3179 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_stats_table_read() local
3189 lq_sta->active_tbl == i ? "*" : "x", in rs_sta_dbgfs_stats_table_read()
3190 lq_sta->lq_info[i].lq_type, in rs_sta_dbgfs_stats_table_read()
3191 lq_sta->lq_info[i].is_SGI, in rs_sta_dbgfs_stats_table_read()
3192 lq_sta->lq_info[i].is_ht40, in rs_sta_dbgfs_stats_table_read()
3193 lq_sta->lq_info[i].is_dup, in rs_sta_dbgfs_stats_table_read()
3194 lq_sta->is_green, in rs_sta_dbgfs_stats_table_read()
3195 lq_sta->lq_info[i].current_rate); in rs_sta_dbgfs_stats_table_read()
3199 lq_sta->lq_info[i].win[j].counter, in rs_sta_dbgfs_stats_table_read()
3200 lq_sta->lq_info[i].win[j].success_counter, in rs_sta_dbgfs_stats_table_read()
3201 lq_sta->lq_info[i].win[j].success_ratio); in rs_sta_dbgfs_stats_table_read()
3218 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_rate_scale_data_read() local
3219 struct iwl_scale_tbl_info *tbl = &lq_sta->lq_info[lq_sta->active_tbl]; in rs_sta_dbgfs_rate_scale_data_read()
3226 tbl->expected_tpt[lq_sta->last_txrate_idx]); in rs_sta_dbgfs_rate_scale_data_read()
3230 iwl_rates[lq_sta->last_txrate_idx].ieee >> 1); in rs_sta_dbgfs_rate_scale_data_read()
3244 struct iwl_lq_sta *lq_sta = priv_sta; in rs_add_debugfs() local
3246 debugfs_create_file("rate_scale_table", 0600, dir, lq_sta, in rs_add_debugfs()
3248 debugfs_create_file("rate_stats_table", 0400, dir, lq_sta, in rs_add_debugfs()
3250 debugfs_create_file("rate_scale_data", 0400, dir, lq_sta, in rs_add_debugfs()
3253 &lq_sta->tx_agg_tid_en); in rs_add_debugfs()