diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index 2971b5fce238..277bf73bbbb6 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -3593,10 +3593,11 @@ QDF_STATUS lim_sta_send_add_bss(struct mac_context *mac, tpSirAssocRsp pAssocRsp } } if (lim_is_session_he_capable(pe_session) && - pAssocRsp->he_cap.present) { + (pAssocRsp->he_cap.present || + pBeaconStruct->he_cap.present)) { lim_intersect_ap_he_caps(pe_session, pAddBssParams, - NULL, + pBeaconStruct, pAssocRsp); lim_update_he_stbc_capable(&pAddBssParams->staContext); lim_update_he_mcs_12_13(&pAddBssParams->staContext, @@ -3693,10 +3694,11 @@ QDF_STATUS lim_sta_send_add_bss(struct mac_context *mac, tpSirAssocRsp pAssocRsp } if (lim_is_he_6ghz_band(pe_session)) { if (lim_is_session_he_capable(pe_session) && - pAssocRsp->he_cap.present) { + (pAssocRsp->he_cap.present || + pBeaconStruct->he_cap.present)) { lim_intersect_ap_he_caps(pe_session, pAddBssParams, - NULL, + pBeaconStruct, pAssocRsp); lim_update_he_stbc_capable(&pAddBssParams->staContext); lim_update_he_6gop_assoc_resp(pAddBssParams, diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index ec05e27967fb..b1e7c6cf5c57 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -6740,10 +6740,10 @@ void lim_intersect_ap_he_caps(struct pe_session *session, struct bss_params *add tDot11fIEhe_cap *session_he = &session->he_config; tDot11fIEhe_cap *peer_he = &add_bss->staContext.he_config; - if (beacon) - rcvd_he = &beacon->he_cap; - else + if (assoc_rsp) rcvd_he = &assoc_rsp->he_cap; + else + rcvd_he = &beacon->he_cap; lim_intersect_he_caps(rcvd_he, session_he, peer_he); add_bss->staContext.he_capable = true; @@ -6859,11 +6859,17 @@ void lim_update_stads_he_caps(struct mac_context *mac_ctx, tDot11fIEhe_cap *he_cap; he_cap = &assoc_rsp->he_cap; - sta_ds->mlmStaContext.he_capable = he_cap->present; - if (!he_cap->present) + if (assoc_rsp->he_cap.present) + he_cap = &assoc_rsp->he_cap; + /* Use beacon HE caps if assoc resp doesn't have he caps */ + else if (beacon->he_cap.present) + he_cap = &beacon->he_cap; + else return; + sta_ds->mlmStaContext.he_capable = he_cap->present; + /* setting lpdc_coding if any of assoc_rsp or beacon has ladpc_coding * enabled */