Lines Matching refs:lq_sta
153 struct iwl_lq_sta *lq_sta);
155 struct iwl_lq_sta *lq_sta, u32 rate_n_flags);
156 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search);
160 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta,
163 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, in rs_dbgfs_set_mcs() argument
342 struct iwl_lq_sta *lq_sta) in rs_program_fix_rate() argument
345 container_of(lq_sta, struct iwl_station_priv, lq_sta); in rs_program_fix_rate()
348 lq_sta->active_legacy_rate = 0x0FFF; /* 1 - 54 MBits, includes CCK */ in rs_program_fix_rate()
349 lq_sta->active_siso_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
350 lq_sta->active_mimo2_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
351 lq_sta->active_mimo3_rate = 0x1FD0; /* 6 - 60 MBits, no 9, no CCK */ in rs_program_fix_rate()
354 lq_sta->lq.sta_id, lq_sta->dbg_fixed_rate); in rs_program_fix_rate()
356 if (lq_sta->dbg_fixed_rate) { in rs_program_fix_rate()
357 rs_fill_link_cmd(NULL, lq_sta, lq_sta->dbg_fixed_rate); in rs_program_fix_rate()
358 iwl_send_lq_cmd(lq_sta->drv, ctx, &lq_sta->lq, CMD_ASYNC, in rs_program_fix_rate()
716 static u16 rs_get_supported_rates(struct iwl_lq_sta *lq_sta, in rs_get_supported_rates() argument
721 return lq_sta->active_legacy_rate; in rs_get_supported_rates()
724 return lq_sta->active_siso_rate; in rs_get_supported_rates()
726 return lq_sta->active_mimo2_rate; in rs_get_supported_rates()
728 return lq_sta->active_mimo3_rate; in rs_get_supported_rates()
788 static u32 rs_get_lower_rate(struct iwl_lq_sta *lq_sta, in rs_get_lower_rate() argument
796 u8 is_green = lq_sta->is_green; in rs_get_lower_rate()
797 struct iwl_priv *priv = lq_sta->drv; in rs_get_lower_rate()
805 if (lq_sta->band == IEEE80211_BAND_5GHZ) in rs_get_lower_rate()
819 rate_mask = rs_get_supported_rates(lq_sta, NULL, tbl->lq_type); in rs_get_lower_rate()
824 if (lq_sta->band == IEEE80211_BAND_5GHZ) in rs_get_lower_rate()
826 (lq_sta->supp_rates << IWL_FIRST_OFDM_RATE)); in rs_get_lower_rate()
828 rate_mask = (u16)(rate_mask & lq_sta->supp_rates); in rs_get_lower_rate()
837 high_low = rs_get_adjacent_rate(lq_sta->drv, scale_index, rate_mask, in rs_get_lower_rate()
845 return rate_n_flags_from_tbl(lq_sta->drv, tbl, low, is_green); in rs_get_lower_rate()
859 struct iwl_lq_sta *lq_sta) in rs_bt_update_lq() argument
880 tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_bt_update_lq()
881 rs_fill_link_cmd(priv, lq_sta, tbl->current_rate); in rs_bt_update_lq()
882 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_bt_update_lq()
898 struct iwl_lq_sta *lq_sta = priv_sta; in rs_tx_status() local
914 if (!lq_sta) { in rs_tx_status()
917 } else if (!lq_sta->drv) { in rs_tx_status()
939 table = &lq_sta->lq; in rs_tx_status()
973 lq_sta->missed_rate_counter++; in rs_tx_status()
974 if (lq_sta->missed_rate_counter > IWL_MISSED_RATE_MAX) { in rs_tx_status()
975 lq_sta->missed_rate_counter = 0; in rs_tx_status()
976 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_tx_status()
982 lq_sta->missed_rate_counter = 0; in rs_tx_status()
986 &(lq_sta->lq_info[lq_sta->active_tbl]))) { in rs_tx_status()
987 curr_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
988 other_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
990 &lq_sta->lq_info[1 - lq_sta->active_tbl])) { in rs_tx_status()
991 curr_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
992 other_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
995 tmp_tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_tx_status()
998 tmp_tbl = &(lq_sta->lq_info[1 - lq_sta->active_tbl]); in rs_tx_status()
1007 rs_stay_in_table(lq_sta, true); in rs_tx_status()
1027 if (lq_sta->stay_in_tbl) { in rs_tx_status()
1028 lq_sta->total_success += info->status.ampdu_ack_len; in rs_tx_status()
1029 lq_sta->total_failed += (info->status.ampdu_len - in rs_tx_status()
1062 if (lq_sta->stay_in_tbl) { in rs_tx_status()
1063 lq_sta->total_success += legacy_success; in rs_tx_status()
1064 lq_sta->total_failed += retries + (1 - legacy_success); in rs_tx_status()
1068 lq_sta->last_rate_n_flags = tx_rate; in rs_tx_status()
1072 rs_rate_scale_perform(priv, skb, sta, lq_sta); in rs_tx_status()
1075 rs_bt_update_lq(priv, ctx, lq_sta); in rs_tx_status()
1087 struct iwl_lq_sta *lq_sta) in rs_set_stay_in_table() argument
1090 lq_sta->stay_in_tbl = 1; /* only place this gets set */ in rs_set_stay_in_table()
1092 lq_sta->table_count_limit = IWL_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1093 lq_sta->max_failure_limit = IWL_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1094 lq_sta->max_success_limit = IWL_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1096 lq_sta->table_count_limit = IWL_NONE_LEGACY_TABLE_COUNT; in rs_set_stay_in_table()
1097 lq_sta->max_failure_limit = IWL_NONE_LEGACY_FAILURE_LIMIT; in rs_set_stay_in_table()
1098 lq_sta->max_success_limit = IWL_NONE_LEGACY_SUCCESS_LIMIT; in rs_set_stay_in_table()
1100 lq_sta->table_count = 0; in rs_set_stay_in_table()
1101 lq_sta->total_failed = 0; in rs_set_stay_in_table()
1102 lq_sta->total_success = 0; in rs_set_stay_in_table()
1103 lq_sta->flush_timer = jiffies; in rs_set_stay_in_table()
1104 lq_sta->action_counter = 0; in rs_set_stay_in_table()
1110 static void rs_set_expected_tpt_table(struct iwl_lq_sta *lq_sta, in rs_set_expected_tpt_table() argument
1131 if (is_siso(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1135 else if (is_mimo2(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1139 else if (is_mimo3(tbl->lq_type) && (!tbl->is_ht40 || lq_sta->is_dup)) in rs_set_expected_tpt_table()
1144 if (!tbl->is_SGI && !lq_sta->is_agg) /* Normal */ in rs_set_expected_tpt_table()
1146 else if (tbl->is_SGI && !lq_sta->is_agg) /* SGI */ in rs_set_expected_tpt_table()
1148 else if (!tbl->is_SGI && lq_sta->is_agg) /* AGG */ in rs_set_expected_tpt_table()
1167 struct iwl_lq_sta *lq_sta, in rs_get_best_rate() argument
1173 &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_get_best_rate()
1207 if ((((100 * tpt_tbl[rate]) > lq_sta->last_tpt) && in rs_get_best_rate()
1260 struct iwl_lq_sta *lq_sta, in rs_switch_to_mimo2() argument
1267 s8 is_green = lq_sta->is_green; in rs_switch_to_mimo2()
1284 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_mimo2()
1287 rate_mask = lq_sta->active_mimo2_rate; in rs_switch_to_mimo2()
1294 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_mimo2()
1296 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_mimo2()
1315 struct iwl_lq_sta *lq_sta, in rs_switch_to_mimo3() argument
1322 s8 is_green = lq_sta->is_green; in rs_switch_to_mimo3()
1339 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_mimo3()
1342 rate_mask = lq_sta->active_mimo3_rate; in rs_switch_to_mimo3()
1349 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_mimo3()
1351 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_mimo3()
1371 struct iwl_lq_sta *lq_sta, in rs_switch_to_siso() argument
1377 u8 is_green = lq_sta->is_green; in rs_switch_to_siso()
1387 tbl->is_dup = lq_sta->is_dup; in rs_switch_to_siso()
1391 rate_mask = lq_sta->active_siso_rate; in rs_switch_to_siso()
1401 rs_set_expected_tpt_table(lq_sta, tbl); in rs_switch_to_siso()
1402 rate = rs_get_best_rate(priv, lq_sta, tbl, rate_mask, index); in rs_switch_to_siso()
1420 struct iwl_lq_sta *lq_sta, in rs_move_legacy_other() argument
1425 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_legacy_other()
1427 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_legacy_other()
1479 lq_sta->action_counter++; in rs_move_legacy_other()
1504 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_legacy_other()
1514 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1517 lq_sta->action_counter = 0; in rs_move_legacy_other()
1541 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1544 lq_sta->action_counter = 0; in rs_move_legacy_other()
1561 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_legacy_other()
1564 lq_sta->action_counter = 0; in rs_move_legacy_other()
1581 lq_sta->search_better_tbl = 1; in rs_move_legacy_other()
1593 struct iwl_lq_sta *lq_sta, in rs_move_siso_to_other() argument
1597 u8 is_green = lq_sta->is_green; in rs_move_siso_to_other()
1598 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_siso_to_other()
1600 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_siso_to_other()
1649 lq_sta->action_counter++; in rs_move_siso_to_other()
1690 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_siso_to_other()
1714 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_siso_to_other()
1716 s32 tpt = lq_sta->last_tpt / 100; in rs_move_siso_to_other()
1734 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_siso_to_other()
1751 lq_sta->search_better_tbl = 1; in rs_move_siso_to_other()
1763 struct iwl_lq_sta *lq_sta, in rs_move_mimo2_to_other() argument
1767 s8 is_green = lq_sta->is_green; in rs_move_mimo2_to_other()
1768 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_mimo2_to_other()
1770 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_mimo2_to_other()
1817 lq_sta->action_counter++; in rs_move_mimo2_to_other()
1854 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_mimo2_to_other()
1874 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_mimo2_to_other()
1882 s32 tpt = lq_sta->last_tpt / 100; in rs_move_mimo2_to_other()
1901 ret = rs_switch_to_mimo3(priv, lq_sta, conf, sta, in rs_move_mimo2_to_other()
1918 lq_sta->search_better_tbl = 1; in rs_move_mimo2_to_other()
1931 struct iwl_lq_sta *lq_sta, in rs_move_mimo3_to_other() argument
1935 s8 is_green = lq_sta->is_green; in rs_move_mimo3_to_other()
1936 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_move_mimo3_to_other()
1938 &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_move_mimo3_to_other()
1985 lq_sta->action_counter++; in rs_move_mimo3_to_other()
2020 ret = rs_switch_to_siso(priv, lq_sta, conf, sta, in rs_move_mimo3_to_other()
2044 ret = rs_switch_to_mimo2(priv, lq_sta, conf, sta, in rs_move_mimo3_to_other()
2064 rs_set_expected_tpt_table(lq_sta, search_tbl); in rs_move_mimo3_to_other()
2072 s32 tpt = lq_sta->last_tpt / 100; in rs_move_mimo3_to_other()
2092 lq_sta->search_better_tbl = 1; in rs_move_mimo3_to_other()
2107 static void rs_stay_in_table(struct iwl_lq_sta *lq_sta, bool force_search) in rs_stay_in_table() argument
2115 priv = lq_sta->drv; in rs_stay_in_table()
2116 active_tbl = lq_sta->active_tbl; in rs_stay_in_table()
2118 tbl = &(lq_sta->lq_info[active_tbl]); in rs_stay_in_table()
2121 if (lq_sta->stay_in_tbl) { in rs_stay_in_table()
2124 if (lq_sta->flush_timer) in rs_stay_in_table()
2127 (unsigned long)(lq_sta->flush_timer + in rs_stay_in_table()
2139 (lq_sta->total_failed > lq_sta->max_failure_limit) || in rs_stay_in_table()
2140 (lq_sta->total_success > lq_sta->max_success_limit) || in rs_stay_in_table()
2141 ((!lq_sta->search_better_tbl) && (lq_sta->flush_timer) in rs_stay_in_table()
2144 lq_sta->total_failed, in rs_stay_in_table()
2145 lq_sta->total_success, in rs_stay_in_table()
2149 lq_sta->stay_in_tbl = 0; /* only place reset */ in rs_stay_in_table()
2150 lq_sta->total_failed = 0; in rs_stay_in_table()
2151 lq_sta->total_success = 0; in rs_stay_in_table()
2152 lq_sta->flush_timer = 0; in rs_stay_in_table()
2161 lq_sta->table_count++; in rs_stay_in_table()
2162 if (lq_sta->table_count >= in rs_stay_in_table()
2163 lq_sta->table_count_limit) { in rs_stay_in_table()
2164 lq_sta->table_count = 0; in rs_stay_in_table()
2176 if (!lq_sta->stay_in_tbl) { in rs_stay_in_table()
2188 struct iwl_lq_sta *lq_sta, in rs_update_rate_tbl() argument
2196 rs_fill_link_cmd(priv, lq_sta, rate); in rs_update_rate_tbl()
2197 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_update_rate_tbl()
2206 struct iwl_lq_sta *lq_sta) in rs_rate_scale_perform() argument
2244 lq_sta->supp_rates = sta->supp_rates[lq_sta->band]; in rs_rate_scale_perform()
2246 tid = rs_tl_add_packet(lq_sta, hdr); in rs_rate_scale_perform()
2248 (lq_sta->tx_agg_tid_en & (1 << tid))) { in rs_rate_scale_perform()
2249 tid_data = &priv->tid_data[lq_sta->lq.sta_id][tid]; in rs_rate_scale_perform()
2251 lq_sta->is_agg = 0; in rs_rate_scale_perform()
2253 lq_sta->is_agg = 1; in rs_rate_scale_perform()
2255 lq_sta->is_agg = 0; in rs_rate_scale_perform()
2262 if (!lq_sta->search_better_tbl) in rs_rate_scale_perform()
2263 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2265 active_tbl = 1 - lq_sta->active_tbl; in rs_rate_scale_perform()
2267 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2269 lq_sta->is_green = 0; in rs_rate_scale_perform()
2271 lq_sta->is_green = rs_use_green(sta); in rs_rate_scale_perform()
2272 is_green = lq_sta->is_green; in rs_rate_scale_perform()
2275 index = lq_sta->last_txrate_idx; in rs_rate_scale_perform()
2281 rate_mask = rs_get_supported_rates(lq_sta, hdr, tbl->lq_type); in rs_rate_scale_perform()
2287 if (lq_sta->band == IEEE80211_BAND_5GHZ) in rs_rate_scale_perform()
2290 (lq_sta->supp_rates << IWL_FIRST_OFDM_RATE)); in rs_rate_scale_perform()
2293 lq_sta->supp_rates); in rs_rate_scale_perform()
2303 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2306 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2307 tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2310 rs_update_rate_tbl(priv, ctx, lq_sta, tbl, in rs_rate_scale_perform()
2323 if ((lq_sta->max_rate_idx != -1) && in rs_rate_scale_perform()
2324 (lq_sta->max_rate_idx < index)) { in rs_rate_scale_perform()
2325 index = lq_sta->max_rate_idx; in rs_rate_scale_perform()
2352 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2366 if (lq_sta->search_better_tbl && in rs_rate_scale_perform()
2371 if (window->average_tpt > lq_sta->last_tpt) { in rs_rate_scale_perform()
2377 lq_sta->last_tpt); in rs_rate_scale_perform()
2380 lq_sta->enable_counter = 1; in rs_rate_scale_perform()
2383 lq_sta->active_tbl = active_tbl; in rs_rate_scale_perform()
2393 lq_sta->last_tpt); in rs_rate_scale_perform()
2399 active_tbl = lq_sta->active_tbl; in rs_rate_scale_perform()
2400 tbl = &(lq_sta->lq_info[active_tbl]); in rs_rate_scale_perform()
2404 current_tpt = lq_sta->last_tpt; in rs_rate_scale_perform()
2412 lq_sta->search_better_tbl = 0; in rs_rate_scale_perform()
2425 if ((lq_sta->max_rate_idx != -1) && in rs_rate_scale_perform()
2426 (lq_sta->max_rate_idx < high)) in rs_rate_scale_perform()
2503 if (lq_sta->last_bt_traffic > priv->bt_traffic_load) { in rs_rate_scale_perform()
2509 } else if (lq_sta->last_bt_traffic <= priv->bt_traffic_load) { in rs_rate_scale_perform()
2513 lq_sta->last_bt_traffic = priv->bt_traffic_load; in rs_rate_scale_perform()
2518 rs_stay_in_table(lq_sta, true); in rs_rate_scale_perform()
2552 rs_update_rate_tbl(priv, ctx, lq_sta, tbl, index, is_green); in rs_rate_scale_perform()
2557 rs_stay_in_table(lq_sta, false); in rs_rate_scale_perform()
2565 if (!update_lq && !done_search && !lq_sta->stay_in_tbl && window->counter) { in rs_rate_scale_perform()
2567 lq_sta->last_tpt = current_tpt; in rs_rate_scale_perform()
2572 rs_move_legacy_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2574 rs_move_siso_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2576 rs_move_mimo2_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2578 rs_move_mimo3_to_other(priv, lq_sta, conf, sta, index); in rs_rate_scale_perform()
2581 if (lq_sta->search_better_tbl) { in rs_rate_scale_perform()
2583 tbl = &(lq_sta->lq_info[(1 - lq_sta->active_tbl)]); in rs_rate_scale_perform()
2592 rs_fill_link_cmd(priv, lq_sta, tbl->current_rate); in rs_rate_scale_perform()
2593 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, CMD_ASYNC, false); in rs_rate_scale_perform()
2598 if (done_search && !lq_sta->stay_in_tbl) { in rs_rate_scale_perform()
2604 tbl1 = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_rate_scale_perform()
2606 lq_sta->action_counter > tbl1->max_search) { in rs_rate_scale_perform()
2608 rs_set_stay_in_table(priv, 1, lq_sta); in rs_rate_scale_perform()
2614 if (lq_sta->enable_counter && in rs_rate_scale_perform()
2615 (lq_sta->action_counter >= tbl1->max_search) && in rs_rate_scale_perform()
2617 if ((lq_sta->last_tpt > IWL_AGG_TPT_THREHOLD) && in rs_rate_scale_perform()
2618 (lq_sta->tx_agg_tid_en & (1 << tid)) && in rs_rate_scale_perform()
2620 u8 sta_id = lq_sta->lq.sta_id; in rs_rate_scale_perform()
2627 lq_sta, sta); in rs_rate_scale_perform()
2630 rs_set_stay_in_table(priv, 0, lq_sta); in rs_rate_scale_perform()
2636 lq_sta->last_txrate_idx = index; in rs_rate_scale_perform()
2655 struct iwl_lq_sta *lq_sta) in rs_initialize_lq() argument
2667 if (!sta || !lq_sta) in rs_initialize_lq()
2673 i = lq_sta->last_txrate_idx; in rs_initialize_lq()
2677 if (!lq_sta->search_better_tbl) in rs_initialize_lq()
2678 active_tbl = lq_sta->active_tbl; in rs_initialize_lq()
2680 active_tbl = 1 - lq_sta->active_tbl; in rs_initialize_lq()
2682 tbl = &(lq_sta->lq_info[active_tbl]); in rs_initialize_lq()
2700 rs_set_expected_tpt_table(lq_sta, tbl); in rs_initialize_lq()
2701 rs_fill_link_cmd(NULL, lq_sta, rate); in rs_initialize_lq()
2702 priv->stations[lq_sta->lq.sta_id].lq = &lq_sta->lq; in rs_initialize_lq()
2703 iwl_send_lq_cmd(priv, ctx, &lq_sta->lq, 0, true); in rs_initialize_lq()
2716 struct iwl_lq_sta *lq_sta = priv_sta; in rs_get_rate() local
2722 if (lq_sta) { in rs_get_rate()
2723 lq_sta->max_rate_idx = txrc->max_rate_idx; in rs_get_rate()
2725 (lq_sta->max_rate_idx != -1)) in rs_get_rate()
2726 lq_sta->max_rate_idx += IWL_FIRST_OFDM_RATE; in rs_get_rate()
2727 if ((lq_sta->max_rate_idx < 0) || in rs_get_rate()
2728 (lq_sta->max_rate_idx >= IWL_RATE_COUNT)) in rs_get_rate()
2729 lq_sta->max_rate_idx = -1; in rs_get_rate()
2733 if (lq_sta && !lq_sta->drv) { in rs_get_rate()
2742 rate_idx = lq_sta->last_txrate_idx; in rs_get_rate()
2744 if (lq_sta->last_rate_n_flags & RATE_MCS_HT_MSK) { in rs_get_rate()
2748 if (rs_extract_rate(lq_sta->last_rate_n_flags) >= in rs_get_rate()
2751 else if (rs_extract_rate(lq_sta->last_rate_n_flags) >= in rs_get_rate()
2755 if (lq_sta->last_rate_n_flags & RATE_MCS_SGI_MSK) in rs_get_rate()
2757 if (lq_sta->last_rate_n_flags & RATE_MCS_DUP_MSK) in rs_get_rate()
2759 if (lq_sta->last_rate_n_flags & RATE_MCS_HT40_MSK) in rs_get_rate()
2761 if (lq_sta->last_rate_n_flags & RATE_MCS_GF_MSK) in rs_get_rate()
2788 return &sta_priv->lq_sta; in rs_alloc_sta()
2801 struct iwl_lq_sta *lq_sta; in iwl_rs_rate_init() local
2806 lq_sta = &sta_priv->lq_sta; in iwl_rs_rate_init()
2810 lq_sta->lq.sta_id = sta_id; in iwl_rs_rate_init()
2814 rs_rate_scale_clear_window(&lq_sta->lq_info[j].win[i]); in iwl_rs_rate_init()
2816 lq_sta->flush_timer = 0; in iwl_rs_rate_init()
2817 lq_sta->supp_rates = sta->supp_rates[sband->band]; in iwl_rs_rate_init()
2826 lq_sta->is_dup = 0; in iwl_rs_rate_init()
2827 lq_sta->max_rate_idx = -1; in iwl_rs_rate_init()
2828 lq_sta->missed_rate_counter = IWL_MISSED_RATE_MAX; in iwl_rs_rate_init()
2829 lq_sta->is_green = rs_use_green(sta); in iwl_rs_rate_init()
2830 lq_sta->band = sband->band; in iwl_rs_rate_init()
2835 lq_sta->active_legacy_rate = 0; in iwl_rs_rate_init()
2837 lq_sta->active_legacy_rate |= BIT(sband->bitrates[i].hw_value); in iwl_rs_rate_init()
2843 lq_sta->active_siso_rate = ht_cap->mcs.rx_mask[0] << 1; in iwl_rs_rate_init()
2844 lq_sta->active_siso_rate |= ht_cap->mcs.rx_mask[0] & 0x1; in iwl_rs_rate_init()
2845 lq_sta->active_siso_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2846 lq_sta->active_siso_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2849 lq_sta->active_mimo2_rate = ht_cap->mcs.rx_mask[1] << 1; in iwl_rs_rate_init()
2850 lq_sta->active_mimo2_rate |= ht_cap->mcs.rx_mask[1] & 0x1; in iwl_rs_rate_init()
2851 lq_sta->active_mimo2_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2852 lq_sta->active_mimo2_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2854 lq_sta->active_mimo3_rate = ht_cap->mcs.rx_mask[2] << 1; in iwl_rs_rate_init()
2855 lq_sta->active_mimo3_rate |= ht_cap->mcs.rx_mask[2] & 0x1; in iwl_rs_rate_init()
2856 lq_sta->active_mimo3_rate &= ~((u16)0x2); in iwl_rs_rate_init()
2857 lq_sta->active_mimo3_rate <<= IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2860 lq_sta->active_siso_rate, in iwl_rs_rate_init()
2861 lq_sta->active_mimo2_rate, in iwl_rs_rate_init()
2862 lq_sta->active_mimo3_rate); in iwl_rs_rate_init()
2865 lq_sta->lq.general_params.single_stream_ant_msk = in iwl_rs_rate_init()
2867 lq_sta->lq.general_params.dual_stream_ant_msk = in iwl_rs_rate_init()
2870 if (!lq_sta->lq.general_params.dual_stream_ant_msk) { in iwl_rs_rate_init()
2871 lq_sta->lq.general_params.dual_stream_ant_msk = ANT_AB; in iwl_rs_rate_init()
2873 lq_sta->lq.general_params.dual_stream_ant_msk = in iwl_rs_rate_init()
2878 lq_sta->tx_agg_tid_en = IWL_AGG_ALL_TID; in iwl_rs_rate_init()
2879 lq_sta->drv = priv; in iwl_rs_rate_init()
2882 lq_sta->last_txrate_idx = rate_lowest_index(sband, sta); in iwl_rs_rate_init()
2884 lq_sta->last_txrate_idx += IWL_FIRST_OFDM_RATE; in iwl_rs_rate_init()
2885 lq_sta->is_agg = 0; in iwl_rs_rate_init()
2887 lq_sta->dbg_fixed_rate = 0; in iwl_rs_rate_init()
2890 rs_initialize_lq(priv, sta, lq_sta); in iwl_rs_rate_init()
2894 struct iwl_lq_sta *lq_sta, u32 new_rate) in rs_fill_link_cmd() argument
2904 container_of(lq_sta, struct iwl_station_priv, lq_sta); in rs_fill_link_cmd()
2905 struct iwl_link_quality_cmd *lq_cmd = &lq_sta->lq; in rs_fill_link_cmd()
2908 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
2911 rs_get_tbl_info_from_mcs(new_rate, lq_sta->band, in rs_fill_link_cmd()
2968 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
2977 rs_get_tbl_info_from_mcs(new_rate, lq_sta->band, &tbl_type, in rs_fill_link_cmd()
2993 new_rate = rs_get_lower_rate(lq_sta, &tbl_type, rate_idx, in rs_fill_link_cmd()
3015 rs_dbgfs_set_mcs(lq_sta, &new_rate, index); in rs_fill_link_cmd()
3062 static void rs_dbgfs_set_mcs(struct iwl_lq_sta *lq_sta, in rs_dbgfs_set_mcs() argument
3069 priv = lq_sta->drv; in rs_dbgfs_set_mcs()
3071 if (lq_sta->dbg_fixed_rate) { in rs_dbgfs_set_mcs()
3073 ((lq_sta->dbg_fixed_rate & RATE_MCS_ANT_ABC_MSK) in rs_dbgfs_set_mcs()
3076 *rate_n_flags = lq_sta->dbg_fixed_rate; in rs_dbgfs_set_mcs()
3079 lq_sta->dbg_fixed_rate = 0; in rs_dbgfs_set_mcs()
3093 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_write() local
3100 priv = lq_sta->drv; in rs_sta_dbgfs_scale_table_write()
3107 lq_sta->dbg_fixed_rate = parsed_rate; in rs_sta_dbgfs_scale_table_write()
3109 lq_sta->dbg_fixed_rate = 0; in rs_sta_dbgfs_scale_table_write()
3111 rs_program_fix_rate(priv, lq_sta); in rs_sta_dbgfs_scale_table_write()
3125 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_scale_table_read() local
3127 struct iwl_scale_tbl_info *tbl = &(lq_sta->lq_info[lq_sta->active_tbl]); in rs_sta_dbgfs_scale_table_read()
3129 priv = lq_sta->drv; in rs_sta_dbgfs_scale_table_read()
3134 desc += sprintf(buff+desc, "sta_id %d\n", lq_sta->lq.sta_id); in rs_sta_dbgfs_scale_table_read()
3136 lq_sta->total_failed, lq_sta->total_success, in rs_sta_dbgfs_scale_table_read()
3137 lq_sta->active_legacy_rate); in rs_sta_dbgfs_scale_table_read()
3139 lq_sta->dbg_fixed_rate); in rs_sta_dbgfs_scale_table_read()
3154 (lq_sta->is_green) ? "GF enabled" : "", in rs_sta_dbgfs_scale_table_read()
3155 (lq_sta->is_agg) ? "AGG on" : ""); in rs_sta_dbgfs_scale_table_read()
3158 lq_sta->last_rate_n_flags); in rs_sta_dbgfs_scale_table_read()
3161 lq_sta->lq.general_params.flags, in rs_sta_dbgfs_scale_table_read()
3162 lq_sta->lq.general_params.mimo_delimiter, in rs_sta_dbgfs_scale_table_read()
3163 lq_sta->lq.general_params.single_stream_ant_msk, in rs_sta_dbgfs_scale_table_read()
3164 lq_sta->lq.general_params.dual_stream_ant_msk); in rs_sta_dbgfs_scale_table_read()
3168 le16_to_cpu(lq_sta->lq.agg_params.agg_time_limit), in rs_sta_dbgfs_scale_table_read()
3169 lq_sta->lq.agg_params.agg_dis_start_th, in rs_sta_dbgfs_scale_table_read()
3170 lq_sta->lq.agg_params.agg_frame_cnt_limit); in rs_sta_dbgfs_scale_table_read()
3174 lq_sta->lq.general_params.start_rate_index[0], in rs_sta_dbgfs_scale_table_read()
3175 lq_sta->lq.general_params.start_rate_index[1], in rs_sta_dbgfs_scale_table_read()
3176 lq_sta->lq.general_params.start_rate_index[2], in rs_sta_dbgfs_scale_table_read()
3177 lq_sta->lq.general_params.start_rate_index[3]); in rs_sta_dbgfs_scale_table_read()
3181 le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags)); in rs_sta_dbgfs_scale_table_read()
3184 i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags), in rs_sta_dbgfs_scale_table_read()
3188 i, le32_to_cpu(lq_sta->lq.rs_table[i].rate_n_flags), in rs_sta_dbgfs_scale_table_read()
3212 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_stats_table_read() local
3222 lq_sta->active_tbl == i ? "*" : "x", in rs_sta_dbgfs_stats_table_read()
3223 lq_sta->lq_info[i].lq_type, in rs_sta_dbgfs_stats_table_read()
3224 lq_sta->lq_info[i].is_SGI, in rs_sta_dbgfs_stats_table_read()
3225 lq_sta->lq_info[i].is_ht40, in rs_sta_dbgfs_stats_table_read()
3226 lq_sta->lq_info[i].is_dup, in rs_sta_dbgfs_stats_table_read()
3227 lq_sta->is_green, in rs_sta_dbgfs_stats_table_read()
3228 lq_sta->lq_info[i].current_rate); in rs_sta_dbgfs_stats_table_read()
3232 lq_sta->lq_info[i].win[j].counter, in rs_sta_dbgfs_stats_table_read()
3233 lq_sta->lq_info[i].win[j].success_counter, in rs_sta_dbgfs_stats_table_read()
3234 lq_sta->lq_info[i].win[j].success_ratio); in rs_sta_dbgfs_stats_table_read()
3251 struct iwl_lq_sta *lq_sta = file->private_data; in rs_sta_dbgfs_rate_scale_data_read() local
3252 struct iwl_scale_tbl_info *tbl = &lq_sta->lq_info[lq_sta->active_tbl]; in rs_sta_dbgfs_rate_scale_data_read()
3259 tbl->expected_tpt[lq_sta->last_txrate_idx]); in rs_sta_dbgfs_rate_scale_data_read()
3263 iwl_rates[lq_sta->last_txrate_idx].ieee >> 1); in rs_sta_dbgfs_rate_scale_data_read()
3277 struct iwl_lq_sta *lq_sta = priv_sta; in rs_add_debugfs() local
3278 lq_sta->rs_sta_dbgfs_scale_table_file = in rs_add_debugfs()
3280 lq_sta, &rs_sta_dbgfs_scale_table_ops); in rs_add_debugfs()
3281 lq_sta->rs_sta_dbgfs_stats_table_file = in rs_add_debugfs()
3283 lq_sta, &rs_sta_dbgfs_stats_table_ops); in rs_add_debugfs()
3284 lq_sta->rs_sta_dbgfs_rate_scale_data_file = in rs_add_debugfs()
3286 lq_sta, &rs_sta_dbgfs_rate_scale_data_ops); in rs_add_debugfs()
3287 lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file = in rs_add_debugfs()
3289 &lq_sta->tx_agg_tid_en); in rs_add_debugfs()
3295 struct iwl_lq_sta *lq_sta = priv_sta; in rs_remove_debugfs() local
3296 debugfs_remove(lq_sta->rs_sta_dbgfs_scale_table_file); in rs_remove_debugfs()
3297 debugfs_remove(lq_sta->rs_sta_dbgfs_stats_table_file); in rs_remove_debugfs()
3298 debugfs_remove(lq_sta->rs_sta_dbgfs_rate_scale_data_file); in rs_remove_debugfs()
3299 debugfs_remove(lq_sta->rs_sta_dbgfs_tx_agg_tid_en_file); in rs_remove_debugfs()