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
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 99da72e..b7d6ba1 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -6797,6 +6797,15 @@
 		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 @@
 	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 5582524..2aa2318 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -653,8 +653,6 @@
 	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 @@
 	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 2bc7246..407c6b1 100644
--- a/core/mac/src/pe/include/lim_session.h
+++ b/core/mac/src/pe/include/lim_session.h
@@ -314,12 +314,8 @@
 	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 e26a2e9..6ec3e19 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 @@
 #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_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 @@
 		}
 		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 @@
 			}
 
 			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 @@
 				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 770ff88..c8abf32 100644
--- a/core/mac/src/pe/lim/lim_ft.c
+++ b/core/mac/src/pe/lim/lim_ft.c
@@ -371,11 +371,11 @@
 				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 2aebb6f..ee6c338 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 @@
 		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 1bf4471..88629e7 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 @@
 	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 46de9dc3..7a7e324 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 @@
 		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 @@
 		}
 
 		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 @@
 			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;
+			lim_log(mac_ctx, LOG1, FL("vht su bformer [%d]"),
+					session->vht_config.su_beam_former);
 		}
-		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("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 @@
 			&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 268a2c1..192fb2d 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 @@
 			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 @@
 				&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 @@
 				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 95382cf..b586c0f 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 @@
 
 		if (psessionEntry->ch_width < CH_WIDTH_160MHZ) {
 			pDot11f->shortGI160and80plus80MHz = 0;
+			pDot11f->supportedChannelWidthSet = 0;
 		} else {
 			pDot11f->shortGI160and80plus80MHz =
 				psessionEntry->vht_config.shortgi160and80plus80;
@@ -982,18 +983,20 @@
 		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 2c22a81..8cfbff2 100644
--- a/core/sme/inc/csr_api.h
+++ b/core/sme/inc/csr_api.h
@@ -1186,7 +1186,6 @@
 	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 4119cae..c4eb5ea 100644
--- a/core/sme/inc/csr_internal.h
+++ b/core/sme/inc/csr_internal.h
@@ -602,12 +602,9 @@
 	/* 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 de985fd..b29c7c0 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -2314,14 +2314,11 @@
 
 		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 @@
 		     &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 @@
 	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 @@
 			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 @@
 				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 @@
 {
 	tSirSmeStartBssReq *pMsg;
 	uint16_t wTmp;
+	uint32_t value = 0;
 	tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId);
 
 	if (!pSession) {
@@ -14828,10 +14835,21 @@
 	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;