Lines Matching refs:rates

301 		  "no overlap between basic rates (0x%x) and user mask (0x%x on band %d) - clearing the latter",
330 return; /* assume basic rates unknown and accept rate */
357 info->control.rates[0].flags |= IEEE80211_TX_RC_S1G_MCS;
358 info->control.rates[0].idx = 0;
366 info->control.rates[0].idx = 0;
377 info->control.rates[0].idx = i;
381 "no supported rates for sta %pM (0x%x, band %d) in rate_mask 0x%x with flags 0x%x\n",
387 info->control.rates[0].count =
411 info->control.rates[0].idx = mcast_rate - 1;
422 rc_send_low_basicrate(&info->control.rates[0],
538 /* handle VHT rates */
555 /* also try the legacy rates. */
562 /* handle HT rates */
566 /* also try the legacy rates. */
576 /* handle legacy rates */
581 /* if HT BSS, and we handle a data frame, also try HT rates */
609 * configure supported rates and TX rate mask in incompatible way,
618 struct ieee80211_tx_rate *rates,
631 * XXX: Should this check all retry rates?
633 if (!(rates[0].flags &
638 rate = &sband->bitrates[rates[0].idx];
663 rates[i].idx = -1;
666 if (rates[i].idx < 0) {
675 if (rates[i].flags & IEEE80211_TX_RC_MCS) {
676 WARN_ON(rates[i].idx > 76);
678 if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
680 rates[i].flags |=
685 if (rates[i].flags & IEEE80211_TX_RC_VHT_MCS) {
686 WARN_ON(ieee80211_rate_get_vht_mcs(&rates[i]) > 9);
692 rates[i].flags |= IEEE80211_TX_RC_USE_RTS_CTS;
697 if (WARN_ON_ONCE(rates[i].idx >= sband->n_bitrates)) {
698 rates[i].idx = -1;
702 rate = &sband->bitrates[rates[i].idx];
707 rates[i].flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE;
710 if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
713 rates[i].flags |= IEEE80211_TX_RC_USE_CTS_PROTECT;
720 struct ieee80211_tx_rate *rates,
727 ratetbl = rcu_dereference(sta->rates);
732 if (i < ARRAY_SIZE(info->control.rates) &&
733 info->control.rates[i].idx >= 0 &&
734 info->control.rates[i].count) {
735 if (rates != info->control.rates)
736 rates[i] = info->control.rates[i];
738 rates[i].idx = ratetbl->rate[i].idx;
739 rates[i].flags = ratetbl->rate[i].flags;
741 rates[i].count = ratetbl->rate[i].count_rts;
743 rates[i].count = ratetbl->rate[i].count_cts;
745 rates[i].count = ratetbl->rate[i].count;
747 rates[i].idx = -1;
748 rates[i].count = 0;
751 if (rates[i].idx < 0 || !rates[i].count)
792 /* Filter out rates that the STA does not support */
809 struct ieee80211_sta_rates *rates)
823 if (rates->rate[i].idx < 0)
826 rate_idx_match_mask(&rates->rate[i].idx, &rates->rate[i].flags,
835 struct ieee80211_tx_rate *rates,
846 * default mask (allow all rates) is used to save some processing for
860 /* Skip invalid rates */
861 if (rates[i].idx < 0)
864 rate_flags = rates[i].flags;
865 rate_idx_match_mask(&rates[i].idx, &rate_flags, sband,
867 rates[i].flags = rate_flags;
916 info->control.rates[i].idx = -1;
917 info->control.rates[i].flags = 0;
918 info->control.rates[i].count = 0;
944 info->control.rates,
945 ARRAY_SIZE(info->control.rates));
950 struct ieee80211_sta_rates *rates)
959 rate_control_apply_mask_ratetbl(sta, sband, rates);
966 old = rcu_dereference_protected(pubsta->rates, true);
967 rcu_assign_pointer(pubsta->rates, rates);