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)