git: fa8f007de913 - main - LinuxKPI: 802.11: factor out dtim/tsf updates
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 22 Mar 2022 18:52:51 UTC
The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=fa8f007de913623c066bf8f09213f92ee8cbca3a commit fa8f007de913623c066bf8f09213f92ee8cbca3a Author: Bjoern A. Zeeb <bz@FreeBSD.org> AuthorDate: 2022-03-22 18:16:56 +0000 Commit: Bjoern A. Zeeb <bz@FreeBSD.org> CommitDate: 2022-03-22 18:51:43 +0000 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 --- sys/compat/linuxkpi/common/src/linux_80211.c | 84 ++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 22 deletions(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index fd5d18bca5d4..5721ff1127ee 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -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)