git: 53d9c14af6a6 - main - LinuxKPI: 802.11: track bandwidth/rx_nss change in lkpi_sta_sync_from_ni()

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Mon, 22 Jun 2026 05:31:10 UTC
The branch main has been updated by bz:

URL: https://cgit.FreeBSD.org/src/commit/?id=53d9c14af6a65dcc037527c6ff5308c94806fafe

commit 53d9c14af6a65dcc037527c6ff5308c94806fafe
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2026-06-22 01:11:18 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2026-06-22 01:21:39 +0000

    LinuxKPI: 802.11: track bandwidth/rx_nss change in lkpi_sta_sync_from_ni()
    
    In lkpi_sta_sync_from_ni() track the bandwidth and rx_nss at the
    beginning so at the end we can diff if they changed in order to generate
    the appropriate RC*CHNAGED flags for the (*link_sta_rc_update) downcall.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      3 days
---
 sys/compat/linuxkpi/common/src/linux_80211.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c
index 9125ed1cb4b4..33587016fe8d 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -908,6 +908,8 @@ lkpi_sta_sync_from_ni(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 {
 	enum ieee80211_bss_changed bss_changed;
 	enum ieee80211_rate_control_changed_flags rc_changed;
+	enum ieee80211_sta_rx_bandwidth bandwidth;
+	uint8_t rx_nss;
 
 	if (updchnctx)
 		lockdep_assert_wiphy(hw->wiphy);
@@ -915,6 +917,12 @@ lkpi_sta_sync_from_ni(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	bss_changed = 0;
 	rc_changed = 0;
 
+	bandwidth = sta->deflink.bandwidth;
+	rx_nss = sta->deflink.rx_nss;
+
+	TRACE_RATES("updchnctx %d bandwidth %d rx_nss %u",
+	    updchnctx, bandwidth, rx_nss);
+
 	/*
 	 * Ensure rx_nss is at least 1 as otherwise drivers run into
 	 * unexpected problems.
@@ -940,6 +948,11 @@ lkpi_sta_sync_from_ni(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 
 	bss_changed |= lkpi_sta_supp_rates(hw, vif, ni, &rc_changed);
 
+	if (sta->deflink.bandwidth != bandwidth)
+		rc_changed |= IEEE80211_RC_BW_CHANGED;
+	if (sta->deflink.rx_nss != rx_nss)
+		rc_changed |= IEEE80211_RC_NSS_CHANGED;
+
 	TRACE_RATES("updchnctx %d rc_change %#010x bss_changed %#010jx "
 	    "bandwidth %d rx_nss %u",
 	    updchnctx, rc_changed, (uintmax_t)bss_changed,