Lines Matching refs:rate

203 	struct rs_rate *rate = &tbl->rate;  in rs_sgi_allow()  local
207 if (is_ht20(rate) && (ht_cap->cap & in rs_sgi_allow()
210 if (is_ht40(rate) && (ht_cap->cap & in rs_sgi_allow()
213 if (is_ht80(rate) && (vht_cap->cap & in rs_sgi_allow()
527 static inline void rs_dump_rate(struct iwl_mvm *mvm, const struct rs_rate *rate, in rs_dump_rate() argument
532 prefix, rs_pretty_lq_type(rate->type), in rs_dump_rate()
533 rate->index, rs_pretty_ant(rate->ant), in rs_dump_rate()
534 rate->bw, rate->sgi, rate->ldpc, rate->stbc); in rs_dump_rate()
724 struct rs_rate *rate) in ucode_rate_from_rs_rate() argument
727 int index = rate->index; in ucode_rate_from_rs_rate()
729 ucode_rate |= ((rate->ant << RATE_MCS_ANT_POS) & in ucode_rate_from_rs_rate()
732 if (is_legacy(rate)) { in ucode_rate_from_rs_rate()
739 if (is_ht(rate)) { in ucode_rate_from_rs_rate()
746 if (is_ht_siso(rate)) in ucode_rate_from_rs_rate()
748 else if (is_ht_mimo2(rate)) in ucode_rate_from_rs_rate()
752 } else if (is_vht(rate)) { in ucode_rate_from_rs_rate()
758 if (is_vht_siso(rate)) in ucode_rate_from_rs_rate()
760 else if (is_vht_mimo2(rate)) in ucode_rate_from_rs_rate()
766 IWL_ERR(mvm, "Invalid rate->type %d\n", rate->type); in ucode_rate_from_rs_rate()
769 if (is_siso(rate) && rate->stbc) { in ucode_rate_from_rs_rate()
775 ucode_rate |= rate->bw; in ucode_rate_from_rs_rate()
776 if (rate->sgi) in ucode_rate_from_rs_rate()
778 if (rate->ldpc) in ucode_rate_from_rs_rate()
787 struct rs_rate *rate) in rs_rate_from_ucode_rate() argument
793 memset(rate, 0, sizeof(*rate)); in rs_rate_from_ucode_rate()
794 rate->index = iwl_hwrate_to_plcp_idx(ucode_rate); in rs_rate_from_ucode_rate()
796 if (rate->index == IWL_RATE_INVALID) in rs_rate_from_ucode_rate()
799 rate->ant = (ant_msk >> RATE_MCS_ANT_POS); in rs_rate_from_ucode_rate()
806 rate->type = LQ_LEGACY_A; in rs_rate_from_ucode_rate()
808 rate->type = LQ_LEGACY_G; in rs_rate_from_ucode_rate()
816 rate->sgi = true; in rs_rate_from_ucode_rate()
818 rate->ldpc = true; in rs_rate_from_ucode_rate()
820 rate->stbc = true; in rs_rate_from_ucode_rate()
822 rate->bfer = true; in rs_rate_from_ucode_rate()
824 rate->bw = ucode_rate & RATE_MCS_CHAN_WIDTH_MSK; in rs_rate_from_ucode_rate()
831 rate->type = LQ_HT_SISO; in rs_rate_from_ucode_rate()
832 WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1, in rs_rate_from_ucode_rate()
834 rate->stbc, rate->bfer); in rs_rate_from_ucode_rate()
836 rate->type = LQ_HT_MIMO2; in rs_rate_from_ucode_rate()
846 rate->type = LQ_VHT_SISO; in rs_rate_from_ucode_rate()
847 WARN_ONCE(!rate->stbc && !rate->bfer && num_of_ant != 1, in rs_rate_from_ucode_rate()
849 rate->stbc, rate->bfer); in rs_rate_from_ucode_rate()
851 rate->type = LQ_VHT_MIMO2; in rs_rate_from_ucode_rate()
858 WARN_ON_ONCE(rate->bw == RATE_MCS_CHAN_WIDTH_160); in rs_rate_from_ucode_rate()
859 WARN_ON_ONCE(rate->bw == RATE_MCS_CHAN_WIDTH_80 && in rs_rate_from_ucode_rate()
860 !is_vht(rate)); in rs_rate_from_ucode_rate()
867 static int rs_toggle_antenna(u32 valid_ant, struct rs_rate *rate) in rs_toggle_antenna() argument
871 if (!rate->ant || rate->ant > ANT_ABC) in rs_toggle_antenna()
874 if (!rs_is_valid_ant(valid_ant, rate->ant)) in rs_toggle_antenna()
877 new_ant_type = ant_toggle_lookup[rate->ant]; in rs_toggle_antenna()
879 while ((new_ant_type != rate->ant) && in rs_toggle_antenna()
883 if (new_ant_type == rate->ant) in rs_toggle_antenna()
886 rate->ant = new_ant_type; in rs_toggle_antenna()
892 struct rs_rate *rate) in rs_get_supported_rates() argument
894 if (is_legacy(rate)) in rs_get_supported_rates()
896 else if (is_siso(rate)) in rs_get_supported_rates()
898 else if (is_mimo2(rate)) in rs_get_supported_rates()
960 struct rs_rate *rate) in rs_rate_supported() argument
962 return BIT(rate->index) & rs_get_supported_rates(lq_sta, rate); in rs_rate_supported()
969 struct rs_rate *rate) in rs_get_lower_rate_in_column() argument
976 rate_mask = rs_get_supported_rates(lq_sta, rate); in rs_get_lower_rate_in_column()
977 high_low = rs_get_adjacent_rate(mvm, rate->index, rate_mask, in rs_get_lower_rate_in_column()
978 rate->type); in rs_get_lower_rate_in_column()
985 rate->index = low; in rs_get_lower_rate_in_column()
991 struct rs_rate *rate) in rs_get_lower_rate_down_column() argument
995 if (is_legacy(rate)) { in rs_get_lower_rate_down_column()
998 } else if (is_siso(rate)) { in rs_get_lower_rate_down_column()
1001 rate->type = LQ_LEGACY_A; in rs_get_lower_rate_down_column()
1003 rate->type = LQ_LEGACY_G; in rs_get_lower_rate_down_column()
1005 rate->bw = RATE_MCS_CHAN_WIDTH_20; in rs_get_lower_rate_down_column()
1007 WARN_ON_ONCE(rate->index < IWL_RATE_MCS_0_INDEX || in rs_get_lower_rate_down_column()
1008 rate->index > IWL_RATE_MCS_9_INDEX); in rs_get_lower_rate_down_column()
1010 rate->index = rs_ht_to_legacy[rate->index]; in rs_get_lower_rate_down_column()
1011 rate->ldpc = false; in rs_get_lower_rate_down_column()
1014 rate->type = is_vht_mimo2(rate) ? in rs_get_lower_rate_down_column()
1018 if (num_of_ant(rate->ant) > 1) in rs_get_lower_rate_down_column()
1019 rate->ant = first_antenna(iwl_mvm_get_valid_tx_ant(mvm)); in rs_get_lower_rate_down_column()
1022 rate->sgi = false; 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()
1071 static inline enum rs_column rs_get_column_from_rate(struct rs_rate *rate) in rs_get_column_from_rate() argument
1073 if (is_legacy(rate)) { in rs_get_column_from_rate()
1074 if (rate->ant == ANT_A) in rs_get_column_from_rate()
1077 if (rate->ant == ANT_B) in rs_get_column_from_rate()
1083 if (is_siso(rate)) { in rs_get_column_from_rate()
1084 if (rate->ant == ANT_A || rate->stbc || rate->bfer) in rs_get_column_from_rate()
1085 return rate->sgi ? RS_COLUMN_SISO_ANT_A_SGI : in rs_get_column_from_rate()
1088 if (rate->ant == ANT_B) in rs_get_column_from_rate()
1089 return rate->sgi ? RS_COLUMN_SISO_ANT_B_SGI : in rs_get_column_from_rate()
1095 if (is_mimo(rate)) in rs_get_column_from_rate()
1096 return rate->sgi ? RS_COLUMN_MIMO2_SGI : RS_COLUMN_MIMO2; in rs_get_column_from_rate()
1239 if (WARN_ON_ONCE(!rs_rate_column_match(&lq_rate, &curr_tbl->rate))) { in iwl_mvm_rs_tx_status()
1243 rs_dump_rate(mvm, &tmp_tbl->rate, "ACTIVE"); in iwl_mvm_rs_tx_status()
1245 rs_dump_rate(mvm, &tmp_tbl->rate, "SEARCH"); in iwl_mvm_rs_tx_status()
1299 if (rs_rate_column_match(&lq_rate, &curr_tbl->rate)) in iwl_mvm_rs_tx_status()
1302 &other_tbl->rate)) in iwl_mvm_rs_tx_status()
1468 struct rs_rate *rate = &tbl->rate; in rs_set_expected_tpt_table() local
1471 tbl->expected_tpt = rs_get_expected_tpt_table(lq_sta, column, rate->bw); in rs_set_expected_tpt_table()
1507 tbl->rate.type); in rs_get_best_rate()
1621 rs_fill_lq_cmd(mvm, sta, lq_sta, &tbl->rate); in rs_update_rate_tbl()
1716 struct rs_rate *rate = &search_tbl->rate; in rs_switch_to_column() local
1726 rate->sgi = column->sgi; in rs_switch_to_column()
1727 rate->ant = column->ant; in rs_switch_to_column()
1731 rate->type = LQ_LEGACY_A; in rs_switch_to_column()
1733 rate->type = LQ_LEGACY_G; in rs_switch_to_column()
1735 rate->bw = RATE_MCS_CHAN_WIDTH_20; in rs_switch_to_column()
1736 rate->ldpc = false; in rs_switch_to_column()
1739 rate->type = lq_sta->is_vht ? LQ_VHT_SISO : LQ_HT_SISO; in rs_switch_to_column()
1742 rate->type = lq_sta->is_vht ? LQ_VHT_MIMO2 : LQ_HT_MIMO2; in rs_switch_to_column()
1749 rate->bw = rs_bw_from_sta_bw(sta); in rs_switch_to_column()
1750 rate->ldpc = lq_sta->ldpc; in rs_switch_to_column()
1763 rate_mask, rate->index); in rs_switch_to_column()
1775 rate->index = rate_idx; in rs_switch_to_column()
1779 col_id, rate->index); in rs_switch_to_column()
1784 rate->type = LQ_NONE; in rs_switch_to_column()
1900 struct rs_rate *rate, enum ieee80211_band band) in rs_tpc_allowed() argument
1902 int index = rate->index; in rs_tpc_allowed()
1917 IWL_DEBUG_RATE(mvm, "check rate, table type: %d\n", rate->type); in rs_tpc_allowed()
1918 if (is_legacy(rate)) in rs_tpc_allowed()
1920 if (is_ht(rate)) in rs_tpc_allowed()
1922 if (is_vht(rate)) in rs_tpc_allowed()
2007 struct rs_rate *rate = &tbl->rate; in rs_tpc_perform() local
2032 if (!rs_tpc_allowed(mvm, vif, rate, band)) { in rs_tpc_perform()
2113 struct rs_rate *rate; in rs_rate_scale_perform() local
2128 rate = &tbl->rate; in rs_rate_scale_perform()
2142 rate_mask = rs_get_supported_rates(lq_sta, rate); in rs_rate_scale_perform()
2148 rate->type = LQ_NONE; in rs_rate_scale_perform()
2177 rs_pretty_lq_type(rate->type), in rs_rate_scale_perform()
2223 rate->type = LQ_NONE; in rs_rate_scale_perform()
2230 index = tbl->rate.index; in rs_rate_scale_perform()
2246 high_low = rs_get_adjacent_rate(mvm, index, rate_mask, rate->type); in rs_rate_scale_perform()
2263 rs_pretty_lq_type(rate->type), index, current_tpt, sr, in rs_rate_scale_perform()
2270 if (is_mimo(rate) && in rs_rate_scale_perform()
2313 tbl->rate.index = index; in rs_rate_scale_perform()
2357 index = tbl->rate.index; in rs_rate_scale_perform()
2359 rs_dump_rate(mvm, &tbl->rate, in rs_rate_scale_perform()
2374 if (is_legacy(&tbl1->rate)) { in rs_rate_scale_perform()
2446 struct rs_rate *rate) in rs_get_initial_rate() argument
2468 rate->ant = first_antenna(valid_tx_ant); in rs_get_initial_rate()
2470 rate->ant = best_ant; in rs_get_initial_rate()
2472 rate->sgi = false; in rs_get_initial_rate()
2473 rate->ldpc = false; in rs_get_initial_rate()
2474 rate->bw = RATE_MCS_CHAN_WIDTH_20; in rs_get_initial_rate()
2476 rate->index = find_first_bit(&lq_sta->active_legacy_rate, in rs_get_initial_rate()
2480 rate->type = LQ_LEGACY_A; in rs_get_initial_rate()
2484 rate->type = LQ_LEGACY_G; in rs_get_initial_rate()
2494 rate->index = rate_idx; in rs_get_initial_rate()
2500 IWL_DEBUG_RATE(mvm, "rate_idx %d ANT %s\n", rate->index, in rs_get_initial_rate()
2501 rs_pretty_ant(rate->ant)); in rs_get_initial_rate()
2536 struct rs_rate *rate; in rs_initialize_lq() local
2548 rate = &tbl->rate; 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()
2553 WARN_ON_ONCE(rate->ant != ANT_A && rate->ant != ANT_B); in rs_initialize_lq()
2554 if (rate->ant == ANT_A) in rs_initialize_lq()
2560 rs_fill_lq_cmd(mvm, sta, lq_sta, rate); in rs_initialize_lq()
2744 void iwl_mvm_update_frame_stats(struct iwl_mvm *mvm, u32 rate, bool agg) in iwl_mvm_update_frame_stats() argument
2755 switch (rate & RATE_MCS_CHAN_WIDTH_MSK) { in iwl_mvm_update_frame_stats()
2766 WARN_ONCE(1, "bad BW. rate 0x%x", rate); in iwl_mvm_update_frame_stats()
2769 if (rate & RATE_MCS_HT_MSK) { in iwl_mvm_update_frame_stats()
2771 mcs = rate & RATE_HT_MCS_RATE_CODE_MSK; in iwl_mvm_update_frame_stats()
2772 nss = ((rate & RATE_HT_MCS_NSS_MSK) >> RATE_HT_MCS_NSS_POS) + 1; in iwl_mvm_update_frame_stats()
2773 } else if (rate & RATE_MCS_VHT_MSK) { in iwl_mvm_update_frame_stats()
2775 mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK; in iwl_mvm_update_frame_stats()
2776 nss = ((rate & RATE_VHT_MCS_NSS_MSK) >> in iwl_mvm_update_frame_stats()
2787 if (rate & RATE_MCS_SGI_MSK) in iwl_mvm_update_frame_stats()
2792 mvm->drv_rx_stats.last_rates[mvm->drv_rx_stats.last_frame_idx] = rate; in iwl_mvm_update_frame_stats()
2916 struct rs_rate rate; in rs_build_rates_table_from_fixed() local
2925 rs_rate_from_ucode_rate(ucode_rate, band, &rate); in rs_build_rates_table_from_fixed()
2927 if (is_mimo(&rate)) in rs_build_rates_table_from_fixed()
2943 struct rs_rate *rate, in rs_fill_rates_for_column() argument
2951 int prev_rate_idx = rate->index; in rs_fill_rates_for_column()
2958 rate)); in rs_fill_rates_for_column()
2961 rs_toggle_antenna(valid_tx_ant, rate); in rs_fill_rates_for_column()
2964 prev_rate_idx = rate->index; in rs_fill_rates_for_column()
2965 bottom_reached = rs_get_lower_rate_in_column(lq_sta, rate); in rs_fill_rates_for_column()
2966 if (bottom_reached && !is_legacy(rate)) in rs_fill_rates_for_column()
2970 if (!bottom_reached && !is_legacy(rate)) in rs_fill_rates_for_column()
2971 rate->index = prev_rate_idx; in rs_fill_rates_for_column()
3001 struct rs_rate rate; in rs_build_rates_table() local
3007 memcpy(&rate, initial_rate, sizeof(rate)); in rs_build_rates_table()
3014 rate.stbc = true; in rs_build_rates_table()
3016 if (is_siso(&rate)) { in rs_build_rates_table()
3019 } else if (is_mimo(&rate)) { 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()
3034 if (is_siso(&rate)) { in rs_build_rates_table()
3038 } else if (is_legacy(&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()
3282 int rs_pretty_print_rate(char *buf, const u32 rate) in rs_pretty_print_rate() argument
3287 u8 ant = (rate & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS; in rs_pretty_print_rate()
3289 if (!(rate & RATE_MCS_HT_MSK) && in rs_pretty_print_rate()
3290 !(rate & RATE_MCS_VHT_MSK)) { in rs_pretty_print_rate()
3291 int index = iwl_hwrate_to_plcp_idx(rate); in rs_pretty_print_rate()
3299 if (rate & RATE_MCS_VHT_MSK) { in rs_pretty_print_rate()
3301 mcs = rate & RATE_VHT_MCS_RATE_CODE_MSK; in rs_pretty_print_rate()
3302 nss = ((rate & RATE_VHT_MCS_NSS_MSK) in rs_pretty_print_rate()
3304 } else if (rate & RATE_MCS_HT_MSK) { in rs_pretty_print_rate()
3306 mcs = rate & RATE_HT_MCS_INDEX_MSK; in rs_pretty_print_rate()
3311 switch (rate & RATE_MCS_CHAN_WIDTH_MSK) { in rs_pretty_print_rate()
3330 (rate & RATE_MCS_SGI_MSK) ? "SGI " : "NGI ", in rs_pretty_print_rate()
3331 (rate & RATE_MCS_HT_STBC_MSK) ? "STBC " : "", in rs_pretty_print_rate()
3332 (rate & RATE_MCS_LDPC_MSK) ? "LDPC " : "", in rs_pretty_print_rate()
3333 (rate & RATE_MCS_BF_MSK) ? "BF " : "", in rs_pretty_print_rate()
3334 (rate & RATE_MCS_ZLF_MSK) ? "ZLF " : ""); in rs_pretty_print_rate()
3395 struct rs_rate *rate = &tbl->rate; in rs_sta_dbgfs_scale_table_read() local
3413 (is_legacy(rate)) ? "legacy" : in rs_sta_dbgfs_scale_table_read()
3414 is_vht(rate) ? "VHT" : "HT"); in rs_sta_dbgfs_scale_table_read()
3415 if (!is_legacy(rate)) { in rs_sta_dbgfs_scale_table_read()
3417 (is_siso(rate)) ? "SISO" : "MIMO2"); in rs_sta_dbgfs_scale_table_read()
3419 (is_ht20(rate)) ? "20MHz" : in rs_sta_dbgfs_scale_table_read()
3420 (is_ht40(rate)) ? "40MHz" : in rs_sta_dbgfs_scale_table_read()
3421 (is_ht80(rate)) ? "80Mhz" : "BAD BW"); in rs_sta_dbgfs_scale_table_read()
3423 (rate->sgi) ? "SGI" : "NGI", in rs_sta_dbgfs_scale_table_read()
3424 (rate->ldpc) ? "LDPC" : "BCC", in rs_sta_dbgfs_scale_table_read()
3486 struct rs_rate *rate; in rs_sta_dbgfs_stats_table_read() local
3495 rate = &tbl->rate; in rs_sta_dbgfs_stats_table_read()
3500 rate->type, in rs_sta_dbgfs_stats_table_read()
3501 rate->sgi, in rs_sta_dbgfs_stats_table_read()
3502 is_ht20(rate) ? "20Mhz" : in rs_sta_dbgfs_stats_table_read()
3503 is_ht40(rate) ? "40Mhz" : in rs_sta_dbgfs_stats_table_read()
3504 is_ht80(rate) ? "80Mhz" : "ERR", in rs_sta_dbgfs_stats_table_read()
3505 rate->index); in rs_sta_dbgfs_stats_table_read()
3559 int col, rate; in rs_sta_dbgfs_drv_tx_stats_read() local
3573 for (rate = 0; rate < IWL_RATE_COUNT; rate++) in rs_sta_dbgfs_drv_tx_stats_read()
3574 pos += scnprintf(pos, endpos - pos, "%s,", rate_name[rate]); in rs_sta_dbgfs_drv_tx_stats_read()
3581 for (rate = 0; rate < IWL_RATE_COUNT; rate++) { in rs_sta_dbgfs_drv_tx_stats_read()
3582 stats = &(lq_sta->pers.tx_stats[col][rate]); in rs_sta_dbgfs_drv_tx_stats_read()