Lines Matching defs:size_bin
169 static inline int best_rate_ndx(struct sample_node *sn, int size_bin,
176 int tt = sn->stats[size_bin][x].average_tx_time;
178 !sn->stats[size_bin][x].packets_acked)) {
187 if (sn->stats[size_bin][x].successive_failures > 3)
202 pick_sample_ndx(struct sample_node *sn, int size_bin)
208 current_ndx = sn->current_rate[size_bin];
214 current_tt = sn->stats[size_bin][current_ndx].average_tx_time;
217 int ndx = (sn->last_sample_ndx[size_bin]+1+x) % sn->num_rates;
224 if (sn->stats[size_bin][ndx].perfect_tx_time > current_tt)
228 if (ticks - sn->stats[size_bin][ndx].last_tx < ((hz * STALE_FAILURE_TIMEOUT_MS)/1000) &&
229 sn->stats[size_bin][ndx].successive_failures > 3)
247 sn->last_sample_ndx[size_bin] = ndx;
261 int ndx, size_bin, mrr, best_ndx, change_rates;
265 size_bin = size_to_bin(frameLen);
266 best_ndx = best_rate_ndx(sn, size_bin, !mrr);
269 average_tx_time = sn->stats[size_bin][best_ndx].average_tx_time;
280 if (sn->sample_tt[size_bin] < average_tx_time * (sn->packets_since_sample[size_bin]*ssc->ath_sample_rate/100)) {
286 ndx = pick_sample_ndx(sn, size_bin);
287 if (ndx != sn->current_rate[size_bin]) {
288 sn->current_sample_ndx[size_bin] = ndx;
290 sn->current_sample_ndx[size_bin] = -1;
292 sn->packets_since_sample[size_bin] = 0;
296 if (!sn->packets_sent[size_bin] || best_ndx == -1) {
304 sn->stats[size_bin][ndx].successive_failures == 0) {
310 } else if (sn->packets_sent[size_bin] < 20) {
313 } else if (ticks - ((hz*MIN_SWITCH_MS)/1000) > sn->ticks_since_switch[size_bin]) {
316 } else if (average_tx_time * 2 < sn->stats[size_bin][sn->current_rate[size_bin]].average_tx_time) {
321 sn->packets_since_sample[size_bin]++;
324 if (best_ndx != sn->current_rate[size_bin]) {
328 packet_size_bins[size_bin],
329 sn->rates[sn->current_rate[size_bin]].rate,
330 sn->stats[size_bin][sn->current_rate[size_bin]].average_tx_time,
331 sn->stats[size_bin][sn->current_rate[size_bin]].perfect_tx_time,
333 sn->stats[size_bin][best_ndx].average_tx_time,
334 sn->stats[size_bin][best_ndx].perfect_tx_time,
335 sn->packets_since_switch[size_bin],
338 sn->packets_since_switch[size_bin] = 0;
339 sn->current_rate[size_bin] = best_ndx;
340 sn->ticks_since_switch[size_bin] = ticks;
342 ndx = sn->current_rate[size_bin];
343 sn->packets_since_switch[size_bin]++;
344 if (size_bin == 0) {
362 sn->packets_sent[size_bin]++;
372 int size_bin = 0;
375 size_bin = size_to_bin(frame_size); // TODO: it's correct that frame_size always 0 ?
376 ndx = sn->current_rate[size_bin]; /* retry at the current bit-rate */
378 if (!sn->stats[size_bin][ndx].packets_acked) {
407 int size_bin;
414 size_bin = size_to_bin(frame_size);
415 size = bin_to_size(size_bin);
442 if (sn->stats[size_bin][ndx0].total_packets < (100 / (100 - ssc->ath_smoothing_rate))) {
444 int avg_tx = sn->stats[size_bin][ndx0].average_tx_time;
445 int packets = sn->stats[size_bin][ndx0].total_packets;
446 sn->stats[size_bin][ndx0].average_tx_time = (tt+(avg_tx*packets))/(packets+1);
449 sn->stats[size_bin][ndx0].average_tx_time =
450 ((sn->stats[size_bin][ndx0].average_tx_time * ssc->ath_smoothing_rate) +
456 sn->stats[size_bin][ndx0].successive_failures++;
457 for (y = size_bin+1; y < NUM_PACKET_SIZE_BINS; y++) {
468 sn->stats[size_bin][ndx0].packets_acked++;
469 sn->stats[size_bin][ndx0].successive_failures = 0;
471 sn->stats[size_bin][ndx0].tries += tries;
472 sn->stats[size_bin][ndx0].last_tx = ticks;
473 sn->stats[size_bin][ndx0].total_packets++;
476 if (ndx0 == sn->current_sample_ndx[size_bin]) {
480 sn->stats[size_bin][ndx0].average_tx_time,
481 sn->stats[size_bin][ndx0].perfect_tx_time,
483 sn->sample_tt[size_bin] = tt;
484 sn->current_sample_ndx[size_bin] = -1;