wlan: Add ini param to control antenna diversity

Add gAntennaDiversity parameter in ini file with
values mapping to the following behavior:
0 = disabled
1 = Ant 1
2 = Ant 2
3 = Adaptive

CRs-Fixed: 518527
Change-Id: I27e8a02cb4a8e2e3cbd2ae37c12cb8523103cbce
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 04b1a01..ff0ff8c 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1809,6 +1809,11 @@
 #define CFG_ENABLE_HEART_BEAT_OFFLOAD_MAX      ( 1 )
 #define CFG_ENABLE_HEART_BEAT_OFFLOAD_DEFAULT  ( 1 )
 
+#define CFG_ANTENNA_DIVERSITY_PARAM_NAME          "gAntennaDiversity"
+#define CFG_ANTENNA_DIVERSITY_PARAM_MIN           ( 0 )
+#define CFG_ANTENNA_DIVERSITY_PARAM_MAX           ( 3 )
+#define CFG_ANTENNA_DIVERSITY_PARAM_DEFAULT       ( 0 )
+
 /*--------------------------------------------------------------------------- 
   Type declarations
   -------------------------------------------------------------------------*/ 
@@ -2192,6 +2197,7 @@
    v_BOOL_t                    enableOxygenNwk;
    v_U8_t                      flexConnectPowerFactor;
    v_BOOL_t                    enableIbssHeartBeatOffload;
+   v_U32_t                     antennaDiversity;
 } hdd_config_t;
 /*--------------------------------------------------------------------------- 
   Function declarations and documenation
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 4f16c84..e048d40 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2364,6 +2364,12 @@
                  CFG_ENABLE_HEART_BEAT_OFFLOAD_MIN,
                  CFG_ENABLE_HEART_BEAT_OFFLOAD_MAX),
 
+   REG_VARIABLE( CFG_ANTENNA_DIVERSITY_PARAM_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, antennaDiversity,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_ANTENNA_DIVERSITY_PARAM_DEFAULT,
+                 CFG_ANTENNA_DIVERSITY_PARAM_MIN,
+                 CFG_ANTENNA_DIVERSITY_PARAM_MAX),
 };
 
 /*
@@ -2747,6 +2753,7 @@
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gTrafficIdleTimeout] Value = [%u] ", pHddCtx->cfg_ini->trafficIdleTimeout);
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gFlexConnectPowerFactor] Value = [%u] ", pHddCtx->cfg_ini->flexConnectPowerFactor);
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gEnableIbssHeartBeatOffload] Value = [%u] ", pHddCtx->cfg_ini->enableIbssHeartBeatOffload);
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAntennaDiversity] Value = [%u] ", pHddCtx->cfg_ini->antennaDiversity);
 }
 
 
@@ -3911,6 +3918,14 @@
              "WNI_CFG_FLEX_CONNECT_POWER_FACTOR to CCM");
    }
 
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ANTENNA_DIVESITY,
+                    pConfig->antennaDiversity, NULL,
+                    eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_ANTENNA_DIVESITY to CCM");
+   }
+
    return fStatus;
 }
 
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index 5f29147..3922b25 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -362,6 +362,7 @@
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN    302
 #define WNI_CFG_OXYGEN_NETWORK_DATA    303
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR    304
+#define WNI_CFG_ANTENNA_DIVESITY    305
 
 /*
  * String parameter lengths 
@@ -2540,10 +2541,18 @@
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APMAX    9
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_APDEF    0
 
-#define CFG_PARAM_MAX_NUM         305
-#define CFG_AP_IBUF_MAX_SIZE      244
+#define WNI_CFG_ANTENNA_DIVESITY_STAMIN    0
+#define WNI_CFG_ANTENNA_DIVESITY_STAMAX    3
+#define WNI_CFG_ANTENNA_DIVESITY_STADEF    0
+
+#define WNI_CFG_ANTENNA_DIVESITY_APMIN    0
+#define WNI_CFG_ANTENNA_DIVESITY_APMAX    3
+#define WNI_CFG_ANTENNA_DIVESITY_APDEF    0
+
+#define CFG_PARAM_MAX_NUM         306
+#define CFG_AP_IBUF_MAX_SIZE      245
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     239
+#define CFG_STA_IBUF_MAX_SIZE     240
 #define CFG_STA_SBUF_MAX_SIZE     3388
 #define CFG_SEM_MAX_NUM           19
 
diff --git a/CORE/MAC/inc/wniCfgSta.h b/CORE/MAC/inc/wniCfgSta.h
index 6337928..564316c 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -356,6 +356,7 @@
 #define WNI_CFG_ENABLE_ADAPT_RX_DRAIN    302
 #define WNI_CFG_OXYGEN_NETWORK_DATA    303
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR    304
+#define WNI_CFG_ANTENNA_DIVESITY    305
 
 /*
  * String parameter lengths 
@@ -1645,8 +1646,12 @@
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STAMAX    9
 #define WNI_CFG_FLEX_CONNECT_POWER_FACTOR_STADEF    0
 
-#define CFG_PARAM_MAX_NUM        305
-#define CFG_STA_IBUF_MAX_SIZE    239
+#define WNI_CFG_ANTENNA_DIVESITY_STAMIN    0
+#define WNI_CFG_ANTENNA_DIVESITY_STAMAX    3
+#define WNI_CFG_ANTENNA_DIVESITY_STADEF    0
+
+#define CFG_PARAM_MAX_NUM        306
+#define CFG_STA_IBUF_MAX_SIZE    240
 #define CFG_STA_SBUF_MAX_SIZE    3388
 #define CFG_SEM_MAX_NUM          19
 
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index dc7d2d3..9250aaa 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -333,6 +333,7 @@
     (unsigned char *)"ENABLE_ADAPT_RX_DRAIN",
     (unsigned char *)"OXYGEN_NETWORK_DATA",
     (unsigned char *)"FLEX_CONNECT_POWER_FACTOR",
+    (unsigned char *)"ANTENNA_DIVESITY",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index a76a5c2..4980ee3 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4580,3 +4580,19 @@
 V    RW    NP
 NONE
 0    9     0
+
+*
+* Antenna Diversity
+*
+* 0 = disabled
+* 1 = Ant 1
+* 2 = Ant 2
+* 3 = Adaptive
+*
+WNI_CFG_ANTENNA_DIVESITY    I    4    7
+V    RW    NP
+HAL
+0    3    0
+V    RW    NP
+HAL
+0    3    0
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 5c7b655..b0ff216 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1568,6 +1568,21 @@
    tlvStruct = (tHalCfg *)(((tANI_U8 *) tlvStruct
                             + sizeof(tHalCfg) + tlvStruct->length));
 
+   /* QWLAN_HAL_CFG_ANTENNA_DIVERSITY */
+   tlvStruct->type = QWLAN_HAL_CFG_ANTENNA_DIVERSITY;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+   if (wlan_cfgGetInt(pMac, WNI_CFG_ANTENNA_DIVESITY,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_ANTENNA_DIVESITY");
+      goto handle_failure;
+   }
+
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                            + sizeof(tHalCfg) + tlvStruct->length) ;
+
    wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
 #ifdef WLAN_DEBUG
    {
diff --git a/firmware_bin/WCNSS_cfg.dat b/firmware_bin/WCNSS_cfg.dat
index f3d49df..1c1b267 100755
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ