Disable LDPC in sta mode when AP is TXBF capable

In STA mode when both LDPC and TXBF are enabled, throughput is
not stable.As a workaround, till root cause is identified disable
LDPC when AP is TXBF capable.

Change-Id: I3e04aa0c580624cc0b182d464fd08bb70ee423da
CRs-fixed: 451252
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index c726bb6..02a1c8e 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -713,6 +713,7 @@
     // admission control policy information
     tLimAdmitPolicyInfo admitPolicyInfo;
     vos_lock_t lkPeGlobalLock;
+    tANI_U8 disableLDPCWithTxbfAP;
 
 
 
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index b1d7785..6f3654a 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -354,9 +354,9 @@
 #define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    289
 #define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    290
 #define WNI_CFG_ENABLE_MC_ADDR_LIST    291
-#define WNI_CFG_ENABLE_UC_FILTER    292
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    293
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    294
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    292
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    293
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    294
 
 /*
  * String parameter lengths 
@@ -1838,11 +1838,11 @@
 
 #define WNI_CFG_NUM_BUFF_ADVERT_STAMIN    0
 #define WNI_CFG_NUM_BUFF_ADVERT_STAMAX    128
-#define WNI_CFG_NUM_BUFF_ADVERT_STADEF    64
+#define WNI_CFG_NUM_BUFF_ADVERT_STADEF    45
 
 #define WNI_CFG_NUM_BUFF_ADVERT_APMIN    0
 #define WNI_CFG_NUM_BUFF_ADVERT_APMAX    128
-#define WNI_CFG_NUM_BUFF_ADVERT_APDEF    64
+#define WNI_CFG_NUM_BUFF_ADVERT_APDEF    45
 
 #define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN    0
 #define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX    3
@@ -2435,14 +2435,6 @@
 #define WNI_CFG_ENABLE_MC_ADDR_LIST_APMAX    1
 #define WNI_CFG_ENABLE_MC_ADDR_LIST_APDEF    0
 
-#define WNI_CFG_ENABLE_UC_FILTER_STAMIN    0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMAX    1
-#define WNI_CFG_ENABLE_UC_FILTER_STADEF    0
-
-#define WNI_CFG_ENABLE_UC_FILTER_APMIN    0
-#define WNI_CFG_ENABLE_UC_FILTER_APMAX    1
-#define WNI_CFG_ENABLE_UC_FILTER_APDEF    0
-
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMIN    0
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMAX    1
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STADEF    0
@@ -2459,6 +2451,14 @@
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APMAX    1
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_APDEF    0
 
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMIN    0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMAX    1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STADEF    0
+
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMIN    0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APMAX    1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_APDEF    0
+
 #define CFG_PARAM_MAX_NUM         295
 #define CFG_AP_IBUF_MAX_SIZE      234
 #define CFG_AP_SBUF_MAX_SIZE      3422
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index e793507..3e7fa52 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -348,9 +348,9 @@
 #define WNI_CFG_AP_KEEP_ALIVE_TIMEOUT    289
 #define WNI_CFG_GO_KEEP_ALIVE_TIMEOUT    290
 #define WNI_CFG_ENABLE_MC_ADDR_LIST    291
-#define WNI_CFG_ENABLE_UC_FILTER    292
-#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    293
-#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    294
+#define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION    292
+#define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED    293
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP    294
 
 /*
  * String parameter lengths 
@@ -1255,7 +1255,7 @@
 
 #define WNI_CFG_NUM_BUFF_ADVERT_STAMIN    0
 #define WNI_CFG_NUM_BUFF_ADVERT_STAMAX    128
-#define WNI_CFG_NUM_BUFF_ADVERT_STADEF    64
+#define WNI_CFG_NUM_BUFF_ADVERT_STADEF    45
 
 #define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMIN    0
 #define WNI_CFG_MAX_RX_AMPDU_FACTOR_STAMAX    3
@@ -1588,10 +1588,6 @@
 #define WNI_CFG_ENABLE_MC_ADDR_LIST_STAMAX    1
 #define WNI_CFG_ENABLE_MC_ADDR_LIST_STADEF    0
 
-#define WNI_CFG_ENABLE_UC_FILTER_STAMIN    0
-#define WNI_CFG_ENABLE_UC_FILTER_STAMAX    1
-#define WNI_CFG_ENABLE_UC_FILTER_STADEF    0
-
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMIN    0
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STAMAX    1
 #define WNI_CFG_ENABLE_LPWR_IMG_TRANSITION_STADEF    0
@@ -1600,6 +1596,10 @@
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STAMAX    1
 #define WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED_STADEF    0
 
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMIN    0
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STAMAX    1
+#define WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP_STADEF    0
+
 #define CFG_PARAM_MAX_NUM        295
 #define CFG_STA_IBUF_MAX_SIZE    229
 #define CFG_STA_SBUF_MAX_SIZE    3388
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index 4f403dd..66282dd 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -345,9 +345,9 @@
     (unsigned char *)"AP_KEEP_ALIVE_TIMEOUT",
     (unsigned char *)"GO_KEEP_ALIVE_TIMEOUT",
     (unsigned char *)"ENABLE_MC_ADDR_LIST",
-    (unsigned char *)"ENABLE_UC_FILTER",
     (unsigned char *)"ENABLE_LPWR_IMG_TRANSITION",
     (unsigned char *)"ENABLE_MCC_ADAPTIVE_SCHED",
+    (unsigned char *)"DISABLE_LDPC_WITH_TXBF_AP",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 1105cf9..afd7828 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4462,3 +4462,15 @@
 V    RW    NP
 NONE
 0    1     0
+*
+*Disable LDPC in STA mode when AP is TXBF capable
+*
+*
+*
+WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP  I   4   0
+V    RW    NP
+NONE
+0    1     0
+V    RW    NP
+NONE
+0    1     0
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 2d1605f..a49a1ba 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -644,6 +644,11 @@
    /* This was initially done after resume notification from HAL. Now, DAL is
       started before PE so this can be done here */
    handleHTCapabilityandHTInfo(pMac, NULL);
+   if(wlan_cfgGetInt(pMac, WNI_CFG_DISABLE_LDPC_WITH_TXBF_AP,(tANI_U32 *) &pMac->lim.disableLDPCWithTxbfAP) != eSIR_SUCCESS)
+   {
+      limLog(pMac, LOGP, FL("cfg get disableLDPCWithTxbfAP failed\n"));
+      return eSIR_FAILURE;
+   }
 
    return eSIR_SUCCESS;
 }
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index e72b0ea..79ea0d0 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -2248,8 +2248,16 @@
     {
         /* peer STA get the LDPC capability from pStaDs, which populated from 
          * HT/VHT capability*/
-        pAddStaParams->htLdpcCapable = pStaDs->htLdpcCapable;
-        pAddStaParams->vhtLdpcCapable = pStaDs->vhtLdpcCapable;
+        if(pAddStaParams->vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP)
+        {
+            pAddStaParams->htLdpcCapable = 0;
+            pAddStaParams->vhtLdpcCapable = 0;
+        }
+        else
+        {
+            pAddStaParams->htLdpcCapable = pStaDs->htLdpcCapable;
+            pAddStaParams->vhtLdpcCapable = pStaDs->vhtLdpcCapable;
+        }
     }
     else if( STA_ENTRY_SELF == pStaDs->staType)
     {
@@ -3338,8 +3346,16 @@
             pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI20MHz;
             pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pAssocRsp->HTCaps.shortGI40MHz;
             pAddBssParams->staContext.maxAmpduSize= pAssocRsp->HTCaps.maxRxAMPDUFactor;
-            pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pAssocRsp->HTCaps.advCodingCap;
-            pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pAssocRsp->VHTCaps.ldpcCodingCap;
+            if( pAddBssParams->staContext.vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP )
+            {
+                pAddBssParams->staContext.htLdpcCapable = 0;
+                pAddBssParams->staContext.vhtLdpcCapable = 0;
+            }
+            else
+            {
+                pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pAssocRsp->HTCaps.advCodingCap;
+                pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pAssocRsp->VHTCaps.ldpcCodingCap;
+            }
 
             if( pBeaconStruct->HTInfo.present )
                 pAddBssParams->staContext.rifsMode = pAssocRsp->HTInfo.rifsMode;
@@ -3623,8 +3639,16 @@
             pAddBssParams->staContext.fShortGI20Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI20MHz;
             pAddBssParams->staContext.fShortGI40Mhz = (tANI_U8)pBeaconStruct->HTCaps.shortGI40MHz;
             pAddBssParams->staContext.maxAmpduSize= pBeaconStruct->HTCaps.maxRxAMPDUFactor;
-            pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pBeaconStruct->HTCaps.advCodingCap;
-            pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pBeaconStruct->VHTCaps.ldpcCodingCap;
+            if( pAddBssParams->staContext.vhtTxBFCapable && pMac->lim.disableLDPCWithTxbfAP )
+            {
+                pAddBssParams->staContext.htLdpcCapable = 0;
+                pAddBssParams->staContext.vhtLdpcCapable = 0;
+            }
+            else
+            {
+                pAddBssParams->staContext.htLdpcCapable = (tANI_U8)pBeaconStruct->HTCaps.advCodingCap;
+                pAddBssParams->staContext.vhtLdpcCapable = (tANI_U8)pBeaconStruct->VHTCaps.ldpcCodingCap;
+            }
             
             if( pBeaconStruct->HTInfo.present )
                 pAddBssParams->staContext.rifsMode = pBeaconStruct->HTInfo.rifsMode;