]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: iwlwifi: mld: implement UHR DPS
authorJohannes Berg <johannes.berg@intel.com>
Wed, 13 May 2026 05:43:54 +0000 (08:43 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 26 May 2026 12:17:11 +0000 (15:17 +0300)
For UHR, implement dynamic power save (DPS). Since the firmware
handles most of it, simply advertise DPS capability and set the
corresponding link flag when the AP has advertised that it is a
DPS assisting AP.

DPS assisting is currently not supported.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Link: https://patch.msgid.link/20260513084215.69c5657f2b0c.I0e0dfcd2e2641a5656a14f01ce696443ae10bc4a@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/iwl-nvm-parse.c
drivers/net/wireless/intel/iwlwifi/mld/link.c

index fa2fc6a92e6036e4b66136c4154649955ad4a78a..604281eb29c783343a1bf26dd438af2fa4ce7723 100644 (file)
@@ -550,6 +550,7 @@ enum iwl_link_ctx_protection_flags {
  * @LINK_FLG_NDP_FEEDBACK_ENABLED: mark support for NDP feedback and change
  *     of threshold
  * @LINK_FLG_NPCA: NPCA enabled
+ * @LINK_FLG_DPS: AP is a DPS assisting AP
  */
 enum iwl_link_ctx_flags {
        LINK_FLG_BSS_COLOR_DIS          = BIT(0),
@@ -557,6 +558,7 @@ enum iwl_link_ctx_flags {
        LINK_FLG_RU_2MHZ_BLOCK          = BIT(2),
        LINK_FLG_NDP_FEEDBACK_ENABLED   = BIT(3),
        LINK_FLG_NPCA                   = BIT(4),
+       LINK_FLG_DPS                    = BIT(6),
 }; /* LINK_CONTEXT_FLAG_E_VER_1 */
 
 /**
index 4e8222ffe732b74bbce2d9e5bfe5f6e4cff586c5..f29de029c70910cdbec7eeffbf886cae2d655be2 100644 (file)
@@ -696,7 +696,8 @@ static const struct ieee80211_sband_iftype_data iwl_iftype_cap[] = {
                        .phy.cap = IEEE80211_UHR_PHY_CAP_ELR_RX |
                                   IEEE80211_UHR_PHY_CAP_ELR_TX,
                        .mac.mac_cap = {
-                               [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP,
+                               [0] = IEEE80211_UHR_MAC_CAP0_NPCA_SUPP |
+                                     IEEE80211_UHR_MAC_CAP0_DPS_SUPP,
                        },
                },
        },
index 9ef39b03e67ff091f08c5a974927b3e520d7d273..785459937fbe8bbf5b9ba4f63c384b67ed15fede 100644 (file)
@@ -335,10 +335,18 @@ iwl_mld_change_link_in_fw(struct iwl_mld *mld, struct ieee80211_bss_conf *link,
                        link_sta_dereference_check(mld_vif->ap_sta,
                                                   link->link_id);
 
-               if (!WARN_ON(!link_sta) && link_sta->he_cap.has_he &&
+               if (WARN_ON(!link_sta))
+                       return -EINVAL;
+
+               if (link_sta->he_cap.has_he &&
                    link_sta->he_cap.he_cap_elem.mac_cap_info[5] &
                    IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX)
                        cmd.ul_mu_data_disable = 1;
+
+               if (link_sta->uhr_cap.has_uhr &&
+                   link_sta->uhr_cap.mac.mac_cap[0] &
+                               IEEE80211_UHR_MAC_CAP0_DPS_ASSIST_SUPP)
+                       flags |= LINK_FLG_DPS;
        }
 
        cmd.htc_trig_based_pkt_ext = link->htc_trig_based_pkt_ext;