void ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an, const struct ath_rc_series *rc, const struct ath_tx_status *ts, int frame_size, int nframes, int nbad) { struct amrr_node *amn = ATH_NODE_AMRR(an); int sr = ts->ts_shortretry; int lr = ts->ts_longretry; int retry_count = sr + lr; amn->amn_tx_try0_cnt++; if (retry_count == 1) { amn->amn_tx_try1_cnt++; } else if (retry_count == 2) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; } else if (retry_count == 3) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; amn->amn_tx_try3_cnt++; } else if (retry_count > 3) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; amn->amn_tx_try3_cnt++; amn->amn_tx_failure_cnt++; } if (amn->amn_interval != 0 && ticks - amn->amn_ticks > amn->amn_interval) { ath_rate_ctl(sc, &an->an_node); amn->amn_ticks = ticks; } }
void ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an, const struct ath_buf *bf) { struct amrr_node *amn = ATH_NODE_AMRR(an); const struct ath_tx_status *ts = &bf->bf_status.ds_txstat; int sr = ts->ts_shortretry; int lr = ts->ts_longretry; int retry_count = sr + lr; amn->amn_tx_try0_cnt++; if (retry_count == 1) { amn->amn_tx_try1_cnt++; } else if (retry_count == 2) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; } else if (retry_count == 3) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; amn->amn_tx_try3_cnt++; } else if (retry_count > 3) { amn->amn_tx_try1_cnt++; amn->amn_tx_try2_cnt++; amn->amn_tx_try3_cnt++; amn->amn_tx_failure_cnt++; } if (amn->amn_interval != 0 && ticks - amn->amn_ticks > amn->amn_interval) { ath_rate_ctl(sc, &an->an_node); amn->amn_ticks = ticks; } }
static void ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an, const struct ath_desc *ds) { struct onoe_node *on = ATH_NODE_ONOE(an); if (ds->ds_txstat.ts_status == 0) on->on_tx_ok++; else on->on_tx_err++; on->on_tx_retr += ds->ds_txstat.ts_shortretry + ds->ds_txstat.ts_longretry; if (jiffies >= on->on_nextcheck) { ath_rate_ctl(sc, &an->an_node); /* XXX halve rate for station mode */ on->on_nextcheck = jiffies + (ath_rateinterval * HZ) / 1000; } }
void ath_rate_tx_complete(struct ath_softc *sc, struct ath_node *an, const struct ath_rc_series *rc, const struct ath_tx_status *ts, int frame_size, int nframes, int nbad) { struct onoe_node *on = ATH_NODE_ONOE(an); if (ts->ts_status == 0) on->on_tx_ok++; else on->on_tx_err++; on->on_tx_retr += ts->ts_shortretry + ts->ts_longretry; if (on->on_interval != 0 && ticks - on->on_ticks > on->on_interval) { ath_rate_ctl(sc, &an->an_node); on->on_ticks = ticks; } }
static void ath_ratectl(void *arg) { struct ifnet *ifp = arg; struct ath_softc *sc = ifp->if_softc; struct onoe_softc *osc = (struct onoe_softc *) sc->sc_rc; struct ieee80211com *ic = &sc->sc_ic; int interval; if (ifp->if_flags & IFF_RUNNING) { sc->sc_stats.ast_rate_calls++; if (ic->ic_opmode == IEEE80211_M_STA) ath_rate_ctl(sc, ic->ic_bss); /* NB: no reference */ else ieee80211_iterate_nodes(&ic->ic_sta, ath_rate_ctl, sc); } interval = ath_rateinterval; if (ic->ic_opmode == IEEE80211_M_STA) interval /= 2; callout_reset(&osc->timer, (interval * hz) / 1000, ath_ratectl, &sc->sc_if); }
static void ath_ratectl(unsigned long data) { struct net_device *dev = (struct net_device *)data; struct ath_softc *sc = dev->priv; struct amrr_softc *asc = (struct amrr_softc *) sc->sc_rc; struct ieee80211com *ic = &sc->sc_ic; int interval; if (dev->flags & IFF_RUNNING) { sc->sc_stats.ast_rate_calls++; if (ic->ic_opmode == IEEE80211_M_STA) ath_rate_ctl(sc, ic->ic_bss); /* NB: no reference */ else ieee80211_iterate_nodes(ic, ath_rate_ctl, sc); } interval = ath_rateinterval; if (ic->ic_opmode == IEEE80211_M_STA) interval /= 2; asc->timer.expires = jiffies + ((HZ * interval) / 1000); add_timer(&asc->timer); }