Lines Matching refs:rates

292 		  "no overlap between basic rates (0x%x) and user mask (0x%x on band %d) - clearing the latter",
325 return; /* assume basic rates unknown and accept rate */
352 info->control.rates[0].flags |= IEEE80211_TX_RC_S1G_MCS;
353 info->control.rates[0].idx = 0;
361 info->control.rates[0].idx = 0;
372 info->control.rates[0].idx = i;
376 "no supported rates for sta %pM (0x%x, band %d) in rate_mask 0x%x with flags 0x%x\n",
382 info->control.rates[0].count =
406 info->control.rates[0].idx = mcast_rate - 1;
417 rc_send_low_basicrate(&info->control.rates[0],
533 /* handle VHT rates */
550 /* also try the legacy rates. */
557 /* handle HT rates */
561 /* also try the legacy rates. */
571 /* handle legacy rates */
576 /* if HT BSS, and we handle a data frame, also try HT rates */
604 * configure supported rates and TX rate mask in incompatible way,
613 struct ieee80211_tx_rate *rates,
626 * XXX: Should this check all retry rates?
628 if (!(rates[0].flags &
633 rate = &sband->bitrates[rates[0].idx];
658 rates[i].idx = -1;
661 if (rates[i].idx < 0) {
670 if (rates[i].flags & IEEE80211_TX_RC_MCS) {
671 WARN_ON(rates[i].idx > 76);
673 if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
675 rates[i].flags |=
680 if (rates[i].flags & IEEE80211_TX_RC_VHT_MCS) {
681 WARN_ON(ieee80211_rate_get_vht_mcs(&rates[i]) > 9);
687 rates[i].flags |= IEEE80211_TX_RC_USE_RTS_CTS;
692 if (WARN_ON_ONCE(rates[i].idx >= sband->n_bitrates)) {
693 rates[i].idx = -1;
697 rate = &sband->bitrates[rates[i].idx];
702 rates[i].flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE;
705 if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
708 rates[i].flags |= IEEE80211_TX_RC_USE_CTS_PROTECT;
715 struct ieee80211_tx_rate *rates,
722 ratetbl = rcu_dereference(sta->rates);
727 if (i < ARRAY_SIZE(info->control.rates) &&
728 info->control.rates[i].idx >= 0 &&
729 info->control.rates[i].count) {
730 if (rates != info->control.rates)
731 rates[i] = info->control.rates[i];
733 rates[i].idx = ratetbl->rate[i].idx;
734 rates[i].flags = ratetbl->rate[i].flags;
736 rates[i].count = ratetbl->rate[i].count_rts;
738 rates[i].count = ratetbl->rate[i].count_cts;
740 rates[i].count = ratetbl->rate[i].count;
742 rates[i].idx = -1;
743 rates[i].count = 0;
746 if (rates[i].idx < 0 || !rates[i].count)
787 /* Filter out rates that the STA does not support */
804 struct ieee80211_sta_rates *rates)
818 if (rates->rate[i].idx < 0)
821 rate_idx_match_mask(&rates->rate[i].idx, &rates->rate[i].flags,
830 struct ieee80211_tx_rate *rates,
841 * default mask (allow all rates) is used to save some processing for
855 /* Skip invalid rates */
856 if (rates[i].idx < 0)
859 rate_flags = rates[i].flags;
860 rate_idx_match_mask(&rates[i].idx, &rate_flags, sband,
862 rates[i].flags = rate_flags;
908 info->control.rates[i].idx = -1;
909 info->control.rates[i].flags = 0;
910 info->control.rates[i].count = 0;
936 info->control.rates,
937 ARRAY_SIZE(info->control.rates));
942 struct ieee80211_sta_rates *rates)
951 rate_control_apply_mask_ratetbl(sta, sband, rates);
958 old = rcu_dereference_protected(pubsta->rates, true);
959 rcu_assign_pointer(pubsta->rates, rates);