static void rate_cb(void *arg, struct ieee80211_node *ni) { struct ath_softc *sc = arg; ath_rate_newassoc(sc, ATH_NODE(ni), 1); }
void ath_rate_node_update(struct ath_softc_tgt *sc, struct ath_node_target *an, a_int32_t isnew, a_uint32_t capflag, struct ieee80211_rate *rs) { struct ieee80211_node_target *ni = &an->ni; ath_rate_newassoc(sc, ATH_NODE_TARGET(ni), isnew, capflag, rs); }
void ath_rate_newstate(struct ath_softc_tgt *sc, struct ieee80211vap_target *vap, enum ieee80211_state state, a_uint32_t capflag, struct ieee80211_rate *rs) { struct ieee80211_node_target *ni = vap->iv_bss; struct atheros_softc *asc = (struct atheros_softc *) sc->sc_rc; asc->tx_chainmask = sc->sc_ic.ic_tx_chainmask; ath_rate_newassoc(sc, ni, 1, capflag, rs); }
/* * Reset the rate control state for each 802.11 state transition. */ void ath_rate_newstate(struct ath_softc *sc, enum ieee80211_state state) { struct ieee80211com *ic = &sc->sc_ic; if (state == IEEE80211_S_RUN) { if (ic->ic_opmode != IEEE80211_M_STA) { /* * Sync rates for associated stations and neighbors. */ ieee80211_iterate_nodes(&ic->ic_sta, rate_cb, sc); } ath_rate_newassoc(sc, ATH_NODE(ic->ic_bss), 1); } }