Lines Matching refs:mi

63 rix_to_ndx(struct minstrel_sta_info *mi, int rix)
67 if (mi->r[i].rix == rix)
74 minstrel_sort_best_tp_rates(struct minstrel_sta_info *mi, int i, u8 *tp_list)
78 while (j > 0 && mi->r[i].stats.cur_tp > mi->r[tp_list[j - 1]].stats.cur_tp)
87 minstrel_set_rate(struct minstrel_sta_info *mi, struct ieee80211_sta_rates *ratetbl,
90 struct minstrel_rate *r = &mi->r[idx];
99 minstrel_update_rates(struct minstrel_priv *mp, struct minstrel_sta_info *mi)
109 minstrel_set_rate(mi, ratetbl, i++, mi->max_tp_rate[0]);
113 minstrel_set_rate(mi, ratetbl, i++, mi->max_tp_rate[1]);
118 minstrel_set_rate(mi, ratetbl, i++, mi->max_prob_rate);
122 ratetbl->rate[i].idx = mi->lowest_rix;
127 rate_control_set_rates(mp->hw, mi->sta, ratetbl);
131 minstrel_update_stats(struct minstrel_priv *mp, struct minstrel_sta_info *mi)
141 for (i = 0; i < mi->n_rates; i++) {
142 struct minstrel_rate *mr = &mi->r[i];
143 struct minstrel_rate_stats *mrs = &mi->r[i].stats;
187 minstrel_sort_best_tp_rates(mi, i, tmp_tp_rate);
196 if (mrs->cur_tp >= mi->r[tmp_prob_rate].stats.cur_tp)
199 if (mrs->probability >= mi->r[tmp_prob_rate].stats.probability)
205 memcpy(mi->max_tp_rate, tmp_tp_rate, sizeof(mi->max_tp_rate));
206 mi->max_prob_rate = tmp_prob_rate;
211 mi->max_tp_rate[0] = mp->fixed_rate_idx;
212 mi->max_tp_rate[1] = mp->fixed_rate_idx;
213 mi->max_prob_rate = mp->fixed_rate_idx;
218 mi->stats_update = jiffies;
220 minstrel_update_rates(mp, mi);
229 struct minstrel_sta_info *mi = priv_sta;
241 ndx = rix_to_ndx(mi, ar[i].idx);
245 mi->r[ndx].stats.attempts += ar[i].count;
248 mi->r[ndx].stats.success += success;
252 mi->sample_packets++;
254 if (mi->sample_deferred > 0)
255 mi->sample_deferred--;
257 if (time_after(jiffies, mi->stats_update +
259 minstrel_update_stats(mp, mi);
278 minstrel_get_next_sample(struct minstrel_sta_info *mi)
281 sample_ndx = SAMPLE_TBL(mi, mi->sample_row, mi->sample_column);
282 mi->sample_row++;
283 if ((int) mi->sample_row >= mi->n_rates) {
284 mi->sample_row = 0;
285 mi->sample_column++;
286 if (mi->sample_column >= SAMPLE_COLUMNS)
287 mi->sample_column = 0;
298 struct minstrel_sta_info *mi = priv_sta;
322 mi->total_packets++;
329 delta = (mi->total_packets * sampling_ratio / 100) -
330 (mi->sample_packets + mi->sample_deferred / 2);
333 prev_sample = mi->prev_sample;
334 mi->prev_sample = false;
338 if (mi->total_packets >= 10000) {
339 mi->sample_deferred = 0;
340 mi->sample_packets = 0;
341 mi->total_packets = 0;
342 } else if (delta > mi->n_rates * 2) {
352 mi->sample_packets += (delta - mi->n_rates * 2);
356 ndx = minstrel_get_next_sample(mi);
357 msr = &mi->r[ndx];
358 mr = &mi->r[mi->max_tp_rate[0]];
375 mi->sample_deferred++;
380 mi->sample_packets++;
389 (mi->r[ndx].stats.probability > MINSTREL_FRAC(95, 100)))
392 mi->prev_sample = true;
394 rate->idx = mi->r[ndx].rix;
395 rate->count = minstrel_get_retry_count(&mi->r[ndx], info);
417 init_sample_table(struct minstrel_sta_info *mi)
422 mi->sample_column = 0;
423 mi->sample_row = 0;
424 memset(mi->sample_table, 0xff, SAMPLE_COLUMNS * mi->n_rates);
428 for (i = 0; i < mi->n_rates; i++) {
429 new_idx = (i + rnd[i & 7]) % mi->n_rates;
430 while (SAMPLE_TBL(mi, new_idx, col) != 0xff)
431 new_idx = (new_idx + 1) % mi->n_rates;
433 SAMPLE_TBL(mi, new_idx, col) = i;
443 struct minstrel_sta_info *mi = priv_sta;
450 mi->sta = sta;
451 mi->lowest_rix = rate_lowest_index(sband, sta);
452 ctl_rate = &sband->bitrates[mi->lowest_rix];
453 mi->sp_ack_dur = ieee80211_frame_duration(sband->band, 10,
459 memset(mi->max_tp_rate, 0, sizeof(mi->max_tp_rate));
460 mi->max_prob_rate = 0;
463 struct minstrel_rate *mr = &mi->r[n];
464 struct minstrel_rate_stats *mrs = &mi->r[n].stats;
492 tx_time = mr->perfect_tx_time + mi->sp_ack_dur;
502 tx_time_cts += tx_time_single + mi->sp_ack_dur;
503 tx_time_rtscts += tx_time_single + 2 * mi->sp_ack_dur;
518 struct minstrel_rate *mr = &mi->r[i];
522 mi->n_rates = n;
523 mi->stats_update = jiffies;
525 init_sample_table(mi);
526 minstrel_update_rates(mp, mi);
533 struct minstrel_sta_info *mi;
539 mi = kzalloc(sizeof(struct minstrel_sta_info), gfp);
540 if (!mi)
549 mi->r = kzalloc(sizeof(struct minstrel_rate) * max_rates, gfp);
550 if (!mi->r)
553 mi->sample_table = kmalloc(SAMPLE_COLUMNS * max_rates, gfp);
554 if (!mi->sample_table)
557 mi->stats_update = jiffies;
558 return mi;
561 kfree(mi->r);
563 kfree(mi);
570 struct minstrel_sta_info *mi = priv_sta;
572 kfree(mi->sample_table);
573 kfree(mi->r);
574 kfree(mi);
666 struct minstrel_sta_info *mi = priv_sta;
667 int idx = mi->max_tp_rate[0];
672 return MINSTREL_TRUNC(mi->r[idx].stats.cur_tp) * 1200 * 8 / 1024;