]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: Update UHR PHY capabilities to D1.4
authorJohannes Berg <johannes.berg@intel.com>
Fri, 29 May 2026 08:25:04 +0000 (10:25 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 3 Jun 2026 12:11:58 +0000 (14:11 +0200)
There are new capabilities in D1.4, and some reserved
bits. Update the code accordingly.

Link: https://patch.msgid.link/20260529102644.f146932b21e2.I12bad84157bf809fbe285b79420143b3c456d9d2@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/iwl-nvm-parse.c
drivers/net/wireless/intel/iwlwifi/mld/tlc.c
drivers/net/wireless/virtual/mac80211_hwsim_main.c
include/linux/ieee80211-uhr.h

index 7027bca249a039d8e2e4457a866ad21078faa105..d47b4ae2f48630027696dcf61096d703fcf1fef1 100644 (file)
@@ -693,8 +693,9 @@ static const struct ieee80211_sband_iftype_data iwl_iftype_cap[] = {
                },
                .uhr_cap = {
                        .has_uhr = true,
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       /* Note: asymmetry is fixed later */
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX |
+                                              IEEE80211_UHR_PHY_CAP_ELR_TX),
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP |
                                      IEEE80211_UHR_MAC_CAP0_DPS_SUPP,
@@ -801,8 +802,9 @@ static const struct ieee80211_sband_iftype_data iwl_iftype_cap[] = {
                },
                .uhr_cap = {
                        .has_uhr = true,
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       /* Note: asymmetry is fixed later */
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX |
+                                              IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
 };
index a03834d3ac6535b39714f1bbb21d98f8e58aafd4..edf9c735dd67276a291c5e308d6b1961ba7ddb8a 100644 (file)
@@ -114,8 +114,8 @@ iwl_mld_get_tlc_cmd_flags(struct iwl_mld *mld,
        }
 
        if (uhr_cap && uhr_cap->has_uhr && own_uhr_cap &&
-           uhr_cap->phy.cap & IEEE80211_UHR_PHY_CAP_ELR_RX &&
-           own_uhr_cap->phy.cap & IEEE80211_UHR_PHY_CAP_ELR_TX)
+           uhr_cap->phy.cap & cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX) &&
+           own_uhr_cap->phy.cap & cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_TX))
                flags |= IWL_TLC_MNG_CFG_FLAGS_UHR_ELR_1_5_MBPS_MSK |
                         IWL_TLC_MNG_CFG_FLAGS_UHR_ELR_3_MBPS_MSK;
 
index 4926122d6648073db8c1615bb2922e4629b521c0..de0bb4ce7456b478ccd7b469d5cb00fb2805d31c 100644 (file)
@@ -4593,8 +4593,8 @@ static const struct ieee80211_sband_iftype_data sband_capa_2ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX |
+                                              IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
        {
@@ -4709,8 +4709,8 @@ static const struct ieee80211_sband_iftype_data sband_capa_2ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX |
+                                              IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
 #ifdef CONFIG_MAC80211_MESH
@@ -4886,8 +4886,7 @@ static const struct ieee80211_sband_iftype_data sband_capa_5ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
        {
@@ -5019,8 +5018,7 @@ static const struct ieee80211_sband_iftype_data sband_capa_5ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX),
                },
        },
 #ifdef CONFIG_MAC80211_MESH
@@ -5220,8 +5218,7 @@ static const struct ieee80211_sband_iftype_data sband_capa_6ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
        {
@@ -5374,8 +5371,7 @@ static const struct ieee80211_sband_iftype_data sband_capa_6ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX),
                },
        },
 #ifdef CONFIG_MAC80211_MESH
@@ -5473,8 +5469,8 @@ static const struct ieee80211_sband_iftype_data sband_capa_6ghz[] = {
                        .mac.mac_cap = {
                                [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
                        },
-                       .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
-                                  IEEE80211_UHR_PHY_CAP_ELR_TX,
+                       .phy.cap = cpu_to_le32(IEEE80211_UHR_PHY_CAP_ELR_RX |
+                                              IEEE80211_UHR_PHY_CAP_ELR_TX),
                },
        },
 #endif
index 71faf4a6825e8139bd21a9542c94d2a819bbf934..be51d91f5e030415ecd3ac487241eae20f53e6db 100644 (file)
@@ -401,17 +401,39 @@ struct ieee80211_uhr_cap_mac {
        u8 mac_cap[5];
 } __packed;
 
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80  0x01
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80    0x02
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160   0x04
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160     0x08
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320   0x10
-#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320     0x20
-#define IEEE80211_UHR_PHY_CAP_ELR_RX                   0x40
-#define IEEE80211_UHR_PHY_CAP_ELR_TX                   0x80
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_LE80  0x00000001
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_LE80    0x00000002
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_160   0x00000004
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_160     0x00000008
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_SND_NDP_320   0x00000010
+#define IEEE80211_UHR_PHY_CAP_MAX_NSS_RX_DL_MU_320     0x00000020
+#define IEEE80211_UHR_PHY_CAP_ELR_TX                   0x00000040
+#define IEEE80211_UHR_PHY_CAP_ELR_RX                   0x00000080
+#define IEEE80211_UHR_PHY_CAP_PART_BW_DL_MUMIMO                0x00000100
+#define IEEE80211_UHR_PHY_CAP_PART_BW_UL_MUMIMO                0x00000200
+#define IEEE80211_UHR_PHY_CAP_MCS15                    0x00000400
+#define IEEE80211_UHR_PHY_CAP_2XLDPC_TX                        0x00000800
+#define IEEE80211_UHR_PHY_CAP_2XLDPC_RX                        0x00001000
+#define IEEE80211_UHR_PHY_CAP_UEQM_TX_MAX_NSS          0x00006000
+#define IEEE80211_UHR_PHY_CAP_UEQM_RX_MAX_NSS          0x00018000
+#define IEEE80211_UHR_PHY_CAP_CO_BF_JOINT_SOUNDING     0x00040000
+#define IEEE80211_UHR_PHY_CAP_IM_TX                    0x00080000
+#define IEEE80211_UHR_PHY_CAP_IM_RX                    0x00100000
+#define IEEE80211_UHR_PHY_CAP_CO_SR_MODE_1             0x00200000
+#define IEEE80211_UHR_PHY_CAP_CO_SR_MODE_2             0x00400000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_20_IN_PBW_20     0x00800000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_40_IN_PBW_40     0x01000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_80_IN_PBW_80     0x02000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_80_IN_PBW_160    0x04000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_80_IN_PBW_320    0x08000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_20_IN_PBW_GE80   0x10000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_40_IN_PBW_GE80   0x20000000
+#define IEEE80211_UHR_PHY_CAP_DRU_DBW_60_IN_PBW_GE80   0x40000000
+#define IEEE80211_UHR_PHY_CAP_DRU_RRU_HYBRID_MODE      0x80000000
 
 struct ieee80211_uhr_cap_phy {
-       u8 cap;
+       __le32 cap;
+       u8 reserved;
 } __packed;
 
 struct ieee80211_uhr_cap {