diff --git a/components/mlme/core/inc/wlan_mlme_main.h b/components/mlme/core/inc/wlan_mlme_main.h index 0ebb5ebcca..0076907443 100644 --- a/components/mlme/core/inc/wlan_mlme_main.h +++ b/components/mlme/core/inc/wlan_mlme_main.h @@ -259,6 +259,8 @@ struct mscs_req_info { * @opr_rate_set: operational rates set * @ext_opr_rate_set: extended operational rates set * @mscs_req_info: Information related to mscs request + * @he_config: he config + * @he_sta_obsspd: he_sta_obsspd */ struct mlme_legacy_priv { bool chan_switch_in_progress; @@ -289,6 +291,10 @@ struct mlme_legacy_priv { #ifdef WLAN_FEATURE_MSCS struct mscs_req_info mscs_req_info; #endif +#ifdef WLAN_FEATURE_11AX + tDot11fIEhe_cap he_config; + uint32_t he_sta_obsspd; +#endif }; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 4787774687..11692ea3f1 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -634,9 +634,6 @@ struct start_bss_req { tSirNwType nwType; /* Indicates 11a/b/g */ tSirMacRateSet operationalRateSet; /* Has 11a or 11b rates */ tSirMacRateSet extendedRateSet; /* Has 11g rates */ -#ifdef WLAN_FEATURE_11AX - tDot11fIEhe_cap he_config; -#endif #ifdef WLAN_FEATURE_11W bool pmfCapable; bool pmfRequired; @@ -955,9 +952,6 @@ struct join_req { bool isFastRoamIniFeatureEnabled; uint8_t txLdpcIniFeatureEnabled; -#ifdef WLAN_FEATURE_11AX - tDot11fIEhe_cap he_config; -#endif uint8_t enableVhtpAid; uint8_t enableVhtGid; uint8_t enableAmpduPs; diff --git a/core/mac/src/pe/lim/lim_process_sme_req_messages.c b/core/mac/src/pe/lim/lim_process_sme_req_messages.c index bd70e8a9f4..a0c532cd05 100644 --- a/core/mac/src/pe/lim/lim_process_sme_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_sme_req_messages.c @@ -774,7 +774,7 @@ __lim_handle_sme_start_bss_request(struct mac_context *mac_ctx, uint32_t *msg_bu if (IS_DOT11_MODE_HE(session->dot11mode)) { lim_update_session_he_capable(mac_ctx, session); - lim_copy_bss_he_cap(session, sme_start_bss_req); + lim_copy_bss_he_cap(session); } else if (wlan_reg_is_6ghz_chan_freq(session->curr_op_freq)) { pe_err("Invalid oper_ch_freq %d for dot11mode %d", session->curr_op_freq, session->dot11mode); @@ -1818,7 +1818,7 @@ __lim_process_sme_join_req(struct mac_context *mac_ctx, void *msg_buf) if (IS_DOT11_MODE_HE(session->dot11mode)) { lim_update_session_he_capable(mac_ctx, session); - lim_copy_join_req_he_cap(session, sme_join_req); + lim_copy_join_req_he_cap(session); } diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index 6132f063f7..8c959fd71a 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/core/mac/src/pe/lim/lim_utils.c @@ -6998,17 +6998,59 @@ void lim_decide_he_op(struct mac_context *mac_ctx, uint32_t *mlme_he_ops, wma_update_vdev_he_ops(mlme_he_ops, &he_ops); } -void lim_copy_bss_he_cap(struct pe_session *session, - struct start_bss_req *sme_start_bss_req) +static void +lim_revise_req_he_cap_per_band(struct mlme_legacy_priv *mlme_priv, + struct pe_session *session) { - qdf_mem_copy(&(session->he_config), &(sme_start_bss_req->he_config), + struct mac_context *mac = session->mac_ctx; + tDot11fIEhe_cap *he_config; + + he_config = &mlme_priv->he_config; + if (wlan_reg_is_24ghz_ch_freq(session->curr_op_freq)) { + he_config->bfee_sts_lt_80 = + mac->he_cap_2g.bfee_sts_lt_80; + } else { + he_config->bfee_sts_lt_80 = + mac->he_cap_5g.bfee_sts_lt_80; + + he_config->num_sounding_lt_80 = + mac->he_cap_5g.num_sounding_lt_80; + if (he_config->chan_width_2 || + he_config->chan_width_3) { + he_config->bfee_sts_gt_80 = + mac->he_cap_5g.bfee_sts_gt_80; + he_config->num_sounding_gt_80 = + mac->he_cap_5g.num_sounding_gt_80; + he_config->he_ppdu_20_in_160_80p80Mhz = + mac->he_cap_5g.he_ppdu_20_in_160_80p80Mhz; + he_config->he_ppdu_80_in_160_80p80Mhz = + mac->he_cap_5g.he_ppdu_80_in_160_80p80Mhz; + } + } +} + +void lim_copy_bss_he_cap(struct pe_session *session) +{ + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(session->vdev); + if (!mlme_priv) + return; + lim_revise_req_he_cap_per_band(mlme_priv, session); + qdf_mem_copy(&(session->he_config), &(mlme_priv->he_config), sizeof(session->he_config)); } -void lim_copy_join_req_he_cap(struct pe_session *session, - struct join_req *sme_join_req) +void lim_copy_join_req_he_cap(struct pe_session *session) { - qdf_mem_copy(&(session->he_config), &(sme_join_req->he_config), + struct mlme_legacy_priv *mlme_priv; + + mlme_priv = wlan_vdev_mlme_get_ext_hdl(session->vdev); + if (!mlme_priv) + return; + if (!session->mac_ctx->usr_cfg_tx_bfee_nsts) + lim_revise_req_he_cap_per_band(mlme_priv, session); + qdf_mem_copy(&(session->he_config), &(mlme_priv->he_config), sizeof(session->he_config)); } diff --git a/core/mac/src/pe/lim/lim_utils.h b/core/mac/src/pe/lim/lim_utils.h index 8a751e808c..6e65f4e834 100644 --- a/core/mac/src/pe/lim/lim_utils.h +++ b/core/mac/src/pe/lim/lim_utils.h @@ -1116,12 +1116,10 @@ void lim_add_bss_he_cfg(struct bss_params *add_bss, struct pe_session *session); /** * lim_copy_bss_he_cap() - Copy HE capability into PE session from start bss * @session: pointer to PE session - * @sme_start_bss_req: pointer to start BSS request * * Return: None */ -void lim_copy_bss_he_cap(struct pe_session *session, - struct start_bss_req *sme_start_bss_req); +void lim_copy_bss_he_cap(struct pe_session *session); /** * lim_update_he_6gop_assoc_resp() - Update HE 6GHz op info to BSS params @@ -1138,12 +1136,10 @@ void lim_update_he_6gop_assoc_resp(struct bss_params *pAddBssParams, * lim_copy_join_req_he_cap() - Copy HE capability to PE session from Join req * and update as per bandwidth supported * @session: pointer to PE session - * @sme_join_req: pointer to SME join request * * Return: None */ -void lim_copy_join_req_he_cap(struct pe_session *session, - struct join_req *sme_join_req); +void lim_copy_join_req_he_cap(struct pe_session *session); /** * lim_log_he_6g_cap() - Print HE 6G cap IE @@ -1462,13 +1458,11 @@ static inline void lim_decide_he_op(struct mac_context *mac_ctx, } static inline -void lim_copy_bss_he_cap(struct pe_session *session, - struct start_bss_req *sme_start_bss_req) +void lim_copy_bss_he_cap(struct pe_session *session) { } -static inline void lim_copy_join_req_he_cap(struct pe_session *session, - struct join_req *sme_join_req) +static inline void lim_copy_join_req_he_cap(struct pe_session *session) { } diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index af986d28fc..8a68c24846 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -593,10 +593,6 @@ struct csr_roam_session { tCsrEseCckmIe suppCckmIeInfo; #endif uint8_t bRefAssocStartCnt; /* Tracking assoc start indication */ -#ifdef WLAN_FEATURE_11AX - tDot11fIEhe_cap he_config; - uint32_t he_sta_obsspd; -#endif #ifdef WLAN_FEATURE_ROAM_OFFLOAD uint8_t psk_pmk[SIR_ROAM_SCAN_PSK_SIZE]; size_t pmk_len; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index 326c820a6d..3b8baf3052 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2373,95 +2373,38 @@ uint32_t csr_convert_phy_cb_state_to_ini_value(ePhyChanBondState phyCbState) } #ifdef WLAN_FEATURE_11AX -#define CSR_REVISE_REQ_HE_CAP_PER_BAND(_req, _pmac, _ch_freq) \ - csr_revise_req_he_cap_per_band(&(_req)->he_config, _pmac, _ch_freq) - -static void -csr_revise_req_he_cap_per_band(tDot11fIEhe_cap *he_config, - struct mac_context *mac, - uint32_t ch_freq) -{ - if (wlan_reg_is_24ghz_ch_freq(ch_freq)) { - he_config->bfee_sts_lt_80 = - mac->he_cap_2g.bfee_sts_lt_80; - } else { - he_config->bfee_sts_lt_80 = - mac->he_cap_5g.bfee_sts_lt_80; - - he_config->num_sounding_lt_80 = - mac->he_cap_5g.num_sounding_lt_80; - if (he_config->chan_width_2 || - he_config->chan_width_3) { - he_config->bfee_sts_gt_80 = - mac->he_cap_5g.bfee_sts_gt_80; - he_config->num_sounding_gt_80 = - mac->he_cap_5g.num_sounding_gt_80; - he_config->he_ppdu_20_in_160_80p80Mhz = - mac->he_cap_5g.he_ppdu_20_in_160_80p80Mhz; - he_config->he_ppdu_80_in_160_80p80Mhz = - mac->he_cap_5g.he_ppdu_80_in_160_80p80Mhz; - } - } -} - -/** - * csr_join_req_copy_he_cap() - Copy HE cap into CSR Join Req - * @csr_join_req: pointer to CSR Join Req - * @session: pointer to CSR session - * - * Return: None - */ -static void csr_join_req_copy_he_cap(struct join_req *csr_join_req, - struct csr_roam_session *session) -{ - qdf_mem_copy(&csr_join_req->he_config, &session->he_config, - sizeof(session->he_config)); -} - -/** - * csr_start_bss_copy_he_cap() - Copy HE cap into CSR Join Req - * @req: pointer to START BSS Req - * @session: pointer to CSR session - * - * Return: None - */ -static void csr_start_bss_copy_he_cap(struct start_bss_req *req, - struct csr_roam_session *session) -{ - qdf_mem_copy(&req->he_config, &session->he_config, - sizeof(session->he_config)); -} - -void csr_init_session_twt_cap(struct csr_roam_session *session, - uint32_t type_of_persona) -{ - if (WMI_VDEV_TYPE_AP == type_of_persona) { - session->he_config.twt_request = 0; - } else if (WMI_VDEV_TYPE_STA == type_of_persona) { - session->he_config.twt_responder = 0; - } -} - void csr_update_session_he_cap(struct mac_context *mac_ctx, struct csr_roam_session *session) { enum QDF_OPMODE persona; - tDot11fIEhe_cap *he_cap = &session->he_config; - he_cap->present = true; + tDot11fIEhe_cap *he_cap; + struct wlan_objmgr_vdev *vdev; + struct mlme_legacy_priv *mlme_priv; - qdf_mem_copy(&session->he_config, + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac_ctx->psoc, + session->vdev_id, + WLAN_LEGACY_SME_ID); + if (!vdev) + return; + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + return; + } + qdf_mem_copy(&mlme_priv->he_config, &mac_ctx->mlme_cfg->he_caps.dot11_he_cap, - sizeof(session->he_config)); - + sizeof(mlme_priv->he_config)); + he_cap = &mlme_priv->he_config; + he_cap->present = true; /* * Do not advertise requester role for SAP & responder role * for STA */ - persona = csr_get_session_persona(mac_ctx, session->sessionId); - if (QDF_SAP_MODE == persona) { - session->he_config.twt_request = 0; - } else if (QDF_STA_MODE == persona) { - session->he_config.twt_responder = 0; + persona = wlan_vdev_mlme_get_opmode(vdev); + if (persona == QDF_SAP_MODE || persona == QDF_P2P_GO_MODE) { + he_cap->twt_request = 0; + } else if (persona == QDF_STA_MODE || persona == QDF_P2P_CLIENT_MODE) { + he_cap->twt_responder = 0; } if (he_cap->ppet_present) { @@ -2475,24 +2418,9 @@ void csr_update_session_he_cap(struct mac_context *mac_ctx, } else { he_cap->ppet.ppe_threshold.num_ppe_th = 0; } - session->he_sta_obsspd = mac_ctx->mlme_cfg->he_caps.he_sta_obsspd; + mlme_priv->he_sta_obsspd = mac_ctx->mlme_cfg->he_caps.he_sta_obsspd; + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); } - -#else -#define CSR_REVISE_REQ_HE_CAP_PER_BAND(_req, _pmac, _ch_freq) /* no op */ - -static inline -void csr_join_req_copy_he_cap(struct join_req *csr_join_req, - struct csr_roam_session *session) -{ -} - -static inline -void csr_start_bss_copy_he_cap(struct start_bss_req *req, - struct csr_roam_session *session) -{ -} - #endif /** @@ -14731,13 +14659,26 @@ static bool csr_enable_twt(struct mac_context *mac_ctx, tDot11fBeaconIEs *ie) #ifdef WLAN_FEATURE_11AX static void -csr_update_he_caps_mcs(struct wlan_mlme_cfg *mlme_cfg, +csr_update_he_caps_mcs(struct mac_context *mac +, struct wlan_mlme_cfg *mlme_cfg, struct csr_roam_session *csr_session) { uint32_t tx_mcs_map = 0; uint32_t rx_mcs_map = 0; uint32_t mcs_map = 0; + struct wlan_objmgr_vdev *vdev; + struct mlme_legacy_priv *mlme_priv; + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc, + csr_session->vdev_id, + WLAN_LEGACY_SME_ID); + if (!vdev) + return; + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + return; + } rx_mcs_map = mlme_cfg->he_caps.dot11_he_cap.rx_he_mcs_map_lt_80; tx_mcs_map = mlme_cfg->he_caps.dot11_he_cap.tx_he_mcs_map_lt_80; mcs_map = rx_mcs_map & 0x3; @@ -14751,12 +14692,14 @@ csr_update_he_caps_mcs(struct wlan_mlme_cfg *mlme_cfg, } sme_debug("new HE Nss MCS MAP: Rx 0x%0X, Tx: 0x%0X", rx_mcs_map, tx_mcs_map); - csr_session->he_config.tx_he_mcs_map_lt_80 = tx_mcs_map; - csr_session->he_config.rx_he_mcs_map_lt_80 = rx_mcs_map; + mlme_priv->he_config.tx_he_mcs_map_lt_80 = tx_mcs_map; + mlme_priv->he_config.rx_he_mcs_map_lt_80 = rx_mcs_map; + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); } #else static void -csr_update_he_caps_mcs(struct wlan_mlme_cfg *mlme_cfg, +csr_update_he_caps_mcs(struct mac_context *mac, + struct wlan_mlme_cfg *mlme_cfg, struct csr_roam_session *csr_session) { } @@ -14809,15 +14752,27 @@ static void csr_handle_iot_ap_no_common_he_rates(struct mac_context *mac, uint32_t *dot11mode) { uint16_t int_mcs; + struct wlan_objmgr_vdev *vdev; + struct mlme_legacy_priv *mlme_priv; /* if the connection is not 11AX mode then return */ if (*dot11mode != MLME_DOT11_MODE_11AX) return; - int_mcs = HE_INTERSECT_MCS(session->he_config.tx_he_mcs_map_lt_80, + vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc, + session->vdev_id, + WLAN_LEGACY_SME_ID); + if (!vdev) + return; + mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev); + if (!mlme_priv) { + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); + return; + } + int_mcs = HE_INTERSECT_MCS(mlme_priv->he_config.tx_he_mcs_map_lt_80, ies->he_cap.rx_he_mcs_map_lt_80); sme_debug("HE self rates %x AP rates %x int_mcs %x vendorIE %d", - session->he_config.rx_he_mcs_map_lt_80, + mlme_priv->he_config.rx_he_mcs_map_lt_80, ies->he_cap.rx_he_mcs_map_lt_80, int_mcs, ies->vendor_vht_ie.present); if (ies->he_cap.present) @@ -14827,6 +14782,7 @@ static void csr_handle_iot_ap_no_common_he_rates(struct mac_context *mac, *dot11mode = MLME_DOT11_MODE_11AC; sme_debug("No common 11AX rate. Force 11AC connection"); } + wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); } #else static void csr_handle_iot_ap_no_common_he_rates(struct mac_context *mac, @@ -15145,7 +15101,7 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId, mac->roam.configParam.is_force_1x1); } - csr_update_he_caps_mcs(mac->mlme_cfg, pSession); + csr_update_he_caps_mcs(mac, mac->mlme_cfg, pSession); /* * If CCK WAR is set for current AP, update to firmware via * WMI_VDEV_PARAM_ABG_MODE_TX_CHAIN_NUM @@ -15578,14 +15534,6 @@ QDF_STATUS csr_send_join_req_msg(struct mac_context *mac, uint32_t sessionId, (&pIes->Country.triplets[0])); csr_apply_power2_current(mac); } - if (IS_DOT11_MODE_HE(csr_join_req->dot11mode)) { - csr_join_req_copy_he_cap(csr_join_req, pSession); - /* change the HE caps like sts per band */ - if (!mac->usr_cfg_tx_bfee_nsts) - CSR_REVISE_REQ_HE_CAP_PER_BAND(csr_join_req, - mac, - bss_freq); - } csr_join_req->enableVhtpAid = mac->mlme_cfg->vht_caps.vht_cap_info.enable_paid; @@ -16161,13 +16109,6 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(struct mac_context *mac, uint32_t &pParam->extendedRateSet, sizeof(tSirMacRateSet)); - if (IS_DOT11_MODE_HE(pMsg->dot11mode)) { - csr_start_bss_copy_he_cap(pMsg, pSession); - /* change the HE caps like sts per band */ - CSR_REVISE_REQ_HE_CAP_PER_BAND(pMsg, mac, - pParam->operation_chan_freq); - } - pMsg->add_ie_params = pParam->add_ie_params; pMsg->obssEnabled = mac->roam.configParam.obssEnabled; pMsg->sap_dot11mc = pParam->sap_dot11mc; @@ -16457,12 +16398,6 @@ QDF_STATUS csr_setup_vdev_session(struct vdev_mlme_obj *vdev_mlme) vdev_mlme->proto.vht_info.caps = vht_config.caps; csr_update_session_he_cap(mac_ctx, session); - /* - * Do not advertise requester role for SAP & responder role - * for STA - */ - csr_init_session_twt_cap(session, vdev_mlme->mgmt.generic.type); - csr_send_set_ie(vdev_mlme->mgmt.generic.type, vdev_mlme->mgmt.generic.subtype, wlan_vdev_get_id(vdev)); diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index e01a8630b3..ade813a178 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -1067,18 +1067,11 @@ bool csr_is_pmkid_found_for_peer(struct mac_context *mac, #ifdef WLAN_FEATURE_11AX void csr_update_session_he_cap(struct mac_context *mac_ctx, struct csr_roam_session *session); -void csr_init_session_twt_cap(struct csr_roam_session *session, - uint32_t type_of_persona); #else static inline void csr_update_session_he_cap(struct mac_context *mac_ctx, struct csr_roam_session *session) { } - -static inline void csr_init_session_twt_cap(struct csr_roam_session *session, - uint32_t type_of_persona) -{ -} #endif /** * csr_get_channel_for_hw_mode_change() - This function to find