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