From 8494be1b5af7fe4f765532f802ac0a145e061d73 Mon Sep 17 00:00:00 2001 From: "Bjoern A. Zeeb" Date: Sun, 28 Dec 2025 19:38:16 +0000 Subject: [PATCH] LinuxKPI: 802.11: fix rx_nss with VHT When fixing single-stream chipsets, like iwlwifi(4) AX101, we started masking the announced with the hardware supported values. This would probably limit, e.g., rx_nss. During these works we fixed a loop checking from the highest nss=7 to lowest nss=0 (8..1) and would set rx_nss if the stream was supported. This left us with always setting rx_nss on nss=0 to nss + 1 = 1. Instead only update once when we hit the first supported MCS value (highest number of supported streams). Looking at the diff of the mentioned commit hash which gets fixed it looks like even the old code was not correct either. This only fixes the logic to calculate rx_nss. This does not yet help with modern drivers to actually update the value. Code for this will come in a later commit. Sponsored by: The FreeBSD Foundation MFC after: 3 days Fixes: adb4901ac9ae --- sys/compat/linuxkpi/common/src/linux_80211.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c index f4b534122b8..1ac28dfef44 100644 --- a/sys/compat/linuxkpi/common/src/linux_80211.c +++ b/sys/compat/linuxkpi/common/src/linux_80211.c @@ -693,7 +693,8 @@ lkpi_sta_sync_vht_from_ni(struct ieee80211_hw *hw, struct ieee80211_vif *vif, sta = IEEE80211_VHT_MCS_NOT_SUPPORTED; else { sta = MIN(sta, card); - rx_nss = i + 1; + if (rx_nss == 0) + rx_nss = i + 1; } } rx_map |= (sta << (2 * i));