git: fa8f007de913 - main - LinuxKPI: 802.11: factor out dtim/tsf updates

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
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)