Ejemplo n.º 1
0
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;
    }
}
Ejemplo n.º 2
0
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;
    }
}
Ejemplo n.º 3
0
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;
	}
}
Ejemplo n.º 4
0
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;
	}
}
Ejemplo n.º 5
0
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);
}
Ejemplo n.º 6
0
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);
}