Lines Matching +full:update +full:- +full:interval

2 /*-
3 * SPDX-License-Identifier: BSD-3-Clause
57 /* RSS threshold update. */
60 /* RSS average update. */
78 (parm##_denom - parm##_old) * (new)) / \
118 struct ieee80211_rssadapt *rs = vap->iv_rs; in rssadapt_setinterval()
125 rs->interval = msecs_to_ticks(msecs); in rssadapt_setinterval()
133 KASSERT(vap->iv_rs == NULL, ("%s: iv_rs already initialized", in rssadapt_init()
137 vap->iv_rs = rs = IEEE80211_MALLOC(sizeof(struct ieee80211_rssadapt), in rssadapt_init()
143 rs->vap = vap; in rssadapt_init()
145 rssadapt_sysctlattach(vap, vap->iv_sysctl, vap->iv_oid); in rssadapt_init()
151 IEEE80211_FREE(vap->iv_rs, M_80211_RATECTL); in rssadapt_deinit()
153 nrefs--; /* XXX locking */ in rssadapt_deinit()
159 long interval; in rssadapt_updatestats() local
161 ra->ra_pktrate = (ra->ra_pktrate + 10*(ra->ra_nfail + ra->ra_nok))/2; in rssadapt_updatestats()
162 ra->ra_nfail = ra->ra_nok = 0; in rssadapt_updatestats()
168 interval = MAX(10*1000, 10*1000 / MAX(1, 10 * ra->ra_pktrate)); in rssadapt_updatestats()
169 ra->ra_raise_interval = msecs_to_ticks(interval); in rssadapt_updatestats()
176 struct ieee80211vap *vap = ni->ni_vap; in rssadapt_node_init()
177 struct ieee80211_rssadapt *rsa = vap->iv_rs; in rssadapt_node_init()
178 const struct ieee80211_rateset *rs = &ni->ni_rates; in rssadapt_node_init()
183 "per-node structure allocation skipped\n"); in rssadapt_node_init()
187 if (ni->ni_rctls == NULL) { in rssadapt_node_init()
188 ni->ni_rctls = ra = in rssadapt_node_init()
193 "couldn't alloc per-node ratectl structure\n"); in rssadapt_node_init()
197 ra = ni->ni_rctls; in rssadapt_node_init()
198 ra->ra_rs = rsa; in rssadapt_node_init()
199 ra->ra_rates = *rs; in rssadapt_node_init()
203 for (ra->ra_rix = rs->rs_nrates - 1; in rssadapt_node_init()
204 ra->ra_rix > 0 && (rs->rs_rates[ra->ra_rix] & IEEE80211_RATE_VAL) > 72; in rssadapt_node_init()
205 ra->ra_rix--) in rssadapt_node_init()
208 rs->rs_rates[ra->ra_rix] & IEEE80211_RATE_VAL); in rssadapt_node_init()
209 ra->ra_ticks = ticks; in rssadapt_node_init()
211 IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, in rssadapt_node_init()
220 IEEE80211_FREE(ni->ni_rctls, M_80211_RATECTL); in rssadapt_node_deinit()
241 struct ieee80211_rssadapt_node *ra = ni->ni_rctls; in rssadapt_rate()
247 /* XXX should return -1 here, but drivers may not expect this... */ in rssadapt_rate()
251 ni->ni_rates.rs_rates[0]); in rssadapt_rate()
255 rs = &ra->ra_rates; in rssadapt_rate()
256 if ((ticks - ra->ra_ticks) > ra->ra_rs->interval) { in rssadapt_rate()
258 ra->ra_ticks = ticks; in rssadapt_rate()
261 thrs = &ra->ra_rate_thresh[bucket(pktlen)]; in rssadapt_rate()
264 rssi = ni->ni_ic->ic_node_getrssi(ni); in rssadapt_rate()
265 for (rix = rs->rs_nrates-1; rix >= 0; rix--) in rssadapt_rate()
268 if (rix != ra->ra_rix) { in rssadapt_rate()
269 /* update public rate */ in rssadapt_rate()
271 ni->ni_rates.rs_rates[rix] & IEEE80211_RATE_VAL); in rssadapt_rate()
272 ra->ra_rix = rix; in rssadapt_rate()
274 IEEE80211_NOTE(ni->ni_vap, IEEE80211_MSG_RATECTL, ni, in rssadapt_rate()
294 thrs = &ra->ra_rate_thresh[bucket(pktlen)]; in rssadapt_lower_rate()
296 rix = ra->ra_rix; in rssadapt_lower_rate()
301 IEEE80211_DPRINTF(ra->ra_rs->vap, IEEE80211_MSG_RATECTL, in rssadapt_lower_rate()
303 ra->ra_rates.rs_rates[rix + 1] & IEEE80211_RATE_VAL, in rssadapt_lower_rate()
314 thrs = &ra->ra_rate_thresh[bucket(pktlen)]; in rssadapt_raise_rate()
316 rix = ra->ra_rix; in rssadapt_raise_rate()
326 IEEE80211_DPRINTF(ra->ra_rs->vap, IEEE80211_MSG_RATECTL, in rssadapt_raise_rate()
328 ra->ra_rates.rs_rates[rix + 1] & IEEE80211_RATE_VAL, in rssadapt_raise_rate()
331 ra->ra_last_raise = ticks; in rssadapt_raise_rate()
339 struct ieee80211_rssadapt_node *ra = ni->ni_rctls; in rssadapt_tx_complete()
345 if ((status->flags & in rssadapt_tx_complete()
350 pktlen = status->pktlen; in rssadapt_tx_complete()
351 rssi = status->rssi; in rssadapt_tx_complete()
353 if (status->status == IEEE80211_RATECTL_TX_SUCCESS) { in rssadapt_tx_complete()
354 ra->ra_nok++; in rssadapt_tx_complete()
355 if ((ra->ra_rix + 1) < ra->ra_rates.rs_nrates && in rssadapt_tx_complete()
356 (ticks - ra->ra_last_raise) >= ra->ra_raise_interval) in rssadapt_tx_complete()
359 ra->ra_nfail++; in rssadapt_tx_complete()
368 struct ieee80211_rssadapt *rs = vap->iv_rs; in rssadapt_sysctl_interval()
374 msecs = ticks_to_msecs(rs->interval); in rssadapt_sysctl_interval()
376 if (error || !req->newptr) in rssadapt_sysctl_interval()
390 rssadapt_sysctl_interval, "I", "rssadapt operation interval (ms)"); in rssadapt_sysctlattach()