LinuxKPI: 802.11: factor out dtim/tsf updates

Factor out dtim/tsf setting/updates into lkpi_update_dtim_tsf()
with tracing and add an extra update call.
This avoids some code duplication and puts maintainance into a
single place.

Sponsored by:	The FreeBSD Foundation
MFC after:	3 days
This commit is contained in:
Bjoern A. Zeeb 2022-03-22 18:16:56 +00:00
parent 4f61ef8b78
commit fa8f007de9

View file

@ -651,6 +651,58 @@ lkpi_update_mcast_filter(struct ieee80211com *ic, bool force)
__func__, &mc_list, mc_list.count));
}
static enum ieee80211_bss_changed
lkpi_update_dtim_tsf(struct ieee80211_vif *vif, struct ieee80211_node *ni,
struct ieee80211vap *vap, const char *_f, int _l)
{
enum ieee80211_bss_changed bss_changed;
bss_changed = 0;
if (debug_80211 & D80211_TRACE)
printf("%s:%d [%s:%d] assoc %d aid %d beacon_int %u "
"dtim_period %u sync_dtim_count %u sync_tsf %ju "
"sync_device_ts %u bss_changed %#08x\n",
__func__, __LINE__, _f, _l,
vif->bss_conf.assoc, vif->bss_conf.aid,
vif->bss_conf.beacon_int, vif->bss_conf.dtim_period,
vif->bss_conf.sync_dtim_count,
(uintmax_t)vif->bss_conf.sync_tsf,
vif->bss_conf.sync_device_ts,
bss_changed);
if (vif->bss_conf.beacon_int != ni->ni_intval) {
vif->bss_conf.beacon_int = ni->ni_intval;
/* iwlwifi FW bug workaround; iwl_mvm_mac_sta_state. */
if (vif->bss_conf.beacon_int < 16)
vif->bss_conf.beacon_int = 16;
bss_changed |= BSS_CHANGED_BEACON_INT;
}
if (vif->bss_conf.dtim_period != vap->iv_dtim_period &&
vap->iv_dtim_period > 0) {
vif->bss_conf.dtim_period = vap->iv_dtim_period;
bss_changed |= BSS_CHANGED_BEACON_INFO;
}
vif->bss_conf.sync_dtim_count = vap->iv_dtim_count;
vif->bss_conf.sync_tsf = le64toh(ni->ni_tstamp.tsf);
/* vif->bss_conf.sync_device_ts = set in linuxkpi_ieee80211_rx. */
if (debug_80211 & D80211_TRACE)
printf("%s:%d [%s:%d] assoc %d aid %d beacon_int %u "
"dtim_period %u sync_dtim_count %u sync_tsf %ju "
"sync_device_ts %u bss_changed %#08x\n",
__func__, __LINE__, _f, _l,
vif->bss_conf.assoc, vif->bss_conf.aid,
vif->bss_conf.beacon_int, vif->bss_conf.dtim_period,
vif->bss_conf.sync_dtim_count,
(uintmax_t)vif->bss_conf.sync_tsf,
vif->bss_conf.sync_device_ts,
bss_changed);
return (bss_changed);
}
static void
lkpi_stop_hw_scan(struct lkpi_hw *lhw, struct ieee80211_vif *vif)
{
@ -863,20 +915,13 @@ lkpi_sta_scan_to_auth(struct ieee80211vap *vap, enum ieee80211_state nstate, int
bss_changed |= BSS_CHANGED_TXPOWER;
vif->bss_conf.idle = false;
bss_changed |= BSS_CHANGED_IDLE;
vif->bss_conf.beacon_int = ni->ni_intval;
/* iwlwifi FW bug workaround; iwl_mvm_mac_sta_state. */
if (vif->bss_conf.beacon_int < 16)
vif->bss_conf.beacon_int = 16;
bss_changed |= BSS_CHANGED_BEACON_INT;
vif->bss_conf.dtim_period = vap->iv_dtim_period;
bss_changed |= BSS_CHANGED_BEACON_INFO;
vif->bss_conf.sync_dtim_count = vap->iv_dtim_count;
vif->bss_conf.sync_tsf = le64toh(ni->ni_tstamp.tsf);
/* vif->bss_conf.sync_device_ts = set in linuxkpi_ieee80211_rx. */
/* Should almost assert it is this. */
vif->bss_conf.assoc = false;
vif->bss_conf.aid = 0;
bss_changed |= lkpi_update_dtim_tsf(vif, ni, vap, __func__, __LINE__);
/* RATES */
IMPROVE("bss info: not all needs to come now and rates are missing");
lkpi_80211_mo_bss_info_changed(hw, vif, &vif->bss_conf, bss_changed);
@ -1339,18 +1384,9 @@ lkpi_sta_assoc_to_run(struct ieee80211vap *vap, enum ieee80211_state nstate, int
vif->bss_conf.qos ^= 1;
bss_changed |= BSS_CHANGED_QOS;
}
if (vif->bss_conf.beacon_int != ni->ni_intval) {
vif->bss_conf.beacon_int = ni->ni_intval;
/* iwlwifi FW bug workaround; iwl_mvm_mac_sta_state. */
if (vif->bss_conf.beacon_int < 16)
vif->bss_conf.beacon_int = 16;
bss_changed |= BSS_CHANGED_BEACON_INT;
}
if (vif->bss_conf.dtim_period != vap->iv_dtim_period &&
vap->iv_dtim_period > 0) {
vif->bss_conf.dtim_period = vap->iv_dtim_period;
bss_changed |= BSS_CHANGED_BEACON_INFO;
}
bss_changed |= lkpi_update_dtim_tsf(vif, ni, vap, __func__, __LINE__);
lkpi_80211_mo_bss_info_changed(hw, vif, &vif->bss_conf, bss_changed);
/* - change_chanctx (if needed)
@ -1404,6 +1440,10 @@ lkpi_sta_assoc_to_run(struct ieee80211vap *vap, enum ieee80211_state nstate, int
*/
IMPROVE("Need that bssid setting, and the keys");
bss_changed = 0;
bss_changed |= lkpi_update_dtim_tsf(vif, ni, vap, __func__, __LINE__);
lkpi_80211_mo_bss_info_changed(hw, vif, &vif->bss_conf, bss_changed);
out:
IEEE80211_LOCK(vap->iv_ic);
if (ni != NULL)