]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mld: implement UHR multi-link PM
authorJohannes Berg <johannes.berg@intel.com>
Fri, 15 May 2026 12:09:37 +0000 (15:09 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 26 May 2026 12:17:12 +0000 (15:17 +0300)
For multi-link power management, the driver really only needs
to advertise the capability and tell the firmware that the AP
has it. Implement this.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Reviewed-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Link: https://patch.msgid.link/20260515150751.a28557532e2b.Id35c7f7c319c36daf8ef35fec28940d4db6fc253@changeid
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h
drivers/net/wireless/intel/iwlwifi/mld/link.c
drivers/net/wireless/intel/iwlwifi/mld/mac80211.c

index dd69687a4e4816f2b6b25acac0291dc48b7ee16f..09b2cddc4ad2de1afe582ec586c192cd1047ceea 100644 (file)
@@ -556,6 +556,7 @@ enum iwl_link_ctx_protection_flags {
  *     of threshold
  * @LINK_FLG_NPCA: NPCA enabled
  * @LINK_FLG_DPS: AP is a DPS assisting AP
+ * @LINK_FLG_MLPM: AP supports UHR multi-link PM
  * @LINK_FLG_DUO: AP supports UHR DUO
  */
 enum iwl_link_ctx_flags {
@@ -565,6 +566,7 @@ enum iwl_link_ctx_flags {
        LINK_FLG_NDP_FEEDBACK_ENABLED   = BIT(3),
        LINK_FLG_NPCA                   = BIT(4),
        LINK_FLG_DPS                    = BIT(6),
+       LINK_FLG_MLPM                   = BIT(7),
        LINK_FLG_DUO                    = BIT(8),
 }; /* LINK_CONTEXT_FLAG_E_VER_1 */
 
index 4ac2740dd8a19c8ef4c1a69792d07a4f7769a693..e5e9b7089c146c059d56b70635546e98d5dc52b7 100644 (file)
@@ -352,6 +352,11 @@ iwl_mld_change_link_in_fw(struct iwl_mld *mld, struct ieee80211_bss_conf *link,
                    link_sta->uhr_cap.mac.mac_cap[1] &
                                IEEE80211_UHR_MAC_CAP1_DUO_SUPP)
                        flags |= LINK_FLG_DUO;
+
+               if (link_sta->uhr_cap.has_uhr &&
+                   mld_vif->ap_sta->ext_mld_capa_ops &
+                               IEEE80211_UHR_ML_EXT_MLD_CAPA_ML_PM)
+                       flags |= LINK_FLG_MLPM;
        }
 
        cmd.htc_trig_based_pkt_ext = link->htc_trig_based_pkt_ext;
index 9736b43155d681584eabdec2016fca8ce3067a04..9dc540720ecd9d00d2feeda4f11671bd41c14c33 100644 (file)
@@ -420,6 +420,8 @@ static void iwl_mac_hw_set_wiphy(struct iwl_mld *mld)
 
        mld->ext_capab[0].eml_capabilities = IWL_MLD_EMLSR_CAPA;
        mld->ext_capab[0].mld_capa_and_ops = IWL_MLD_CAPA_OPS;
+       mld->ext_capab[0].ext_mld_capa_and_ops =
+               IEEE80211_UHR_ML_EXT_MLD_CAPA_ML_PM;
 
 }