• Home
  • Raw
  • Download

Lines Matching +full:col +full:- +full:offset

9  *   Copyright (C) 2005-2007 Derek Smithies <derek@indranet.co.nz>
26 * 3. Neither the names of the above-listed copyright holders nor the names
59 _mi->sample_table[(_idx * SAMPLE_COLUMNS) + _col]
66 for (i = rix; i >= 0; i--) in rix_to_ndx()
67 if (mi->r[i].rix == rix) in rix_to_ndx()
77 usecs = mr->perfect_tx_time; in minstrel_get_tp_avg()
82 if (mr->stats.prob_avg < MINSTREL_FRAC(10, 100)) in minstrel_get_tp_avg()
97 struct minstrel_rate_stats *cur_mrs = &mi->r[i].stats; in minstrel_sort_best_tp_rates()
99 for (j = MAX_THR_RATES; j > 0; --j) { in minstrel_sort_best_tp_rates()
100 tmp_mrs = &mi->r[tp_list[j - 1]].stats; in minstrel_sort_best_tp_rates()
101 if (minstrel_get_tp_avg(&mi->r[i], cur_mrs->prob_avg) <= in minstrel_sort_best_tp_rates()
102 minstrel_get_tp_avg(&mi->r[tp_list[j - 1]], tmp_mrs->prob_avg)) in minstrel_sort_best_tp_rates()
106 if (j < MAX_THR_RATES - 1) in minstrel_sort_best_tp_rates()
107 memmove(&tp_list[j + 1], &tp_list[j], MAX_THR_RATES - (j + 1)); in minstrel_sort_best_tp_rates()
114 int offset, int idx) in minstrel_set_rate() argument
116 struct minstrel_rate *r = &mi->r[idx]; in minstrel_set_rate()
118 ratetbl->rate[offset].idx = r->rix; in minstrel_set_rate()
119 ratetbl->rate[offset].count = r->adjusted_retry_count; in minstrel_set_rate()
120 ratetbl->rate[offset].count_cts = r->retry_count_cts; in minstrel_set_rate()
121 ratetbl->rate[offset].count_rts = r->stats.retry_count_rtscts; in minstrel_set_rate()
135 minstrel_set_rate(mi, ratetbl, i++, mi->max_tp_rate[0]); in minstrel_update_rates()
137 if (mp->hw->max_rates >= 3) { in minstrel_update_rates()
139 minstrel_set_rate(mi, ratetbl, i++, mi->max_tp_rate[1]); in minstrel_update_rates()
142 if (mp->hw->max_rates >= 2) { in minstrel_update_rates()
144 minstrel_set_rate(mi, ratetbl, i++, mi->max_prob_rate); in minstrel_update_rates()
148 ratetbl->rate[i].idx = mi->lowest_rix; in minstrel_update_rates()
149 ratetbl->rate[i].count = mp->max_retry; in minstrel_update_rates()
150 ratetbl->rate[i].count_cts = mp->max_retry; in minstrel_update_rates()
151 ratetbl->rate[i].count_rts = mp->max_retry; in minstrel_update_rates()
153 rate_control_set_rates(mp->hw, mi->sta, ratetbl); in minstrel_update_rates()
165 if (unlikely(mrs->attempts > 0)) { in minstrel_calc_rate_stats()
166 mrs->sample_skipped = 0; in minstrel_calc_rate_stats()
167 cur_prob = MINSTREL_FRAC(mrs->success, mrs->attempts); in minstrel_calc_rate_stats()
168 if (mp->new_avg) { in minstrel_calc_rate_stats()
169 minstrel_filter_avg_add(&mrs->prob_avg, in minstrel_calc_rate_stats()
170 &mrs->prob_avg_1, cur_prob); in minstrel_calc_rate_stats()
171 } else if (unlikely(!mrs->att_hist)) { in minstrel_calc_rate_stats()
172 mrs->prob_avg = cur_prob; in minstrel_calc_rate_stats()
175 mrs->prob_avg = minstrel_ewma(mrs->prob_avg, in minstrel_calc_rate_stats()
179 mrs->att_hist += mrs->attempts; in minstrel_calc_rate_stats()
180 mrs->succ_hist += mrs->success; in minstrel_calc_rate_stats()
182 mrs->sample_skipped++; in minstrel_calc_rate_stats()
185 mrs->last_success = mrs->success; in minstrel_calc_rate_stats()
186 mrs->last_attempts = mrs->attempts; in minstrel_calc_rate_stats()
187 mrs->success = 0; in minstrel_calc_rate_stats()
188 mrs->attempts = 0; in minstrel_calc_rate_stats()
201 for (i = 0; i < mi->n_rates; i++) { in minstrel_update_stats()
202 struct minstrel_rate *mr = &mi->r[i]; in minstrel_update_stats()
203 struct minstrel_rate_stats *mrs = &mi->r[i].stats; in minstrel_update_stats()
204 struct minstrel_rate_stats *tmp_mrs = &mi->r[tmp_prob_rate].stats; in minstrel_update_stats()
211 if (mrs->prob_avg > MINSTREL_FRAC(95, 100) || in minstrel_update_stats()
212 mrs->prob_avg < MINSTREL_FRAC(10, 100)) { in minstrel_update_stats()
213 mr->adjusted_retry_count = mrs->retry_count >> 1; in minstrel_update_stats()
214 if (mr->adjusted_retry_count > 2) in minstrel_update_stats()
215 mr->adjusted_retry_count = 2; in minstrel_update_stats()
216 mr->sample_limit = 4; in minstrel_update_stats()
218 mr->sample_limit = -1; in minstrel_update_stats()
219 mr->adjusted_retry_count = mrs->retry_count; in minstrel_update_stats()
221 if (!mr->adjusted_retry_count) in minstrel_update_stats()
222 mr->adjusted_retry_count = 2; in minstrel_update_stats()
232 if (mrs->prob_avg >= MINSTREL_FRAC(95, 100)) { in minstrel_update_stats()
233 tmp_cur_tp = minstrel_get_tp_avg(mr, mrs->prob_avg); in minstrel_update_stats()
234 tmp_prob_tp = minstrel_get_tp_avg(&mi->r[tmp_prob_rate], in minstrel_update_stats()
235 tmp_mrs->prob_avg); in minstrel_update_stats()
239 if (mrs->prob_avg >= tmp_mrs->prob_avg) in minstrel_update_stats()
245 memcpy(mi->max_tp_rate, tmp_tp_rate, sizeof(mi->max_tp_rate)); in minstrel_update_stats()
246 mi->max_prob_rate = tmp_prob_rate; in minstrel_update_stats()
250 if (mp->fixed_rate_idx != -1) { in minstrel_update_stats()
251 mi->max_tp_rate[0] = mp->fixed_rate_idx; in minstrel_update_stats()
252 mi->max_tp_rate[1] = mp->fixed_rate_idx; in minstrel_update_stats()
253 mi->max_prob_rate = mp->fixed_rate_idx; in minstrel_update_stats()
258 mi->last_stats_update = jiffies; in minstrel_update_stats()
267 struct ieee80211_tx_info *info = st->info; in minstrel_tx_status()
270 struct ieee80211_tx_rate *ar = info->status.rates; in minstrel_tx_status()
274 success = !!(info->flags & IEEE80211_TX_STAT_ACK); in minstrel_tx_status()
284 mi->r[ndx].stats.attempts += ar[i].count; in minstrel_tx_status()
286 if ((i != IEEE80211_TX_MAX_RATES - 1) && (ar[i + 1].idx < 0)) in minstrel_tx_status()
287 mi->r[ndx].stats.success += success; in minstrel_tx_status()
290 if (time_after(jiffies, mi->last_stats_update + in minstrel_tx_status()
291 mp->update_interval / (mp->new_avg ? 2 : 1))) in minstrel_tx_status()
300 u8 retry = mr->adjusted_retry_count; in minstrel_get_retry_count()
302 if (info->control.use_rts) in minstrel_get_retry_count()
303 retry = max_t(u8, 2, min(mr->stats.retry_count_rtscts, retry)); in minstrel_get_retry_count()
304 else if (info->control.use_cts_prot) in minstrel_get_retry_count()
305 retry = max_t(u8, 2, min(mr->retry_count_cts, retry)); in minstrel_get_retry_count()
314 sample_ndx = SAMPLE_TBL(mi, mi->sample_row, mi->sample_column); in minstrel_get_next_sample()
315 mi->sample_row++; in minstrel_get_next_sample()
316 if ((int) mi->sample_row >= mi->n_rates) { in minstrel_get_next_sample()
317 mi->sample_row = 0; in minstrel_get_next_sample()
318 mi->sample_column++; in minstrel_get_next_sample()
319 if (mi->sample_column >= SAMPLE_COLUMNS) in minstrel_get_next_sample()
320 mi->sample_column = 0; in minstrel_get_next_sample()
329 struct sk_buff *skb = txrc->skb; in minstrel_get_rate()
333 struct ieee80211_tx_rate *rate = &info->control.rates[0]; in minstrel_get_rate()
341 /* check multi-rate-retry capabilities & adjust lookaround_rate */ in minstrel_get_rate()
342 mrr_capable = mp->has_mrr && in minstrel_get_rate()
343 !txrc->rts && in minstrel_get_rate()
344 !txrc->bss_conf->use_cts_prot; in minstrel_get_rate()
346 sampling_ratio = mp->lookaround_rate_mrr; in minstrel_get_rate()
348 sampling_ratio = mp->lookaround_rate; in minstrel_get_rate()
351 mi->total_packets++; in minstrel_get_rate()
354 if (mp->fixed_rate_idx != -1) in minstrel_get_rate()
358 /* Don't use EAPOL frames for sampling on non-mrr hw */ in minstrel_get_rate()
359 if (mp->hw->max_rates == 1 && in minstrel_get_rate()
360 (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) in minstrel_get_rate()
363 delta = (mi->total_packets * sampling_ratio / 100) - in minstrel_get_rate()
364 mi->sample_packets; in minstrel_get_rate()
367 prev_sample = mi->prev_sample; in minstrel_get_rate()
368 mi->prev_sample = false; in minstrel_get_rate()
372 if (mi->total_packets >= 10000) { in minstrel_get_rate()
373 mi->sample_packets = 0; in minstrel_get_rate()
374 mi->total_packets = 0; in minstrel_get_rate()
375 } else if (delta > mi->n_rates * 2) { in minstrel_get_rate()
376 /* With multi-rate retry, not every planned sample in minstrel_get_rate()
378 * chain is set up - [max_tp,sample,prob,lowest] for in minstrel_get_rate()
385 mi->sample_packets += (delta - mi->n_rates * 2); in minstrel_get_rate()
390 msr = &mi->r[ndx]; in minstrel_get_rate()
391 mr = &mi->r[mi->max_tp_rate[0]]; in minstrel_get_rate()
397 if (msr->perfect_tx_time < mr->perfect_tx_time || in minstrel_get_rate()
398 msr->stats.sample_skipped >= 20) { in minstrel_get_rate()
399 if (!msr->sample_limit) in minstrel_get_rate()
402 mi->sample_packets++; in minstrel_get_rate()
403 if (msr->sample_limit > 0) in minstrel_get_rate()
404 msr->sample_limit--; in minstrel_get_rate()
411 (mi->r[ndx].stats.prob_avg > MINSTREL_FRAC(95, 100))) in minstrel_get_rate()
414 mi->prev_sample = true; in minstrel_get_rate()
416 rate->idx = mi->r[ndx].rix; in minstrel_get_rate()
417 rate->count = minstrel_get_retry_count(&mi->r[ndx], info); in minstrel_get_rate()
418 info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; in minstrel_get_rate()
428 int erp = !!(rate->flags & IEEE80211_RATE_ERP_G); in calc_rate_durations()
431 d->perfect_tx_time = ieee80211_frame_duration(band, 1200, in calc_rate_durations()
432 DIV_ROUND_UP(rate->bitrate, 1 << shift), erp, 1, in calc_rate_durations()
434 d->ack_time = ieee80211_frame_duration(band, 10, in calc_rate_durations()
435 DIV_ROUND_UP(rate->bitrate, 1 << shift), erp, 1, in calc_rate_durations()
442 unsigned int i, col, new_idx; in init_sample_table() local
445 mi->sample_column = 0; in init_sample_table()
446 mi->sample_row = 0; in init_sample_table()
447 memset(mi->sample_table, 0xff, SAMPLE_COLUMNS * mi->n_rates); in init_sample_table()
449 for (col = 0; col < SAMPLE_COLUMNS; col++) { in init_sample_table()
451 for (i = 0; i < mi->n_rates; i++) { in init_sample_table()
452 new_idx = (i + rnd[i & 7]) % mi->n_rates; in init_sample_table()
453 while (SAMPLE_TBL(mi, new_idx, col) != 0xff) in init_sample_table()
454 new_idx = (new_idx + 1) % mi->n_rates; in init_sample_table()
456 SAMPLE_TBL(mi, new_idx, col) = i; in init_sample_table()
473 mi->sta = sta; in minstrel_rate_init()
474 mi->lowest_rix = rate_lowest_index(sband, sta); in minstrel_rate_init()
475 ctl_rate = &sband->bitrates[mi->lowest_rix]; in minstrel_rate_init()
476 mi->sp_ack_dur = ieee80211_frame_duration(sband->band, 10, in minstrel_rate_init()
477 ctl_rate->bitrate, in minstrel_rate_init()
478 !!(ctl_rate->flags & IEEE80211_RATE_ERP_G), 1, in minstrel_rate_init()
481 rate_flags = ieee80211_chandef_rate_flags(&mp->hw->conf.chandef); in minstrel_rate_init()
482 memset(mi->max_tp_rate, 0, sizeof(mi->max_tp_rate)); in minstrel_rate_init()
483 mi->max_prob_rate = 0; in minstrel_rate_init()
485 for (i = 0; i < sband->n_bitrates; i++) { in minstrel_rate_init()
486 struct minstrel_rate *mr = &mi->r[n]; in minstrel_rate_init()
487 struct minstrel_rate_stats *mrs = &mi->r[n].stats; in minstrel_rate_init()
490 unsigned int cw = mp->cw_min; in minstrel_rate_init()
493 if (!rate_supported(sta, sband->band, i)) in minstrel_rate_init()
495 if ((rate_flags & sband->bitrates[i].flags) != rate_flags) in minstrel_rate_init()
502 mr->rix = i; in minstrel_rate_init()
504 mr->bitrate = DIV_ROUND_UP(sband->bitrates[i].bitrate, in minstrel_rate_init()
506 calc_rate_durations(sband->band, mr, &sband->bitrates[i], in minstrel_rate_init()
511 mr->sample_limit = -1; in minstrel_rate_init()
512 mrs->retry_count = 1; in minstrel_rate_init()
513 mr->retry_count_cts = 1; in minstrel_rate_init()
514 mrs->retry_count_rtscts = 1; in minstrel_rate_init()
515 tx_time = mr->perfect_tx_time + mi->sp_ack_dur; in minstrel_rate_init()
518 tx_time_single = mr->ack_time + mr->perfect_tx_time; in minstrel_rate_init()
522 cw = min((cw << 1) | 1, mp->cw_max); in minstrel_rate_init()
525 tx_time_cts += tx_time_single + mi->sp_ack_dur; in minstrel_rate_init()
526 tx_time_rtscts += tx_time_single + 2 * mi->sp_ack_dur; in minstrel_rate_init()
527 if ((tx_time_cts < mp->segment_size) && in minstrel_rate_init()
528 (mr->retry_count_cts < mp->max_retry)) in minstrel_rate_init()
529 mr->retry_count_cts++; in minstrel_rate_init()
530 if ((tx_time_rtscts < mp->segment_size) && in minstrel_rate_init()
531 (mrs->retry_count_rtscts < mp->max_retry)) in minstrel_rate_init()
532 mrs->retry_count_rtscts++; in minstrel_rate_init()
533 } while ((tx_time < mp->segment_size) && in minstrel_rate_init()
534 (++mr->stats.retry_count < mp->max_retry)); in minstrel_rate_init()
535 mr->adjusted_retry_count = mrs->retry_count; in minstrel_rate_init()
536 if (!(sband->bitrates[i].flags & IEEE80211_RATE_ERP_G)) in minstrel_rate_init()
537 mr->retry_count_cts = mrs->retry_count; in minstrel_rate_init()
540 for (i = n; i < sband->n_bitrates; i++) { in minstrel_rate_init()
541 struct minstrel_rate *mr = &mi->r[i]; in minstrel_rate_init()
542 mr->rix = -1; in minstrel_rate_init()
545 mi->n_rates = n; in minstrel_rate_init()
546 mi->last_stats_update = jiffies; in minstrel_rate_init()
556 int idx = mi->max_tp_rate[0]; in minstrel_get_expected_throughput()
562 tmp_mrs = &mi->r[idx].stats; in minstrel_get_expected_throughput()
563 tmp_cur_tp = minstrel_get_tp_avg(&mi->r[idx], tmp_mrs->prob_avg) * 10; in minstrel_get_expected_throughput()