• Home
  • Raw
  • Download

Lines Matching +full:in +full:- +full:band +full:- +full:status

1 // SPDX-License-Identifier: ISC
15 /* Number of kilo-symbols (symbols * 1024) for a packet with (bps) bits per
16 * symbol. We use k-symbols to avoid rounding in the _TIME macros below.
20 /* Transmission time (in 1024 * usec) for a packet containing (ksyms) * 1024
36 /* These should match the values in enum nl80211_he_gi */
41 /* Transmission time (1024 usec) for a packet containing (ksyms) * k-symbols */
63 * Define group sort order: HT40 -> SGI -> #streams
92 _streams - 1
97 _MAX(0, 16 - __builtin_clz(duration))
126 (_streams) - 1)
171 (_streams) - 1)
409 struct ieee80211_rx_status *status, in ieee80211_get_rate_duration() argument
412 bool sgi = status->enc_flags & RX_ENC_FLAG_SHORT_GI; in ieee80211_get_rate_duration()
417 switch (status->bw) { in ieee80211_get_rate_duration()
435 switch (status->encoding) { in ieee80211_get_rate_duration()
437 streams = status->nss; in ieee80211_get_rate_duration()
438 idx = status->rate_idx; in ieee80211_get_rate_duration()
442 streams = ((status->rate_idx >> 3) & 3) + 1; in ieee80211_get_rate_duration()
443 idx = status->rate_idx & 7; in ieee80211_get_rate_duration()
447 streams = status->nss; in ieee80211_get_rate_duration()
448 idx = status->rate_idx; in ieee80211_get_rate_duration()
449 group = HE_GROUP_IDX(streams, status->he_gi, bw); in ieee80211_get_rate_duration()
456 if (WARN_ON_ONCE((status->encoding != RX_ENC_HE && streams > 4) || in ieee80211_get_rate_duration()
457 (status->encoding == RX_ENC_HE && streams > 8))) in ieee80211_get_rate_duration()
472 struct ieee80211_rx_status *status, in ieee80211_calc_rx_airtime() argument
478 if (status->encoding == RX_ENC_LEGACY) { in ieee80211_calc_rx_airtime()
480 bool sp = status->enc_flags & RX_ENC_FLAG_SHORTPRE; in ieee80211_calc_rx_airtime()
483 if (WARN_ON_ONCE(status->band > NL80211_BAND_5GHZ)) in ieee80211_calc_rx_airtime()
486 sband = hw->wiphy->bands[status->band]; in ieee80211_calc_rx_airtime()
487 if (!sband || status->rate_idx >= sband->n_bitrates) in ieee80211_calc_rx_airtime()
490 rate = &sband->bitrates[status->rate_idx]; in ieee80211_calc_rx_airtime()
491 cck = rate->flags & IEEE80211_RATE_MANDATORY_B; in ieee80211_calc_rx_airtime()
493 return ieee80211_calc_legacy_rate_duration(rate->bitrate, sp, in ieee80211_calc_rx_airtime()
497 duration = ieee80211_get_rate_duration(hw, status, &overhead); in ieee80211_calc_rx_airtime()
510 struct ieee80211_rx_status *stat, u8 band, in ieee80211_fill_rate_info() argument
513 struct ieee80211_supported_band *sband = hw->wiphy->bands[band]; in ieee80211_fill_rate_info()
519 stat->bw = ri->bw; in ieee80211_fill_rate_info()
520 stat->nss = ri->nss; in ieee80211_fill_rate_info()
521 stat->rate_idx = ri->mcs; in ieee80211_fill_rate_info()
523 if (ri->flags & RATE_INFO_FLAGS_HE_MCS) in ieee80211_fill_rate_info()
524 stat->encoding = RX_ENC_HE; in ieee80211_fill_rate_info()
525 else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS) in ieee80211_fill_rate_info()
526 stat->encoding = RX_ENC_VHT; in ieee80211_fill_rate_info()
527 else if (ri->flags & RATE_INFO_FLAGS_MCS) in ieee80211_fill_rate_info()
528 stat->encoding = RX_ENC_HT; in ieee80211_fill_rate_info()
530 stat->encoding = RX_ENC_LEGACY; in ieee80211_fill_rate_info()
532 if (ri->flags & RATE_INFO_FLAGS_SHORT_GI) in ieee80211_fill_rate_info()
533 stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; in ieee80211_fill_rate_info()
535 stat->he_gi = ri->he_gi; in ieee80211_fill_rate_info()
537 if (stat->encoding != RX_ENC_LEGACY) in ieee80211_fill_rate_info()
540 stat->rate_idx = 0; in ieee80211_fill_rate_info()
541 for (i = 0; i < sband->n_bitrates; i++) { in ieee80211_fill_rate_info()
542 if (ri->legacy != sband->bitrates[i].bitrate) in ieee80211_fill_rate_info()
545 stat->rate_idx = i; in ieee80211_fill_rate_info()
555 struct rate_info *ri, u8 band, int len) in ieee80211_fill_rx_status() argument
558 stat->band = band; in ieee80211_fill_rx_status()
560 if (ieee80211_fill_rate_info(hw, stat, band, ri)) in ieee80211_fill_rx_status()
563 if (rate->idx < 0 || !rate->count) in ieee80211_fill_rx_status()
564 return -1; in ieee80211_fill_rx_status()
566 if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH) in ieee80211_fill_rx_status()
567 stat->bw = RATE_INFO_BW_160; in ieee80211_fill_rx_status()
568 else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH) in ieee80211_fill_rx_status()
569 stat->bw = RATE_INFO_BW_80; in ieee80211_fill_rx_status()
570 else if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH) in ieee80211_fill_rx_status()
571 stat->bw = RATE_INFO_BW_40; in ieee80211_fill_rx_status()
573 stat->bw = RATE_INFO_BW_20; in ieee80211_fill_rx_status()
575 stat->enc_flags = 0; in ieee80211_fill_rx_status()
576 if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) in ieee80211_fill_rx_status()
577 stat->enc_flags |= RX_ENC_FLAG_SHORTPRE; in ieee80211_fill_rx_status()
578 if (rate->flags & IEEE80211_TX_RC_SHORT_GI) in ieee80211_fill_rx_status()
579 stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; in ieee80211_fill_rx_status()
581 stat->rate_idx = rate->idx; in ieee80211_fill_rx_status()
582 if (rate->flags & IEEE80211_TX_RC_VHT_MCS) { in ieee80211_fill_rx_status()
583 stat->encoding = RX_ENC_VHT; in ieee80211_fill_rx_status()
584 stat->rate_idx = ieee80211_rate_get_vht_mcs(rate); in ieee80211_fill_rx_status()
585 stat->nss = ieee80211_rate_get_vht_nss(rate); in ieee80211_fill_rx_status()
586 } else if (rate->flags & IEEE80211_TX_RC_MCS) { in ieee80211_fill_rx_status()
587 stat->encoding = RX_ENC_HT; in ieee80211_fill_rx_status()
589 stat->encoding = RX_ENC_LEGACY; in ieee80211_fill_rx_status()
598 u8 band, int len) in ieee80211_calc_tx_airtime_rate() argument
602 if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len)) in ieee80211_calc_tx_airtime_rate()
615 for (i = 0; i < ARRAY_SIZE(info->status.rates); i++) { in ieee80211_calc_tx_airtime()
616 struct ieee80211_tx_rate *rate = &info->status.rates[i]; in ieee80211_calc_tx_airtime()
620 info->band, len); in ieee80211_calc_tx_airtime()
624 duration += cur_duration * rate->count; in ieee80211_calc_tx_airtime()
641 u8 band = 0; in ieee80211_calc_expected_tx_airtime() local
646 conf = rcu_dereference(vif->chanctx_conf); in ieee80211_calc_expected_tx_airtime()
648 band = conf->def.chan->band; in ieee80211_calc_expected_tx_airtime()
649 shift = ieee80211_chandef_get_shift(&conf->def); in ieee80211_calc_expected_tx_airtime()
656 struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate; in ieee80211_calc_expected_tx_airtime()
657 struct rate_info *ri = &sta->tx_stats.last_rate_info; in ieee80211_calc_expected_tx_airtime()
661 if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len)) in ieee80211_calc_expected_tx_airtime()
674 * assuming un-aggregated tx in all cases. in ieee80211_calc_expected_tx_airtime()
701 /* No station to get latest rate from, so calculate the worst-case in ieee80211_calc_expected_tx_airtime()
704 sband = hw->wiphy->bands[band]; in ieee80211_calc_expected_tx_airtime()
706 basic_rates = vif->bss_conf.basic_rates; in ieee80211_calc_expected_tx_airtime()
707 short_pream = vif->bss_conf.use_short_preamble; in ieee80211_calc_expected_tx_airtime()
709 rateidx = basic_rates ? ffs(basic_rates) - 1 : 0; in ieee80211_calc_expected_tx_airtime()
710 rate = sband->bitrates[rateidx].bitrate << shift; in ieee80211_calc_expected_tx_airtime()
711 cck = sband->bitrates[rateidx].flags & IEEE80211_RATE_MANDATORY_B; in ieee80211_calc_expected_tx_airtime()