aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <bz@FreeBSD.org>2026-06-22 01:11:18 +0000
committerBjoern A. Zeeb <bz@FreeBSD.org>2026-06-22 01:21:39 +0000
commit53d9c14af6a65dcc037527c6ff5308c94806fafe (patch)
tree8ad88b40772e5ff0c017dd5540a7887753f510cb
parentcff565a4c0335e12376ea43f99ef5328c45ce933 (diff)
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
-rw-r--r--sys/compat/linuxkpi/common/src/linux_80211.c13
1 files changed, 13 insertions, 0 deletions
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,