]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mld: fix HE SIG-B MCS/DCM/compression
authorJohannes Berg <johannes.berg@intel.com>
Mon, 10 Nov 2025 13:02:24 +0000 (15:02 +0200)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Wed, 21 Jan 2026 12:23:02 +0000 (14:23 +0200)
These values should be taken from SIG-A, indicating how SIG-B
is encoded. The values taken from SIG-B (the corresponding
register) indicate how the data portion (for that user) is
encoded. For the SIG-B compression value the correct mask was
applied to the wrong value.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Benjamin Berg <benjamin.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20251110150012.4d625e05dece.If295eb9382fc681d63b0853261d884cd1a833ba5@changeid
drivers/net/wireless/intel/iwlwifi/fw/api/rx.h
drivers/net/wireless/intel/iwlwifi/mld/rx.c

index beb20eadf6d61d98367c7c1bd9aef5b289b83175..ac6c1ef2cbcd16190f3e9f23b3dbff6f57cdb51b 100644 (file)
@@ -1090,7 +1090,9 @@ struct iwl_vht_sigs {
 struct iwl_he_sigs {
 #define OFDM_RX_FRAME_HE_BEAM_CHANGE                   0x00000001
 #define OFDM_RX_FRAME_HE_UL_FLAG                       0x00000002
+/* SU/ER-SU: MCS, MU: SIG-B MCS */
 #define OFDM_RX_FRAME_HE_MCS                           0x0000003c
+/* SU/ER-SU: DCM, MU: SIG-B DCM */
 #define OFDM_RX_FRAME_HE_DCM                           0x00000040
 #define OFDM_RX_FRAME_HE_BSS_COLOR                     0x00001f80
 #define OFDM_RX_FRAME_HE_SPATIAL_REUSE                 0x0001e000
index 4386e6b5c37cb6ab2d3ad71a2976c31b36ffb62b..214dcfde2fb4d7f806defed07858fbe3661abe44 100644 (file)
@@ -396,11 +396,11 @@ iwl_mld_decode_he_mu(struct iwl_mld_rx_phy_data *phy_data,
 {
        u32 rate_n_flags = phy_data->rate_n_flags;
 
-       he_mu->flags1 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.b,
-                                    OFDM_RX_FRAME_HE_SIGB_DCM,
+       he_mu->flags1 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.a1,
+                                    OFDM_RX_FRAME_HE_DCM,
                                     IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_DCM);
-       he_mu->flags1 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.b,
-                                    OFDM_RX_FRAME_HE_SIGB_MCS,
+       he_mu->flags1 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.a1,
+                                    OFDM_RX_FRAME_HE_MCS,
                                     IEEE80211_RADIOTAP_HE_MU_FLAGS1_SIG_B_MCS);
        he_mu->flags2 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.a1,
                                     OFDM_RX_FRAME_HE_PRMBL_PUNC_TYPE,
@@ -408,7 +408,7 @@ iwl_mld_decode_he_mu(struct iwl_mld_rx_phy_data *phy_data,
        he_mu->flags2 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.a2,
                                     OFDM_RX_FRAME_HE_MU_NUM_OF_SIGB_SYM_OR_USER_NUM,
                                     IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_SYMS_USERS);
-       he_mu->flags2 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.b,
+       he_mu->flags2 |= RTAP_ENC_HE(phy_data->ntfy->sigs.he.a2,
                                     OFDM_RX_FRAME_HE_MU_SIGB_COMP,
                                     IEEE80211_RADIOTAP_HE_MU_FLAGS2_SIG_B_COMP);