From 53993f7939b577f05766447f7eac761336520590 Mon Sep 17 00:00:00 2001 From: Krunal Soni Date: Fri, 8 Jul 2016 18:20:03 -0700 Subject: [PATCH] qcacld-3.0: Sessionize VHT Capability Sessionize VHT Capability by updating the session entry at join request or start bss and read the same capablities at LIM instead of reading from global VHT CFG items. Following CFG items are taken care as part of this change. WNI_CFG_VHT_SU_BEAMFORMER_CAP, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, WNI_CFG_VHT_MU_BEAMFORMER_CAP, WNI_CFG_VHT_MU_BEAMFORMEE_CAP Change-Id: I7c33de1180416db0027b4690170060549847dd9a CRs-Fixed: 1029145 --- core/hdd/src/wlan_hdd_cfg.c | 10 ++- core/mac/inc/sir_api.h | 5 -- core/mac/src/pe/include/lim_session.h | 4 - core/mac/src/pe/lim/lim_assoc_utils.c | 35 ++++---- core/mac/src/pe/lim/lim_ft.c | 4 +- .../src/pe/lim/lim_process_assoc_req_frame.c | 4 +- .../src/pe/lim/lim_process_mlm_req_messages.c | 7 +- .../src/pe/lim/lim_process_sme_req_messages.c | 82 ++++++++----------- core/mac/src/pe/lim/lim_prop_exts_utils.c | 10 +-- .../src/sys/legacy/src/utils/src/parser_api.c | 11 ++- core/sme/inc/csr_api.h | 1 - core/sme/inc/csr_internal.h | 3 - core/sme/src/csr/csr_api_roam.c | 54 ++++++++---- 13 files changed, 119 insertions(+), 111 deletions(-) diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index 99da72e2c131..b7d6ba15f2fa 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -6797,6 +6797,15 @@ bool hdd_update_config_dat(hdd_context_t *pHddCtx) hddLog(LOGE, "Could not pass on WNI_CFG_IBSS_ATIM_WIN_SIZE to CFG"); } + + if (sme_cfg_set_int(pHddCtx->hHal, + WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, + pConfig->txBFCsnValue) == + QDF_STATUS_E_FAILURE) { + fStatus = false; + hddLog(LOGE, + "Could not pass on WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED to CFG"); + } return fStatus; } #ifdef FEATURE_WLAN_SCAN_PNO @@ -6937,7 +6946,6 @@ QDF_STATUS hdd_set_sme_config(hdd_context_t *pHddCtx) smeConfig->csrConfig.enableTxBF = pConfig->enableTxBF; smeConfig->csrConfig.enable_txbf_sap_mode = pConfig->enable_txbf_sap_mode; - smeConfig->csrConfig.txBFCsnValue = pConfig->txBFCsnValue; smeConfig->csrConfig.enable2x2 = pConfig->enable2x2; smeConfig->csrConfig.enableVhtFor24GHz = pConfig->enableVhtFor24GHzBand; smeConfig->csrConfig.enableMuBformee = pConfig->enableMuBformee; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 558252485446..2aa2318bdf8e 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -653,8 +653,6 @@ typedef struct sSirSmeStartBssReq { uint8_t center_freq_seg0; uint8_t center_freq_seg1; uint8_t sec_ch_offset; - bool txbf_ini_enabled; - uint8_t txbf_csn_val; uint8_t privacy; uint8_t apUapsdEnable; @@ -1140,9 +1138,6 @@ typedef struct sSirSmeJoinReq { uint8_t txLdpcIniFeatureEnabled; tSirHTConfig htConfig; struct sir_vht_config vht_config; - uint8_t txBFIniFeatureEnabled; - uint8_t txBFCsnValue; - uint8_t txMuBformee; uint8_t enableVhtpAid; uint8_t enableVhtGid; uint8_t enableAmpduPs; diff --git a/core/mac/src/pe/include/lim_session.h b/core/mac/src/pe/include/lim_session.h index 2bc7246f98b3..407c6b178068 100644 --- a/core/mac/src/pe/include/lim_session.h +++ b/core/mac/src/pe/include/lim_session.h @@ -314,12 +314,8 @@ typedef struct sPESession /* Added to Support BT-AMP */ uint8_t ch_center_freq_seg0; enum phy_ch_width ch_width; uint8_t ch_center_freq_seg1; - uint8_t txBFIniFeatureEnabled; - uint8_t txbf_csn_value; - uint8_t txMuBformee; uint8_t enableVhtpAid; uint8_t enableVhtGid; - uint8_t enable_su_tx_bformer; tLimWiderBWChannelSwitchInfo gLimWiderBWChannelSwitch; uint8_t enableAmpduPs; uint8_t enableHtSmps; diff --git a/core/mac/src/pe/lim/lim_assoc_utils.c b/core/mac/src/pe/lim/lim_assoc_utils.c index e26a2e9fb5e5..6ec3e19a9dbe 100644 --- a/core/mac/src/pe/lim/lim_assoc_utils.c +++ b/core/mac/src/pe/lim/lim_assoc_utils.c @@ -2269,12 +2269,12 @@ lim_add_sta(tpAniSirGlobal mac_ctx, #ifdef FEATURE_WLAN_TDLS ((STA_ENTRY_PEER == sta_ds->staType) || (STA_ENTRY_TDLS_PEER == sta_ds->staType)) ? - sta_ds->vhtBeamFormerCapable : - session_entry->txBFIniFeatureEnabled; + sta_ds->vhtBeamFormerCapable : + session_entry->vht_config.su_beam_formee; #else (STA_ENTRY_PEER == sta_ds->staType) ? - sta_ds->vhtBeamFormerCapable : - session_entry->txBFIniFeatureEnabled; + sta_ds->vhtBeamFormerCapable : + session_entry->vht_config.su_beam_formee; #endif add_sta_params->enable_su_tx_bformer = sta_ds->vht_su_bfee_capable; @@ -2793,9 +2793,10 @@ lim_add_sta_self(tpAniSirGlobal pMac, uint16_t staIdx, uint8_t updateSta, lim_log(pMac, LOG1, FL("VHT WIDTH SET %d"), pAddStaParams->ch_width); } - pAddStaParams->vhtTxBFCapable = psessionEntry->txBFIniFeatureEnabled; + pAddStaParams->vhtTxBFCapable = + psessionEntry->vht_config.su_beam_formee; pAddStaParams->enable_su_tx_bformer = - psessionEntry->enable_su_tx_bformer; + psessionEntry->vht_config.su_beam_former; lim_log(pMac, LOG2, FL("vhtCapable: %d vhtTxBFCapable %d, su_bfer %d"), pAddStaParams->vhtCapable, pAddStaParams->vhtTxBFCapable, pAddStaParams->enable_su_tx_bformer); @@ -2811,7 +2812,8 @@ lim_add_sta_self(tpAniSirGlobal pMac, uint16_t staIdx, uint8_t updateSta, } pAddStaParams->maxAmpduSize = (uint8_t) ampduLenExponent; } - pAddStaParams->vhtTxMUBformeeCapable = psessionEntry->txMuBformee; + pAddStaParams->vhtTxMUBformeeCapable = + psessionEntry->vht_config.mu_beam_formee; pAddStaParams->enableVhtpAid = psessionEntry->enableVhtpAid; pAddStaParams->enableAmpduPs = psessionEntry->enableAmpduPs; pAddStaParams->enableHtSmps = (psessionEntry->enableHtSmps && @@ -3749,15 +3751,16 @@ tSirRetStatus lim_sta_send_add_bss(tpAniSirGlobal pMac, tpSirAssocRsp pAssocRsp, } if ((vht_caps != NULL) && (vht_caps->suBeamFormerCap || - vht_caps->muBeamformerCap) && - psessionEntry->txBFIniFeatureEnabled) + vht_caps->muBeamformerCap) && + psessionEntry->vht_config.su_beam_formee) sta_context->vhtTxBFCapable = 1; if ((vht_caps != NULL) && vht_caps->muBeamformerCap && - psessionEntry->txMuBformee) + psessionEntry->vht_config.mu_beam_formee) sta_context->vhtTxMUBformeeCapable = 1; + if ((vht_caps != NULL) && vht_caps->suBeamformeeCap && - psessionEntry->enable_su_tx_bformer) + psessionEntry->vht_config.su_beam_former) sta_context->enable_su_tx_bformer = 1; } @@ -4286,18 +4289,20 @@ tSirRetStatus lim_sta_send_add_bss_pre_assoc(tpAniSirGlobal pMac, uint8_t update vht_caps = &pBeaconStruct->vendor2_ie.VHTCaps; if ((vht_caps != NULL) && (vht_caps->suBeamFormerCap || - vht_caps->muBeamformerCap) && - psessionEntry->txBFIniFeatureEnabled) + vht_caps->muBeamformerCap) && + psessionEntry->vht_config.su_beam_formee) pAddBssParams->staContext.vhtTxBFCapable = 1; if ((vht_caps != NULL) && vht_caps->muBeamformerCap && - psessionEntry->txMuBformee) + psessionEntry->vht_config.mu_beam_formee) pAddBssParams->staContext.vhtTxMUBformeeCapable = 1; + if ((vht_caps != NULL) && vht_caps->suBeamformeeCap && - psessionEntry->enable_su_tx_bformer) + psessionEntry->vht_config.su_beam_former) pAddBssParams->staContext.enable_su_tx_bformer = 1; + lim_log(pMac, LOG2, FL("StaContext: su_tx_bfer %d"), pAddBssParams->staContext.enable_su_tx_bformer); } diff --git a/core/mac/src/pe/lim/lim_ft.c b/core/mac/src/pe/lim/lim_ft.c index 770ff88533dc..c8abf3256b27 100644 --- a/core/mac/src/pe/lim/lim_ft.c +++ b/core/mac/src/pe/lim/lim_ft.c @@ -371,11 +371,11 @@ void lim_ft_prepare_add_bss_req(tpAniSirGlobal pMac, pAddBssParams->staContext.vhtCapable = 1; if ((pBeaconStruct->VHTCaps.suBeamFormerCap || pBeaconStruct->VHTCaps.muBeamformerCap) && - pftSessionEntry->txBFIniFeatureEnabled) + pftSessionEntry->vht_config.su_beam_formee) sta_ctx->vhtTxBFCapable = 1; if (pBeaconStruct->VHTCaps.suBeamformeeCap && - pftSessionEntry->enable_su_tx_bformer) + pftSessionEntry->vht_config.su_beam_former) sta_ctx->enable_su_tx_bformer = 1; } if ((pBeaconStruct->HTCaps.supportedChannelWidthSet) && diff --git a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c index 2aebb6f39e4c..ee6c33841b00 100644 --- a/core/mac/src/pe/lim/lim_process_assoc_req_frame.c +++ b/core/mac/src/pe/lim/lim_process_assoc_req_frame.c @@ -1373,12 +1373,12 @@ static bool lim_update_sta_ds(tpAniSirGlobal mac_ctx, tpSirMacMgmtHdr hdr, sta_ds->mlmStaContext.vhtCapability = 0; } if (sta_ds->mlmStaContext.vhtCapability) { - if (session->txBFIniFeatureEnabled && + if (session->vht_config.su_beam_formee && assoc_req->VHTCaps.suBeamFormerCap) sta_ds->vhtBeamFormerCapable = 1; else sta_ds->vhtBeamFormerCapable = 0; - if (session->enable_su_tx_bformer && + if (session->vht_config.su_beam_former && assoc_req->VHTCaps.suBeamformeeCap) sta_ds->vht_su_bfee_capable = 1; else diff --git a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c index 1bf4471e9f08..88629e7e4dad 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_req_messages.c +++ b/core/mac/src/pe/lim/lim_process_mlm_req_messages.c @@ -426,10 +426,11 @@ static void mlm_add_sta(tpAniSirGlobal mac_ctx, tpAddStaParams sta_param, if (session_entry->vhtCapability) { sta_param->vhtCapable = true; sta_param->vhtTxBFCapable = - session_entry->txBFIniFeatureEnabled; - sta_param->vhtTxMUBformeeCapable = session_entry->txMuBformee; + session_entry->vht_config.su_beam_formee; + sta_param->vhtTxMUBformeeCapable = + session_entry->vht_config.mu_beam_formee; sta_param->enable_su_tx_bformer = - session_entry->enable_su_tx_bformer; + session_entry->vht_config.su_beam_former; } /* * Since this is Self-STA, need to populate Self MAX_AMPDU_SIZE 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 46de9dc32f2d..7a7e324761fe 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 @@ -826,15 +826,10 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) case eSIR_INFRA_AP_MODE: lim_configure_ap_start_bss_session(mac_ctx, session, sme_start_bss_req); - if (session->pePersona == QDF_SAP_MODE) { - session->txBFIniFeatureEnabled = - sme_start_bss_req->txbf_ini_enabled; - session->txbf_csn_value = - sme_start_bss_req->txbf_csn_val; + if (session->pePersona == QDF_SAP_MODE) session->vdev_nss = vdev_type_nss->sap; - } else { + else session->vdev_nss = vdev_type_nss->p2p_go; - } break; case eSIR_IBSS_MODE: session->limSystemRole = eLIM_STA_IN_IBSS_ROLE; @@ -930,22 +925,23 @@ __lim_handle_sme_start_bss_request(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) } if (session->vhtCapability && - (CH_WIDTH_160MHZ > session->ch_width)) { - if (wlan_cfg_get_int(mac_ctx, - WNI_CFG_VHT_SU_BEAMFORMER_CAP, &val) != - eSIR_SUCCESS) - lim_log(mac_ctx, LOGE, FL( - "cfg get vht su bformer failed")); - - session->enable_su_tx_bformer = val; - } else { + (session->ch_width > CH_WIDTH_80MHZ)) { session->nss = 1; + lim_log(mac_ctx, LOG1, FL("nss set to [%d]"), + session->nss); } - lim_log(mac_ctx, LOG1, FL("vht su tx bformer %d"), val); + lim_log(mac_ctx, LOG1, FL("vht su tx bformer %d"), + session->vht_config.su_beam_former); /* Delete pre-auth list if any */ lim_delete_pre_auth_list(mac_ctx); + if (session->nss == 1) { + session->vht_config.su_beam_former = 0; + session->vht_config.tx_stbc = 0; + session->vht_config.num_soundingdim = 0; + session->ht_caps.txSTBC = 0; + } /* * keep the RSN/WPA IE information in PE Session Entry * later will be using this to check when received (Re)Assoc req @@ -1784,46 +1780,25 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) IS_DOT11_MODE_VHT(session->dot11mode); if (session->vhtCapability) { if (session->pePersona == QDF_STA_MODE) { - session->txBFIniFeatureEnabled = - sme_join_req->txBFIniFeatureEnabled; + session->vht_config.su_beam_formee = + sme_join_req->vht_config.su_beam_formee; } else { - session->txBFIniFeatureEnabled = 0; + session->vht_config.su_beam_formee = 0; } - session->txMuBformee = sme_join_req->txMuBformee; session->enableVhtpAid = sme_join_req->enableVhtpAid; session->enableVhtGid = sme_join_req->enableVhtGid; - - if (wlan_cfg_get_int(mac_ctx, - WNI_CFG_VHT_SU_BEAMFORMER_CAP, &val) != - eSIR_SUCCESS) - lim_log(mac_ctx, LOGE, FL( - "cfg get vht su bformer failed")); - - session->enable_su_tx_bformer = val; - } - if (session->vhtCapability && session->txBFIniFeatureEnabled) { - if (cfg_set_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, - session->txBFIniFeatureEnabled) != - eSIR_SUCCESS) { - /* - * Set failed for - * CFG_VHT_SU_BEAMFORMEE_CAP - */ - lim_log(mac_ctx, LOGP, - FL("Failed CFG_VHT_SU_BEAMFORMEE_CAP")); - ret_code = eSIR_LOGP_EXCEPTION; - goto end; - } - session->txbf_csn_value = sme_join_req->txBFCsnValue; + lim_log(mac_ctx, LOG1, FL("vht su bformer [%d]"), + session->vht_config.su_beam_former); } + lim_log(mac_ctx, LOG1, - FL("vhtCapability: %d txBFIniFeatureEnabled: %d txbf_csn_value: %d su_tx_bformer %d"), + FL("vhtCapability: %d su_beam_formee: %d txbf_csn_value: %d su_tx_bformer %d"), session->vhtCapability, - session->txBFIniFeatureEnabled, - session->txbf_csn_value, - session->enable_su_tx_bformer); + session->vht_config.su_beam_formee, + session->vht_config.csnof_beamformer_antSup, + session->vht_config.su_beam_former); /*Phy mode */ session->gLimPhyMode = bss_desc->nwType; handle_ht_capabilityand_ht_info(mac_ctx, session); @@ -1971,6 +1946,17 @@ __lim_process_sme_join_req(tpAniSirGlobal mac_ctx, uint32_t *msg_buf) &session->gLimCurrentBssUapsd, &local_power_constraint, session); + /* + * Once the AP capabilities are available then set the + * beam forming capabilities accordingly. + */ + if (session->nss == 1) { + session->vht_config.su_beam_former = 0; + session->vht_config.tx_stbc = 0; + session->vht_config.num_soundingdim = 0; + session->ht_caps.txSTBC = 0; + } + #ifdef FEATURE_WLAN_ESE session->maxTxPower = lim_get_max_tx_power(reg_max, local_power_constraint, diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c index 268a2c18ed1d..192fb2d91f7f 100644 --- a/core/mac/src/pe/lim/lim_prop_exts_utils.c +++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c @@ -140,13 +140,13 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, VHT_MCS_3x3_MASK) && ((beacon_struct->VHTCaps.txMCSMap & VHT_MCS_2x2_MASK) != VHT_MCS_2x2_MASK))) - session->txBFIniFeatureEnabled = 0; + session->vht_config.su_beam_formee = 0; } else { session->vhtCapabilityPresentInBeacon = 0; } if (session->vhtCapabilityPresentInBeacon == 1 && - session->txBFIniFeatureEnabled == 0) { + session->vht_config.su_beam_formee == 0) { cfg_set_status = cfg_set_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, 0); @@ -161,7 +161,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, &enable_txbf_20mhz); if ((IS_SIR_STATUS_SUCCESS(cfg_get_status)) && (false == enable_txbf_20mhz)) - session->txBFIniFeatureEnabled = 0; + session->vht_config.su_beam_formee = 0; } else if (session->vhtCapabilityPresentInBeacon && vht_op->chanWidth) { /* If VHT is supported min 80 MHz support is must */ @@ -242,13 +242,13 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie, session->ch_center_freq_seg1, session->ch_width); if (CH_WIDTH_80MHZ < session->ch_width) { - session->enable_su_tx_bformer = 0; + session->vht_config.su_beam_former = 0; session->nss = 1; } } if (session->vhtCapabilityPresentInBeacon == 1 && !session->htSupportedChannelWidthSet && - session->txBFIniFeatureEnabled == 0) { + session->vht_config.su_beam_formee == 0) { cfg_set_status = cfg_set_int(mac_ctx, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, 0); diff --git a/core/mac/src/sys/legacy/src/utils/src/parser_api.c b/core/mac/src/sys/legacy/src/utils/src/parser_api.c index 95382cfae9c8..b586c0f3308e 100644 --- a/core/mac/src/sys/legacy/src/utils/src/parser_api.c +++ b/core/mac/src/sys/legacy/src/utils/src/parser_api.c @@ -971,6 +971,7 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac, if (psessionEntry->ch_width < CH_WIDTH_160MHZ) { pDot11f->shortGI160and80plus80MHz = 0; + pDot11f->supportedChannelWidthSet = 0; } else { pDot11f->shortGI160and80plus80MHz = psessionEntry->vht_config.shortgi160and80plus80; @@ -982,18 +983,20 @@ populate_dot11f_vht_caps(tpAniSirGlobal pMac, if (psessionEntry->htConfig.ht_rx_stbc) pDot11f->rxSTBC = psessionEntry->vht_config.rx_stbc; - pDot11f->suBeamformeeCap = psessionEntry->txBFIniFeatureEnabled; - if (psessionEntry->txBFIniFeatureEnabled) { + pDot11f->suBeamformeeCap = + psessionEntry->vht_config.su_beam_formee; + if (psessionEntry->vht_config.su_beam_formee) { nCfgValue = 0; CFG_GET_INT(nStatus, pMac, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, nCfgValue); pDot11f->muBeamformeeCap = (nCfgValue & 0x0001); pDot11f->csnofBeamformerAntSup = - psessionEntry->txbf_csn_value; + psessionEntry->vht_config.csnof_beamformer_antSup; } else { pDot11f->muBeamformeeCap = 0; } - pDot11f->suBeamFormerCap = psessionEntry->enable_su_tx_bformer; + pDot11f->suBeamFormerCap = + psessionEntry->vht_config.su_beam_former; pDot11f->vhtTXOPPS = psessionEntry->vht_config.vht_txops; diff --git a/core/sme/inc/csr_api.h b/core/sme/inc/csr_api.h index 2c22a81ea407..8cfbff20ba66 100644 --- a/core/sme/inc/csr_api.h +++ b/core/sme/inc/csr_api.h @@ -1186,7 +1186,6 @@ typedef struct tagCsrConfigParam { uint32_t nVhtChannelWidth; uint8_t enableTxBF; uint8_t enable_txbf_sap_mode; - uint8_t txBFCsnValue; uint8_t enable2x2; bool enableVhtFor24GHz; uint8_t enableMuBformee; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index 4119caec762d..c4eb5ea257e6 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -602,12 +602,9 @@ typedef struct tagCsrConfig { /* To enable scanning 2g channels twice on single scan req from HDD */ bool fScanTwice; uint32_t nVhtChannelWidth; - uint8_t txBFEnable; uint8_t enable_txbf_sap_mode; - uint8_t txBFCsnValue; uint8_t enable2x2; bool enableVhtFor24GHz; - uint8_t txMuBformee; uint8_t enableVhtpAid; uint8_t enableVhtGid; uint8_t enableAmpduPs; diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index de985fd1f764..b29c7c05349c 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -2314,14 +2314,11 @@ QDF_STATUS csr_change_default_config_param(tpAniSirGlobal pMac, pMac->roam.configParam.nVhtChannelWidth = pParam->nVhtChannelWidth; - pMac->roam.configParam.txBFEnable = pParam->enableTxBF; pMac->roam.configParam.enable_txbf_sap_mode = pParam->enable_txbf_sap_mode; - pMac->roam.configParam.txBFCsnValue = pParam->txBFCsnValue; pMac->roam.configParam.enable2x2 = pParam->enable2x2; pMac->roam.configParam.enableVhtFor24GHz = pParam->enableVhtFor24GHz; - pMac->roam.configParam.txMuBformee = pParam->enableMuBformee; pMac->roam.configParam.enableVhtpAid = pParam->enableVhtpAid; pMac->roam.configParam.enableVhtGid = pParam->enableVhtGid; pMac->roam.configParam.enableAmpduPs = pParam->enableAmpduPs; @@ -2512,11 +2509,8 @@ QDF_STATUS csr_get_config_param(tpAniSirGlobal pMac, tCsrConfigParam *pParam) &cfg_params->neighborRoamConfig, sizeof(tCsrNeighborRoamConfigParams)); pParam->nVhtChannelWidth = cfg_params->nVhtChannelWidth; - pParam->enableTxBF = cfg_params->txBFEnable; pParam->enable_txbf_sap_mode = cfg_params->enable_txbf_sap_mode; - pParam->txBFCsnValue = cfg_params->txBFCsnValue; - pParam->enableMuBformee = cfg_params->txMuBformee; pParam->enableVhtFor24GHz = cfg_params->enableVhtFor24GHz; pParam->ignore_peer_erp_info = cfg_params->ignore_peer_erp_info; pParam->enable2x2 = cfg_params->enable2x2; @@ -13615,7 +13609,7 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, struct ps_params *ps_param = &ps_global_info->ps_params[sessionId]; uint8_t ese_config = 0; tpCsrNeighborRoamControlInfo neigh_roam_info; - + uint32_t value = 0, value1 = 0; if (!pSession) { sms_log(pMac, LOGE, FL(" session %d not found "), sessionId); @@ -14088,11 +14082,19 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, FL("ht capability 0x%x VHT capability 0x%x"), (unsigned int)(*(uint32_t *) &csr_join_req->htConfig), (unsigned int)(*(uint32_t *) &csr_join_req->vht_config)); - csr_join_req->txBFIniFeatureEnabled = - (uint8_t) pMac->roam.configParam.txBFEnable; - if (pMac->roam.configParam.txBFEnable) { - txBFCsnValue = - (uint8_t)pMac->roam.configParam.txBFCsnValue; + if (wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, + &value) != eSIR_SUCCESS) + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + FL("Failed to get SU beamformee capability")); + if (wlan_cfg_get_int(pMac, + WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, + &value1) != eSIR_SUCCESS) + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + FL("Failed to get CSN beamformee capability")); + + csr_join_req->vht_config.su_beam_formee = value; + if (value) { + txBFCsnValue = (uint8_t)value1; if (IS_BSS_VHT_CAPABLE(pIes->VHTCaps) && pIes->VHTCaps.numSoundingDim) txBFCsnValue = QDF_MIN(txBFCsnValue, @@ -14102,10 +14104,14 @@ QDF_STATUS csr_send_join_req_msg(tpAniSirGlobal pMac, uint32_t sessionId, txBFCsnValue = QDF_MIN(txBFCsnValue, pIes->vendor2_ie.VHTCaps.numSoundingDim); } - csr_join_req->txBFCsnValue = txBFCsnValue; + csr_join_req->vht_config.csnof_beamformer_antSup = txBFCsnValue; - csr_join_req->txMuBformee = - (uint8_t) pMac->roam.configParam.txMuBformee; + if (wlan_cfg_get_int(pMac, + WNI_CFG_VHT_MU_BEAMFORMEE_CAP, &value) + != eSIR_SUCCESS) + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + FL("Failed to get CSN beamformee capability")); + csr_join_req->vht_config.mu_beam_formee = (uint8_t) value; csr_join_req->enableVhtpAid = (uint8_t) pMac->roam.configParam.enableVhtpAid; @@ -14765,6 +14771,7 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId { tSirSmeStartBssReq *pMsg; uint16_t wTmp; + uint32_t value = 0; tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId); if (!pSession) { @@ -14828,10 +14835,21 @@ QDF_STATUS csr_send_mb_start_bss_req_msg(tpAniSirGlobal pMac, uint32_t sessionId pMsg->isCoalesingInIBSSAllowed = pMac->isCoalesingInIBSSAllowed; pMsg->bssPersona = pParam->bssPersona; pMsg->txLdpcIniFeatureEnabled = pMac->roam.configParam.txLdpcEnable; - pMsg->txbf_ini_enabled = - (uint8_t)pMac->roam.configParam.txBFEnable && + + if (wlan_cfg_get_int(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, &value) + != eSIR_SUCCESS) + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + FL("could not get SU beam formee capability")); + pMsg->vht_config.su_beam_formee = + (uint8_t)value && (uint8_t)pMac->roam.configParam.enable_txbf_sap_mode; - pMsg->txbf_csn_val = (uint8_t)pMac->roam.configParam.txBFCsnValue; + if (wlan_cfg_get_int(pMac, + WNI_CFG_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED, + &value) != eSIR_SUCCESS) + QDF_TRACE(QDF_MODULE_ID_QDF, QDF_TRACE_LEVEL_ERROR, + FL("Failed to get CSN beamformee capability")); + pMsg->vht_config.csnof_beamformer_antSup = (uint8_t)value; + #ifdef WLAN_FEATURE_11W pMsg->pmfCapable = pParam->mfpCapable; pMsg->pmfRequired = pParam->mfpRequired;