Lines Matching refs:rn

174 ieee80211_ra_vht_next_lower_intra_rate(struct ieee80211_ra_vht_node *rn,
215 ieee80211_ra_vht_next_intra_rate(struct ieee80211_ra_vht_node *rn,
232 ieee80211_ra_vht_next_rateset(struct ieee80211_ra_vht_node *rn,
246 if (rn->probing & IEEE80211_RA_PROBING_UP) {
257 } else if (rn->probing & IEEE80211_RA_PROBING_DOWN) {
269 panic("%s: invalid probing mode %d", __func__, rn->probing);
272 if (rn->valid_rates[rsnext->num_ss - 1] == 0)
279 ieee80211_ra_vht_best_mcs_in_rateset(struct ieee80211_ra_vht_node *rn,
286 struct ieee80211_ra_vht_goodput_stats *g = &rn->g[rs->idx][mcs];
287 if (((1 << mcs) & rn->valid_rates[rs->num_ss - 1]) == 0)
299 ieee80211_ra_vht_probe_next_rateset(struct ieee80211_ra_vht_node *rn,
309 best_mcs = ieee80211_ra_vht_best_mcs_in_rateset(rn, rs);
317 g = &rn->g[rs->idx][best_mcs];
321 if ((rn->valid_rates[rsnext->num_ss - 1] & (1 << mcs)) == 0)
335 ni->ni_txmcs = ieee80211_ra_vht_best_mcs_in_rateset(rn, rsnext);
338 rn->candidate_rates[rsnext->num_ss - 1] |= (1 << ni->ni_txmcs);
339 if (rn->probing & IEEE80211_RA_PROBING_UP) {
340 rn->candidate_rates[rsnext->num_ss - 1] |=
341 (1 << ieee80211_ra_vht_next_intra_rate(rn, ni));
342 } else if (rn->probing & IEEE80211_RA_PROBING_DOWN) {
343 rn->candidate_rates[rsnext->num_ss - 1] |=
344 (1 << ieee80211_ra_vht_next_lower_intra_rate(rn, ni));
346 panic("%s: invalid probing mode %d", __func__, rn->probing);
350 ieee80211_ra_vht_next_mcs(struct ieee80211_ra_vht_node *rn,
355 if (rn->probing & IEEE80211_RA_PROBING_DOWN)
356 next = ieee80211_ra_vht_next_lower_intra_rate(rn, ni);
357 else if (rn->probing & IEEE80211_RA_PROBING_UP)
358 next = ieee80211_ra_vht_next_intra_rate(rn, ni);
360 panic("%s: invalid probing mode %d", __func__, rn->probing);
373 ieee80211_ra_vht_probe_done(struct ieee80211_ra_vht_node *rn, int nss)
375 rn->probing = IEEE80211_RA_NOT_PROBING;
376 rn->probed_rates[nss - 1] = 0;
377 rn->valid_probes[nss - 1] = 0;
378 rn->candidate_rates[nss - 1] = 0;
382 ieee80211_ra_vht_intra_mode_ra_finished(struct ieee80211_ra_vht_node *rn,
392 rn->probed_rates[nss - 1] = (rn->probed_rates[nss - 1] |
397 if (rn->probing & IEEE80211_RA_PROBING_DOWN) {
399 rn->probed_rates[nss - 1] & (1 << 0)) {
400 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
403 } else if (rn->probing & IEEE80211_RA_PROBING_UP) {
404 if (ni->ni_txmcs == rn->max_mcs[nss - 1] ||
405 rn->probed_rates[nss - 1] & (1 << rn->max_mcs[nss - 1])) {
406 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
415 next_mcs = ieee80211_ra_vht_next_mcs(rn, ni);
417 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
421 g = &rn->g[rs->idx][ni->ni_txmcs];
424 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
429 best_mcs = ieee80211_ra_vht_best_mcs_in_rateset(rn, rs);
431 if ((rn->probing & IEEE80211_RA_PROBING_UP) &&
433 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
436 if ((rn->probing & IEEE80211_RA_PROBING_DOWN) &&
438 ieee80211_ra_vht_trigger_next_rateset(rn, ni);
444 if ((rn->candidate_rates[nss - 1] & rn->probed_rates[nss - 1]) ==
445 rn->candidate_rates[nss - 1]) {
447 rn->probing &= ~IEEE80211_RA_PROBING_INTER;
455 ieee80211_ra_vht_trigger_next_rateset(struct ieee80211_ra_vht_node *rn,
460 rsnext = ieee80211_ra_vht_next_rateset(rn, ni);
462 ieee80211_ra_vht_probe_next_rateset(rn, ni, rsnext);
463 rn->probing |= IEEE80211_RA_PROBING_INTER;
465 rn->probing &= ~IEEE80211_RA_PROBING_INTER;
469 ieee80211_ra_vht_inter_mode_ra_finished(struct ieee80211_ra_vht_node *rn,
472 return ((rn->probing & IEEE80211_RA_PROBING_INTER) == 0);
476 ieee80211_ra_vht_best_rate(struct ieee80211_ra_vht_node *rn,
480 int i, j, best_mcs = rn->best_mcs, best_nss = rn->best_nss;
485 gmax = rn->g[rs->idx][best_mcs].measured;
490 struct ieee80211_ra_vht_goodput_stats *g = &rn->g[i][j];
491 if (((1 << i) & rn->valid_rates[rs->num_ss - 1]) == 0)
502 if (rn->best_mcs != best_mcs || rn->best_nss != best_nss) {
512 g = &rn->g[i][j];
513 if ((rn->valid_rates[rs->num_ss - 1] &
525 rn->best_mcs = best_mcs;
526 rn->best_nss = best_nss;
530 ieee80211_ra_vht_probe_next_rate(struct ieee80211_ra_vht_node *rn,
534 rn->probed_rates[ni->ni_vht_ss - 1] |= (1 << ni->ni_txmcs);
535 ni->ni_txmcs = ieee80211_ra_vht_next_mcs(rn, ni);
540 struct ieee80211_node *ni, struct ieee80211_ra_vht_node *rn)
544 memset(rn->max_mcs, 0, sizeof(rn->max_mcs));
545 memset(rn->valid_rates, 0, sizeof(rn->valid_rates));
557 rn->max_mcs[nss - 1] = max_mcs;
558 rn->valid_rates[nss - 1] = ((1 << (max_mcs + 1)) - 1);
578 ieee80211_ra_vht_add_stats(struct ieee80211_ra_vht_node *rn,
604 g = &rn->g[rs->idx][mcs];
612 rn->valid_probes[nss - 1] |= 1U << mcs;
645 ieee80211_ra_vht_choose(struct ieee80211_ra_vht_node *rn,
656 if (rn->valid_rates[0] == 0) {
657 ieee80211_ra_vht_init_valid_rates(ic, ni, rn);
658 if (rn->valid_rates[0] == 0)
663 g = &rn->g[rs->idx][ni->ni_txmcs];
665 if (rn->probing) {
667 if (!(rn->valid_probes[nss - 1] & (1UL << ni->ni_txmcs))) {
672 if (!ieee80211_ra_vht_intra_mode_ra_finished(rn, ni)) {
673 ieee80211_ra_vht_probe_next_rate(rn, ni);
676 } else if (ieee80211_ra_vht_inter_mode_ra_finished(rn, ni)) {
677 ieee80211_ra_vht_best_rate(rn, ni);
678 ni->ni_txmcs = rn->best_mcs;
679 ni->ni_vht_ss = rn->best_nss;
680 ieee80211_ra_vht_probe_done(rn, nss);
686 rn->valid_probes[nss - 1] = 0;
695 rn->probing = IEEE80211_RA_PROBING_DOWN;
696 rn->probed_rates[nss - 1] = 0;
698 rsnext = ieee80211_ra_vht_next_rateset(rn, ni);
700 ieee80211_ra_vht_probe_next_rateset(rn, ni,
704 rn->probing = IEEE80211_RA_NOT_PROBING;
707 ni->ni_txmcs = ieee80211_ra_vht_next_mcs(rn, ni);
708 rn->candidate_rates[nss - 1] = (1 << ni->ni_txmcs);
713 rn->probing = IEEE80211_RA_PROBING_UP;
714 rn->probed_rates[nss - 1] = 0;
715 if (ni->ni_txmcs == rn->max_mcs[nss - 1]) {
716 rsnext = ieee80211_ra_vht_next_rateset(rn, ni);
718 ieee80211_ra_vht_probe_next_rateset(rn, ni,
722 rn->probing = IEEE80211_RA_NOT_PROBING;
725 ni->ni_txmcs = ieee80211_ra_vht_next_mcs(rn, ni);
726 rn->candidate_rates[nss - 1] = (1 << ni->ni_txmcs);
730 rn->probing = IEEE80211_RA_NOT_PROBING;
731 rn->probed_rates[nss - 1] = 0;
732 rn->candidate_rates[nss - 1] = 0;
737 if (rn->probing) {
738 if (rn->probing & IEEE80211_RA_PROBING_UP)
754 ieee80211_ra_vht_node_init(struct ieee80211_ra_vht_node *rn)
756 memset(rn, 0, sizeof(*rn));
757 rn->best_nss = 1;