wlan: Add ini params to support antenna diversity

Add ini parameters in HDD driver to support antenna diversity

Change-Id: I730ce04fdb7aa7e040f7e4d482091eedf1660066
CRs-fixed: 561894
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index b2ed5d6..bc67358 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -1984,11 +1984,25 @@
 #define CFG_OVERRIDE_COUNTRY_CODE                "gStaCountryCode"
 #define CFG_OVERRIDE_COUNTRY_CODE_DEFAULT        "000"
 
-//Enable debug for remain on channel issues
-#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_NAME    "gDebugP2pRemainOnChannel"
-#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_DEFAULT ( 0 )
-#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MIN     ( 0 )
-#define CFG_DEBUG_P2P_REMAIN_ON_CHANNEL_MAX     ( 1 )
+/*Once the period expires the RSSI will be compared with Threshold
+ * and if needed trigger events will be raised
+ */
+#define CFG_ASD_PROBE_INTERVAL_NAME                     "gAsdProbeInterval"
+#define CFG_ASD_PROBE_INTERVAL_DEFAULT                  (50)
+#define CFG_ASD_PROBE_INTERVAL_MIN                      (10)
+#define CFG_ASD_PROBE_INTERVAL_MAX                      (100)
+
+/* RSSI Threshold used to trigger probing activity/selection process*/
+#define CFG_ASD_TRIGGER_THRESHOLD_NAME                  "gAsdTriggerThreshold"
+#define CFG_ASD_TRIGGER_THRESHOLD_DEFAULT               (-75)
+#define CFG_ASD_TRIGGER_THRESHOLD_MIN                   (-120)
+#define CFG_ASD_TRIGGER_THRESHOLD_MAX                   (0)
+
+/*RSSI Hysteresis Threshold for RSSI-RTT*/
+#define CFG_ASD_RTT_RSSI_HYST_THRESHOLD_NAME             "gAsdRTTRssiHystThreshold"
+#define CFG_ASD_RTT_RSSI_HYST_THRESHOLD_DEFAULT          (50)
+#define CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MIN              (0)
+#define CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MAX              (100)
 
 /*--------------------------------------------------------------------------- 
   Type declarations
@@ -2404,7 +2418,9 @@
    v_BOOL_t                    IsMemoryDebugSupportEnabled;
 #endif
    char                        overrideCountryCode[4];
-   v_BOOL_t                    debugP2pRemainOnChannel;
+   v_U32_t                     gAsdProbeInterval;
+   v_U32_t                     gAsdTriggerThreshold;
+   v_U32_t                     gAsdRTTRssiHystThreshold;
 } 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 07ecc98..ecfcaac 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2835,6 +2835,27 @@
                 hdd_config_t, overrideCountryCode,
                 VAR_FLAGS_OPTIONAL,
                 (void *)CFG_OVERRIDE_COUNTRY_CODE_DEFAULT),
+
+   REG_VARIABLE( CFG_ASD_PROBE_INTERVAL_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, gAsdProbeInterval,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_ASD_PROBE_INTERVAL_DEFAULT,
+                 CFG_ASD_PROBE_INTERVAL_MIN,
+                 CFG_ASD_PROBE_INTERVAL_MAX),
+
+   REG_VARIABLE( CFG_ASD_TRIGGER_THRESHOLD_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, gAsdTriggerThreshold,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_ASD_TRIGGER_THRESHOLD_DEFAULT,
+                 CFG_ASD_TRIGGER_THRESHOLD_MIN,
+                 CFG_ASD_TRIGGER_THRESHOLD_MAX),
+
+   REG_VARIABLE( CFG_ASD_RTT_RSSI_HYST_THRESHOLD_NAME, WLAN_PARAM_Integer,
+                 hdd_config_t, gAsdRTTRssiHystThreshold,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_ASD_RTT_RSSI_HYST_THRESHOLD_DEFAULT,
+                 CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MIN,
+                 CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MAX),
 };
 
 
@@ -3208,6 +3229,10 @@
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gCoalesingInIBSS] Value = [%u] ",pHddCtx->cfg_ini->isCoalesingInIBSSAllowed);
 
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [overrideCountryCode] Value = [%s] ",pHddCtx->cfg_ini->overrideCountryCode);
+
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAsdProbeInterval] Value = [%u]",pHddCtx->cfg_ini->gAsdProbeInterval);
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAsdTriggerThreshold] Value = [%u]",pHddCtx->cfg_ini->gAsdTriggerThreshold);
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gAsdRTTRssiHystThreshold]Value = [%u]",pHddCtx->cfg_ini->gAsdRTTRssiHystThreshold);
 }
 
 
@@ -4459,6 +4484,30 @@
        fStatus = FALSE;
        hddLog(LOGE, "Could not pass on WNI_BTC_ACTIVE_BT_LEN to CCM");
    }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASD_PROBE_INTERVAL,
+                    pConfig->gAsdProbeInterval, NULL,
+                    eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_ASD_PROBE_INTERVAL to CCM");
+   }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASD_TRIGGER_THRESHOLD,
+                    pConfig->gAsdTriggerThreshold, NULL,
+                    eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_ASD_TRIGGER_THRESHOLD to CCM");
+   }
+
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
+                    pConfig->gAsdRTTRssiHystThreshold, NULL,
+                    eANI_BOOLEAN_FALSE)==eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_ASD_RSSI_HYST_THRESHOLD to CCM");
+   }
    return fStatus;
 }
 
diff --git a/CORE/MAC/inc/wniCfgAp.h b/CORE/MAC/inc/wniCfgAp.h
index bfe9455..ac6b2e3 100644
--- a/CORE/MAC/inc/wniCfgAp.h
+++ b/CORE/MAC/inc/wniCfgAp.h
@@ -369,6 +369,10 @@
 #define WNI_CFG_BTC_ACTIVE_BT_LEN    308
 #define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN    309
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN    310
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY    311
+#define WNI_CFG_ASD_PROBE_INTERVAL    312
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD    313
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD    314
 
 /*
  * String parameter lengths 
@@ -2608,10 +2612,42 @@
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_APMAX    250000
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_APDEF    90000
 
-#define CFG_PARAM_MAX_NUM         311
-#define CFG_AP_IBUF_MAX_SIZE      250
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN    0
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX    4294967295
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF    300
+
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMIN    0
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APMAX    4294967295
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_APDEF    300
+
+#define WNI_CFG_ASD_PROBE_INTERVAL_STAMIN    10
+#define WNI_CFG_ASD_PROBE_INTERVAL_STAMAX    100
+#define WNI_CFG_ASD_PROBE_INTERVAL_STADEF    50
+
+#define WNI_CFG_ASD_PROBE_INTERVAL_APMIN    10
+#define WNI_CFG_ASD_PROBE_INTERVAL_APMAX    100
+#define WNI_CFG_ASD_PROBE_INTERVAL_APDEF    50
+
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STAMIN    0
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STAMAX    120
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STADEF    45
+
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_APMIN    0
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_APMAX    120
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_APDEF    45
+
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STAMIN    0
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STAMAX    100
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STADEF    0
+
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_APMIN    0
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_APMAX    100
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_APDEF    0
+
+#define CFG_PARAM_MAX_NUM         315
+#define CFG_AP_IBUF_MAX_SIZE      254
 #define CFG_AP_SBUF_MAX_SIZE      3422
-#define CFG_STA_IBUF_MAX_SIZE     245
+#define CFG_STA_IBUF_MAX_SIZE     249
 #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 13f9014..d49c69c 100644
--- a/CORE/MAC/inc/wniCfgSta.h
+++ b/CORE/MAC/inc/wniCfgSta.h
@@ -363,6 +363,10 @@
 #define WNI_CFG_BTC_ACTIVE_BT_LEN    308
 #define WNI_CFG_BTC_SAP_ACTIVE_WLAN_LEN    309
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN    310
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY    311
+#define WNI_CFG_ASD_PROBE_INTERVAL    312
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD    313
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD    314
 
 /*
  * String parameter lengths 
@@ -1689,8 +1693,24 @@
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STAMAX    250000
 #define WNI_CFG_BTC_SAP_ACTIVE_BT_LEN_STADEF    90000
 
-#define CFG_PARAM_MAX_NUM        311
-#define CFG_STA_IBUF_MAX_SIZE    245
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMIN    0
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STAMAX    4294967295
+#define WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF    300
+
+#define WNI_CFG_ASD_PROBE_INTERVAL_STAMIN    10
+#define WNI_CFG_ASD_PROBE_INTERVAL_STAMAX    100
+#define WNI_CFG_ASD_PROBE_INTERVAL_STADEF    50
+
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STAMIN    0
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STAMAX    120
+#define WNI_CFG_ASD_TRIGGER_THRESHOLD_STADEF    45
+
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STAMIN    0
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STAMAX    100
+#define WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_STADEF    0
+
+#define CFG_PARAM_MAX_NUM        315
+#define CFG_STA_IBUF_MAX_SIZE    249
 #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 487269c..41310b0 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -340,6 +340,10 @@
     (unsigned char *)"BTC_ACTIVE_BT_LEN",
     (unsigned char *)"BTC_SAP_ACTIVE_WLAN_LEN",
     (unsigned char *)"BTC_SAP_ACTIVE_BT_LEN",
+    (unsigned char *)"RMC_ACTION_PERIOD_FREQUENCY",
+    (unsigned char *)"ASD_PROBE_INTERVAL",
+    (unsigned char *)"ASD_TRIGGER_THRESHOLD",
+    (unsigned char *)"ASD_RTT_RSSI_HYST_THRESHOLD",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgUtil/cfg.txt b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
index 5a137ff..e0a2cfe 100644
--- a/CORE/MAC/src/cfg/cfgUtil/cfg.txt
+++ b/CORE/MAC/src/cfg/cfgUtil/cfg.txt
@@ -4650,3 +4650,50 @@
 *
 *
 
+* RMC action period frequency (milli seconds)
+*
+WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY    I    4    7
+V    RW    NP
+HAL
+0   0xFFFFFFFF    300
+V    RW    NP
+HAL
+0   0xFFFFFFFF    300
+*
+*
+
+* Rssi probe interval (milli seconds)
+*
+WNI_CFG_ASD_PROBE_INTERVAL    I    4    7
+V    RW    NP
+HAL
+10    100    50
+V    RW    NP
+HAL
+10    100    50
+*
+*
+
+*Rssi threshold to trigger probing and slecting
+*
+WNI_CFG_ASD_TRIGGER_THRESHOLD    I    4    7
+V    RW    NP
+HAL
+0    120     45
+V    RW    NP
+HAL
+0    120    45
+*
+*
+
+*Rssi Hysteresis threshold for RSSI-RTT
+*
+WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD    I    4    7
+V    RW    NP
+HAL
+0    100    0
+V    RW    NP
+HAL
+0    100    0
+*
+*
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index a9e0c2c..18517ef 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -1735,6 +1735,48 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
                            + sizeof(tHalCfg) + tlvStruct->length) ;
 
+  /* QWLAN_HAL_CFG_ASD_PROBE_INTERVAL */
+   tlvStruct->type = QWLAN_HAL_CFG_ASD_PROBE_INTERVAL  ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+   if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_PROBE_INTERVAL,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_ASD_PROBE_INTERVAL");
+      goto handle_failure;
+   }
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                            + sizeof(tHalCfg) + tlvStruct->length) ;
+
+   /* QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD */
+   tlvStruct->type = QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD  ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+   if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_TRIGGER_THRESHOLD,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_ASD_TRIGGER_THRESHOLD");
+      goto handle_failure;
+   }
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                            + sizeof(tHalCfg) + tlvStruct->length) ;
+
+   /* QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD */
+   tlvStruct->type = QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+   if(wlan_cfgGetInt(pMac, WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_ASD_RTT_RSSI_HYST_THRESHOLD");
+      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 764a7e0..3a714de 100644
--- a/firmware_bin/WCNSS_cfg.dat
+++ b/firmware_bin/WCNSS_cfg.dat
Binary files differ
diff --git a/riva/inc/wlan_hal_cfg.h b/riva/inc/wlan_hal_cfg.h
index 6d2012b..c4054cc 100644
--- a/riva/inc/wlan_hal_cfg.h
+++ b/riva/inc/wlan_hal_cfg.h
@@ -220,7 +220,11 @@
 #define QWLAN_HAL_CFG_BTC_STATIC_OPP_WLAN_ACTIVE_BT_LEN          167
 #define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_WLAN_LEN    168
 #define QWLAN_HAL_CFG_BTC_SAP_STATIC_OPP_WLAN_ACTIVE_BT_LEN      169
-#define QWLAN_HAL_CFG_MAX_PARAMS                        170
+#define QWLAN_HAL_CFG_RMCAST_FIXED_RATE                 170
+#define QWLAN_HAL_CFG_ASD_PROBE_INTERVAL                171
+#define QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD             172
+#define QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD       173
+#define QWLAN_HAL_CFG_MAX_PARAMS                        174
 
 
 /* Total number of Integer CFGs. This is used while allocating the memory for TLV */
@@ -919,4 +923,19 @@
 
 #endif //__WLAN_HAL_CFG_H__
 
+/*Once the period expires the RSSI will be compared with Threshold
+ * and if needed trigger events will be raised
+ */
+#define QWLAN_HAL_CFG_ASD_PROBE_INTERVAL_DEF     50
+#define QWLAN_HAL_CFG_ASD_PROBE_INTERVAL_MIN     10
+#define QWLAN_HAL_CFG_ASD_PROBE_INTERVAL_MAX     100
 
+/* RSSI Threshold used to trigger probing activity/selection process*/
+#define QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD_DEF     -75
+#define QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD_MIN     -120
+#define QWLAN_HAL_CFG_ASD_TRIGGER_THRESHOLD_MAX     0
+
+/*RSSI Hysteresis Threshold for RSSI-RTT*/
+#define QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_DEF     50
+#define QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MIN     50
+#define QWLAN_HAL_CFG_ASD_RTT_RSSI_HYST_THRESHOLD_MAX     100