diff --git a/components/mlme/dispatcher/inc/wlan_mlme_api.h b/components/mlme/dispatcher/inc/wlan_mlme_api.h index 553025f789..d2a301ccdd 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_api.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_api.h @@ -2821,6 +2821,26 @@ QDF_STATUS wlan_mlme_set_t2lm_negotiation_supported(struct wlan_objmgr_psoc *psoc, uint8_t value); +/** + * wlan_mlme_get_eht_mld_id() - Get the MLD ID of the requested BSS + * @psoc: psoc context + * + * Return: MLD ID of the requested BSS + */ +uint8_t +wlan_mlme_get_eht_mld_id(struct wlan_objmgr_psoc *psoc); + +/** + * wlan_mlme_set_eht_mld_id() - Set MLD ID of the requested BSS information + * within the ML probe request. + * @psoc: psoc context + * @value: MLD ID + * + * Return: qdf status + */ +QDF_STATUS +wlan_mlme_set_eht_mld_id(struct wlan_objmgr_psoc *psoc, uint8_t value); + /* * wlan_mlme_get_mlo_prefer_percentage() - get MLO preference percentage * @psoc: pointer to psoc object @@ -2888,6 +2908,18 @@ wlan_mlme_set_t2lm_negotiation_supported(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_E_NOSUPPORT; } +static inline uint8_t +wlan_mlme_get_eht_mld_id(struct wlan_objmgr_psoc *psoc) +{ + return 0; +} + +static inline QDF_STATUS +wlan_mlme_set_eht_mld_id(struct wlan_objmgr_psoc *psoc, uint8_t value) +{ + return QDF_STATUS_E_NOSUPPORT; +} + static inline void wlan_mlme_get_mlo_prefer_percentage( struct wlan_objmgr_psoc *psoc, diff --git a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h index 2f844fbcbc..9a5aafc6c0 100644 --- a/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/components/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1458,6 +1458,7 @@ struct wlan_mlme_aux_dev_caps { * @eht_mode: EHT mode of operation * @t2lm_negotiation_support: T2LM negotiation supported enum value * @enable_emlsr_mode: 11BE eMLSR mode support + * @mld_id: MLD ID of requested BSS within ML probe request frame * @safe_mode_enable: safe mode to bypass some strict 6 GHz checks for * connection, bypass strict power levels * @sr_enable_modes: modes for which SR(Spatial Reuse) is enabled @@ -1518,6 +1519,7 @@ struct wlan_mlme_generic { enum wlan_eht_mode eht_mode; bool enable_emlsr_mode; enum t2lm_negotiation_support t2lm_negotiation_support; + uint8_t mld_id; #endif #ifdef WLAN_FEATURE_MCC_QUOTA struct wlan_user_mcc_quota user_mcc_quota; diff --git a/components/mlme/dispatcher/src/wlan_mlme_api.c b/components/mlme/dispatcher/src/wlan_mlme_api.c index faae64be67..931271f47a 100644 --- a/components/mlme/dispatcher/src/wlan_mlme_api.c +++ b/components/mlme/dispatcher/src/wlan_mlme_api.c @@ -3905,6 +3905,33 @@ wlan_mlme_set_t2lm_negotiation_supported(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } + +uint8_t +wlan_mlme_get_eht_mld_id(struct wlan_objmgr_psoc *psoc) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return 0; + + return mlme_obj->cfg.gen.mld_id; +} + +QDF_STATUS +wlan_mlme_set_eht_mld_id(struct wlan_objmgr_psoc *psoc, + uint8_t value) +{ + struct wlan_mlme_psoc_ext_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_ext_obj(psoc); + if (!mlme_obj) + return QDF_STATUS_E_FAILURE; + + mlme_obj->cfg.gen.mld_id = value; + + return QDF_STATUS_SUCCESS; +} #endif QDF_STATUS diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 0c2f186ca3..5bc5de58f6 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -8617,6 +8617,8 @@ wlan_hdd_wifi_test_config_policy[ .type = NLA_U8}, [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_EHT_MLO_STR_TX] = { .type = NLA_U8}, + [QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MLD_ID_ML_PROBE_REQ] = { + .type = NLA_U8}, }; /** @@ -14249,7 +14251,7 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy, mac_handle, vdev_id, cfg_val); if (ret_val) - sme_err("Failed to send vdev pause"); + hdd_err("Failed to send vdev pause"); } } } @@ -14266,7 +14268,16 @@ __wlan_hdd_cfg80211_set_wifi_test_config(struct wiphy *wiphy, 0x48, 2, arg); if (ret_val) - sme_err("Failed to send STR TX indication"); + hdd_err("Failed to send STR TX indication"); + } + + cmd_id = QCA_WLAN_VENDOR_ATTR_WIFI_TEST_CONFIG_MLD_ID_ML_PROBE_REQ; + if (tb[cmd_id]) { + cfg_val = nla_get_u8(tb[cmd_id]); + hdd_debug("MLD ID in ML probe request: %d", cfg_val); + ret_val = wlan_mlme_set_eht_mld_id(hdd_ctx->psoc, cfg_val); + if (ret_val) + hdd_err("Failed to set MLD ID"); } if (update_sme_cfg) diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 4da8e7ce4d..f9b300216a 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -15331,6 +15331,7 @@ void sme_reset_eht_caps(mac_handle_t mac_handle, uint8_t vdev_id) sme_set_per_link_ba_mode(mac_handle, ba_mode_auto); sme_set_mcs_15_tx_rx_disable(vdev_id); wlan_mlme_set_btm_abridge_flag(mac_ctx->psoc, false); + wlan_mlme_set_eht_mld_id(mac_ctx->psoc, 0); } void sme_update_eht_cap_nss(mac_handle_t mac_handle, uint8_t vdev_id,