From: Johannes Berg 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 Reviewed-by: Emmanuel Grumbach Signed-off-by: Miri Korenblit --- drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h | 2 ++ drivers/net/wireless/intel/iwlwifi/mld/link.c | 5 +++++ drivers/net/wireless/intel/iwlwifi/mld/mac80211.c | 2 ++ 3 files changed, 9 insertions(+) diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h b/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h index dd69687a4e48..09b2cddc4ad2 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h @@ -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 */ diff --git a/drivers/net/wireless/intel/iwlwifi/mld/link.c b/drivers/net/wireless/intel/iwlwifi/mld/link.c index 4ac2740dd8a1..e5e9b7089c14 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/link.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/link.c @@ -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; diff --git a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c index 9736b43155d6..9dc540720ecd 100644 --- a/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c +++ b/drivers/net/wireless/intel/iwlwifi/mld/mac80211.c @@ -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; } -- 2.34.1