Lines Matching refs:rix

141 dot11rate(const HAL_RATE_TABLE *rt, int rix)
143 if (rix < 0)
145 return rt->info[rix].phy == IEEE80211_T_HT ?
146 rt->info[rix].dot11Rate : (rt->info[rix].dot11Rate & IEEE80211_RATE_VAL) / 2;
150 dot11rate_label(const HAL_RATE_TABLE *rt, int rix)
152 if (rix < 0)
154 return rt->info[rix].phy == IEEE80211_T_HT ? "MCS" : "Mb ";
158 * Return the rix with the lowest average_tx_time,
168 int rix, tt, pct;
173 for (mask = sn->ratemask, rix = 0; mask != 0; mask >>= 1, rix++) {
179 (rt->info[rix].phy != IEEE80211_T_HT)) {
183 tt = sn->stats[size_bin][rix].average_tx_time;
186 !sn->stats[size_bin][rix].packets_acked))
190 if (sn->stats[size_bin][rix].total_packets > 0) {
191 pct = sn->stats[size_bin][rix].ewma_pct;
198 if (sn->stats[size_bin][rix].successive_failures > 3)
221 best_rate_rix = rix;
234 best_rate_rix = rix;
252 int current_rix, rix;
265 rix = sn->last_sample_rix[size_bin]+1; /* next sample rate */
268 if ((mask & ((uint64_t) 1<<rix)) == 0) { /* not a supported rate */
270 if (++rix >= rt->rateCount)
271 rix = 0;
293 (rt->info[rix].phy != IEEE80211_T_HT)) {
294 mask &= ~((uint64_t) 1<<rix);
300 if (sn->stats[size_bin][rix].perfect_tx_time > current_tt) {
301 mask &= ~((uint64_t) 1<<rix);
306 if (sn->stats[size_bin][rix].successive_failures > ssc->max_successive_failures &&
307 ticks - sn->stats[size_bin][rix].last_tx < ssc->stale_failure_timeout) {
308 mask &= ~((uint64_t) 1<<rix);
314 * current rix; there's quite likely a lot of them.
317 if (rix < (current_rix - 3) ||
318 rix > (current_rix + 3)) {
319 mask &= ~((uint64_t) 1<<rix);
326 if (DOT11RATE(rix) > 2*11 && rix > current_rix + 2) {
327 mask &= ~((uint64_t) 1<<rix);
332 sn->last_sample_rix[size_bin] = rix;
333 return rix;
397 int rix = -1;
403 for (rix = rt->rateCount-1; rix > 0; rix--) {
404 if ((sn->ratemask & ((uint64_t) 1<<rix)) == 0)
408 if (rt->info[rix].phy == IEEE80211_T_HT)
415 if (DOT11RATE(rix) <= 72 &&
416 sn->stats[size_bin][rix].successive_failures == 0) {
420 return rix;
438 int rix = -1, ht_rix = -1;
444 for (rix = rt->rateCount-1; rix > 0; rix--) {
446 if ((sn->ratemask & ((uint64_t) 1<<rix)) == 0)
450 if (rt->info[rix].phy == IEEE80211_T_HT)
451 ht_rix = rix;
454 if (rt->info[rix].phy != IEEE80211_T_HT)
462 if (((MCS(rix) & 0x7) <= 4) &&
463 sn->stats[size_bin][rix].successive_failures == 0) {
469 * If all the MCS rates have successive failures, rix should be
470 * > 0; otherwise use the lowest MCS rix (hopefully MCS 0.)
472 return MAX(rix, ht_rix);
493 int rix, mrr, best_rix, change_rates;
501 rix = 0;
507 rix = sn->static_rix;
528 rix = pick_sample_rate(ssc, an, rt, size_bin);
534 dot11rate(rt, rix),
535 dot11rate_label(rt, rix),
538 if (rix != sn->current_rix[size_bin]) {
539 sn->current_sample_rix[size_bin] = rix;
588 printf("cur rix/att %x/%d, best rix/att %x/%d\n",
629 rix = sn->current_rix[size_bin];
632 *try0 = mrr ? sn->sched[rix].t0 : ATH_TXMAXTRY;
641 if (rix < 0 || rix >= rt->rateCount) {
642 printf("%s: ERROR: rix %d out of bounds (rateCount=%d)\n",
644 rix,
646 rix = 0; /* XXX just default for now */
648 KASSERT(rix >= 0 && rix < rt->rateCount, ("rix is %d", rix));
650 *rix0 = rix;
651 *txrate = rt->info[rix].rateCode
652 | (shortPreamble ? rt->info[rix].shortPreamble : 0);
675 rc[0].rix = sched->r0;
676 rc[1].rix = sched->r1;
677 rc[2].rix = sched->r2;
678 rc[3].rix = sched->r3;
688 struct ath_desc *ds, int shortPreamble, u_int8_t rix)
691 const struct txschedule *sched = &sn->sched[rix];
804 /* update EWMA for this rix */
934 dot11rate(rt, rc[0].rix),
935 dot11rate_label(rt, rc[0].rix), rc[0].tries,
936 dot11rate(rt, rc[1].rix),
937 dot11rate_label(rt, rc[1].rix), rc[1].tries,
938 dot11rate(rt, rc[2].rix),
939 dot11rate_label(rt, rc[2].rix), rc[2].tries,
940 dot11rate(rt, rc[3].rix),
941 dot11rate_label(rt, rc[3].rix), rc[3].tries,
945 if (rc[i].tries && !IS_RATE_DEFINED(sn, rc[i].rix))
959 rc[0].rix, rc[0].tries,
960 rc[1].rix, rc[1].tries,
961 rc[2].rix, rc[2].tries,
962 rc[3].rix, rc[3].tries,
971 rc[1].rix, rc[1].tries,
972 rc[2].rix, rc[2].tries,
973 rc[3].rix, rc[3].tries,
983 rc[2].rix, rc[2].tries,
984 rc[3].rix, rc[3].tries,
995 rc[3].rix, rc[3].tries,
1040 int x, y, rix;
1065 rix = sc->sc_rixmap[MCS(x)];
1066 if (rix == 0xff)
1069 if (!rt->info[rix].valid)
1071 KASSERT(rix < SAMPLE_MAXRATES,
1072 ("mcs %u has rix %d", MCS(x), rix));
1073 sn->ratemask |= (uint64_t) 1<<rix;
1079 rix = sc->sc_rixmap[RATE(x)];
1080 if (rix == 0xff)
1083 if (!rt->info[rix].valid)
1085 KASSERT(rix < SAMPLE_MAXRATES,
1086 ("rate %u has rix %d", RATE(x), rix));
1087 sn->ratemask |= (uint64_t) 1<<rix;
1095 for (mask = sn->ratemask, rix = 0; mask != 0; mask >>= 1, rix++) {
1098 printf(" %d %s/%d", dot11rate(rt, rix), dot11rate_label(rt, rix),
1099 calc_usecs_unicast_packet(sc, 1600, rix, 0,0,
1119 for (rix = 0, mask = sn->ratemask; mask != 0; rix++, mask >>= 1) {
1122 sn->stats[y][rix].successive_failures = 0;
1123 sn->stats[y][rix].tries = 0;
1124 sn->stats[y][rix].total_packets = 0;
1125 sn->stats[y][rix].packets_acked = 0;
1126 sn->stats[y][rix].last_tx = 0;
1127 sn->stats[y][rix].ewma_pct = 0;
1129 sn->stats[y][rix].perfect_tx_time =
1130 calc_usecs_unicast_packet(sc, size, rix, 0, 0,
1132 sn->stats[y][rix].average_tx_time =
1133 sn->stats[y][rix].perfect_tx_time;
1164 * as it has no access to the rix table.
1250 int rix, y;
1258 printf("[%4u] cur rix %d (%d %s) since switch: packets %d ticks %u\n",
1274 for (mask = sn->ratemask, rix = 0; mask != 0; mask >>= 1, rix++) {
1278 if (sn->stats[y][rix].total_packets == 0)
1281 dot11rate(rt, rix), dot11rate_label(rt, rix),
1283 (uintmax_t) sn->stats[y][rix].total_packets,
1284 (uintmax_t) sn->stats[y][rix].packets_acked,
1285 (int) ((sn->stats[y][rix].packets_acked * 100ULL) /
1286 sn->stats[y][rix].total_packets),
1287 sn->stats[y][rix].ewma_pct / 10,
1288 sn->stats[y][rix].ewma_pct % 10,
1289 (uintmax_t) sn->stats[y][rix].tries,
1290 sn->stats[y][rix].successive_failures,
1291 sn->stats[y][rix].average_tx_time,
1292 ticks - sn->stats[y][rix].last_tx);