wlan:11AC Tx BeamForming Feature support.
Modified the driver to support 11AC Tx Beamforming Feature.
Change-Id: I4e08692f1637261315e41372a5891854a286300c
(cherry picked from commit af6fe6b148f1979b7c821b990a12d956d3cb39a3)
diff --git a/CORE/MAC/src/include/dphGlobal.h b/CORE/MAC/src/include/dphGlobal.h
index a17b6c2..6ae047f 100644
--- a/CORE/MAC/src/include/dphGlobal.h
+++ b/CORE/MAC/src/include/dphGlobal.h
@@ -625,6 +625,7 @@
#ifdef WLAN_FEATURE_11AC
tANI_U8 vhtSupportedChannelWidthSet;
+ tANI_U8 vhtBeamFormerCapable;
#endif
tANI_U8 htLdpcCapable;
diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h
index f9064ca..b6a0ae2 100644
--- a/CORE/MAC/src/pe/include/limSession.h
+++ b/CORE/MAC/src/pe/include/limSession.h
@@ -332,6 +332,7 @@
tANI_U8 vhtCapabilityPresentInBeacon;
tANI_U8 apCenterChan;
tANI_U8 apChanWidth;
+ tANI_U8 txBFIniFeatureEnabled;
#endif
tANI_U8 spectrumMgtEnabled;
/* *********************11H related*****************************/
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index 51587cb..c74f363 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -2230,6 +2230,9 @@
if(pAddStaParams->vhtCapable)
{
pAddStaParams->vhtTxChannelWidthSet = pStaDs->vhtSupportedChannelWidthSet;
+ pAddStaParams->vhtTxBFCapable =
+ ( STA_ENTRY_PEER == pStaDs->staType ) ? pStaDs->vhtBeamFormerCapable :
+ psessionEntry->txBFIniFeatureEnabled ;
}
#endif
@@ -2626,6 +2629,7 @@
#ifdef WLAN_FEATURE_11AC
pAddStaParams->vhtCapable = psessionEntry->vhtCapability;
pAddStaParams->vhtTxChannelWidthSet = psessionEntry->apChanWidth;
+ pAddStaParams->vhtTxBFCapable = psessionEntry->txBFIniFeatureEnabled;
#endif
/* For Self STA get the LDPC capability from session i.e config.ini*/
@@ -3309,6 +3313,12 @@
{
pAddBssParams->staContext.vhtCapable = 1;
pAddBssParams->staContext.vhtTxChannelWidthSet = pAssocRsp->VHTOperation.chanWidth; //pMac->lim.apChanWidth;
+ if ( (pAssocRsp->VHTCaps.suBeamFormerCap ||
+ pAssocRsp->VHTCaps.muBeamformerCap) &&
+ psessionEntry->txBFIniFeatureEnabled )
+ {
+ pAddBssParams->staContext.vhtTxBFCapable = 1;
+ }
}
#endif
}
@@ -3588,6 +3598,12 @@
{
pAddBssParams->staContext.vhtCapable = 1;
pAddBssParams->staContext.vhtTxChannelWidthSet = pBeaconStruct->VHTOperation.chanWidth;
+ if ((pBeaconStruct->VHTCaps.suBeamFormerCap ||
+ pBeaconStruct->VHTCaps.muBeamformerCap) &&
+ psessionEntry->txBFIniFeatureEnabled )
+ {
+ pAddBssParams->staContext.vhtTxBFCapable = 1;
+ }
}
#endif
}
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
index 23787f1..5f17edb 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmReqMessages.c
@@ -1500,6 +1500,7 @@
if (psessionEntry->vhtCapability)
{
pSta->vhtCapable = VOS_TRUE;
+ pSta->vhtTxBFCapable = psessionEntry->txBFIniFeatureEnabled;
}
#endif
#ifdef WLAN_FEATURE_11AC
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 3b2c165..2668cee 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -1588,6 +1588,33 @@
psessionEntry->vhtCapability = IS_DOT11_MODE_VHT(psessionEntry->dot11mode);
VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO_MED,
"***__limProcessSmeJoinReq: vhtCapability=%d****\n",psessionEntry->vhtCapability);
+ if (psessionEntry->vhtCapability )
+ {
+ psessionEntry->txBFIniFeatureEnabled = pSmeJoinReq->txBFIniFeatureEnabled;
+
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO_MED,
+ "***__limProcessSmeJoinReq: txBFIniFeatureEnabled=%d****\n",
+ psessionEntry->txBFIniFeatureEnabled);
+
+ if( psessionEntry->txBFIniFeatureEnabled )
+ {
+ if (cfgSetInt(pMac, WNI_CFG_VHT_SU_BEAMFORMEE_CAP, psessionEntry->txBFIniFeatureEnabled)
+ != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGP, FL("could not set WNI_CFG_VHT_SU_BEAMFORMEE_CAP at CFG\n"));
+ retCode = eSIR_LOGP_EXCEPTION;
+ goto end;
+ }
+ if (cfgSetInt(pMac, WNI_CFG_VHT_MU_BEAMFORMEE_CAP, psessionEntry->txBFIniFeatureEnabled)
+ != eSIR_SUCCESS)
+ {
+ limLog(pMac, LOGP, FL("could not set WNI_CFG_VHT_MU_BEAMFORMEE_CAP at CFG\n"));
+ retCode = eSIR_LOGP_EXCEPTION;
+ goto end;
+ }
+ }
+ }
+
#endif
/*Phy mode*/
diff --git a/CORE/MAC/src/pe/lim/limPropExtsUtils.c b/CORE/MAC/src/pe/lim/limPropExtsUtils.c
index d36f8b6..72a3294 100644
--- a/CORE/MAC/src/pe/lim/limPropExtsUtils.c
+++ b/CORE/MAC/src/pe/lim/limPropExtsUtils.c
@@ -169,6 +169,8 @@
#ifdef WLAN_FEATURE_11AC
VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO_MED,
"***beacon.VHTCaps.present*****=%d\n",pBeaconStruct->VHTCaps.present);
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO_MED,
+ "***beacon.SU Beamformer Capable*****=%d\n",pBeaconStruct->VHTCaps.suBeamFormerCap);
if ( pBeaconStruct->VHTCaps.present && pBeaconStruct->VHTOperation.present)
{
diff --git a/CORE/MAC/src/pe/lim/limSerDesUtils.c b/CORE/MAC/src/pe/lim/limSerDesUtils.c
index 35e628b..85a6299 100644
--- a/CORE/MAC/src/pe/lim/limSerDesUtils.c
+++ b/CORE/MAC/src/pe/lim/limSerDesUtils.c
@@ -2037,6 +2037,11 @@
if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
return eSIR_FAILURE;
+ //txBFIniFeatureEnabled
+ pJoinReq->txBFIniFeatureEnabled= *pBuf++;
+ len--;
+ if (limCheckRemainingLength(pMac, len) == eSIR_FAILURE)
+ return eSIR_FAILURE;
#if (WNI_POLARIS_FW_PACKAGE == ADVANCED) && defined(ANI_PRODUCT_TYPE_AP)
// Extract BP Indicator