prima: extscan: Addition of ini gExtScanConcMode.

Add ini variable gExtScanConcMode to provide option to enable/
disable ext scan or use split scan during concurrency mode.

Change-Id: I46b7ff270c23e8aaeb788a00b09323db98b2e407
CRs-Fixed: 907616
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index d8438c6..230319c 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -2526,6 +2526,19 @@
 #define CFG_TOGGLE_ARP_BDRATES_DEFAULT     0
 
 /*
+ * gExtScanConcMode is used to manage EXT Scan during concurrency
+ * This can be useful during WFD session. To avoid glitches during WFD
+ * either ext scan has to be disabled or use split scan
+ * 0: Disable EXT Scan
+ * 1: Use Split scan
+ * 2: Enable EXT Scan
+ */
+#define CFG_EXT_SCAN_CONC_MODE                             "gExtScanConcMode"
+#define CFG_EXT_SCAN_CONC_MODE_MIN                          (0)
+#define CFG_EXT_SCAN_CONC_MODE_MAX                          (2)
+#define CFG_EXT_SCAN_CONC_MODE_DEFAULT                      (1)
+
+/*
  * If within gLinkFailTimeout period(values is mentioned in msec) if FW
  * doesn't receive acks for gLinkFailTxCnt number of packets, then link will
  * be disconnected.
@@ -3074,6 +3087,7 @@
    v_U8_t                      gOptimizeCAevent;
    v_BOOL_t                    enableFwrMemDump;
    v_U8_t                      gActivePassiveChCon;
+   v_U32_t                     cfgExtScanConcMode;
 } hdd_config_t;
 
 /*--------------------------------------------------------------------------- 
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 6ac3f6a..fa92769 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3432,6 +3432,13 @@
                  CFG_ACTIVE_PASSIVE_CHAN_CONV_DEF,
                  CFG_ACTIVE_PASSIVE_CHAN_CONV_MIN,
                  CFG_ACTIVE_PASSIVE_CHAN_CONV_MAX ),
+
+   REG_VARIABLE( CFG_EXT_SCAN_CONC_MODE , WLAN_PARAM_Integer,
+                 hdd_config_t, cfgExtScanConcMode,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_EXT_SCAN_CONC_MODE_DEFAULT,
+                 CFG_EXT_SCAN_CONC_MODE_MIN,
+                 CFG_EXT_SCAN_CONC_MODE_MAX ),
 };
 
 /*
@@ -3858,6 +3865,7 @@
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gDxeReplenishRXTimerVal] Value = [%u] ", pHddCtx->cfg_ini->dxeReplenishRXTimerVal);
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [gDxeSSREnable] Value = [%u] ", pHddCtx->cfg_ini->dxeSSREnable);
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [toggleArpBDRates] Value = [%u] ", pHddCtx->cfg_ini->toggleArpBDRates);
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH, "Name = [ExtScanConcMode] Value = [%u] ", pHddCtx->cfg_ini->cfgExtScanConcMode);
 }
 
 
@@ -5418,6 +5426,12 @@
       fStatus = FALSE;
       hddLog(LOGE, "Could not pass on WNI_CFG_OPTIMIZE_CA_EVENT ");
    }
+   if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_EXT_SCAN_CONC_MODE, pConfig->cfgExtScanConcMode,
+      NULL, eANI_BOOLEAN_FALSE) == eHAL_STATUS_FAILURE)
+   {
+      fStatus = FALSE;
+      hddLog(LOGE, "Could not pass on WNI_CFG_EXT_SCAN_CONC_MODE to CCM");
+   }
 
    if (ccmCfgSetInt(pHddCtx->hHal, WNI_CFG_ACTIVE_PASSIVE_CON,
                     pConfig->gActivePassiveChCon, NULL,
diff --git a/CORE/MAC/inc/wniCfg.h b/CORE/MAC/inc/wniCfg.h
index 7c4cd80..7435f0f 100644
--- a/CORE/MAC/inc/wniCfg.h
+++ b/CORE/MAC/inc/wniCfg.h
@@ -387,7 +387,8 @@
      WNI_CFG_LINK_FAIL_TIMEOUT,
      WNI_CFG_LINK_FAIL_TX_CNT,
      WNI_CFG_OPTIMIZE_CA_EVENT,
-     WNI_CFG_ACTIVE_PASSIVE_CON
+     WNI_CFG_ACTIVE_PASSIVE_CON,
+     WNI_CFG_EXT_SCAN_CONC_MODE
 };
 
 /*
@@ -1896,8 +1897,12 @@
 #define WNI_CFG_ACTIVE_PASSIVE_CON_MAX 1
 #define WNI_CFG_ACTIVE_PASSIVE_CON_DEF 0
 
-#define CFG_PARAM_MAX_NUM        354
-#define CFG_STA_IBUF_MAX_SIZE    288
+#define WNI_CFG_EXT_SCAN_CONC_MODE_MIN    0
+#define WNI_CFG_EXT_SCAN_CONC_MODE_MAX    2
+#define WNI_CFG_EXT_SCAN_CONC_MODE_DEF    1
+
+#define CFG_PARAM_MAX_NUM        355
+#define CFG_STA_IBUF_MAX_SIZE    289
 #define CFG_STA_SBUF_MAX_SIZE    3389
 
 #define CFG_STA_MAGIC_DWORD    0xbeefbeef
diff --git a/CORE/MAC/src/cfg/cfgParamName.c b/CORE/MAC/src/cfg/cfgParamName.c
index af2d1c7..b74ba4c 100644
--- a/CORE/MAC/src/cfg/cfgParamName.c
+++ b/CORE/MAC/src/cfg/cfgParamName.c
@@ -371,6 +371,7 @@
     (unsigned char *)"BTC_DYN_OPP_TX_QUEUE_THOLD",
     (unsigned char *)"TDLS_WMM_MODE_ENABLED",
     (unsigned char *)"BURST_MODE_BE_TXOP_VALUE",
+    (unsigned char *)"EXT_SCAN_CONC_MODE",
 };
 
 
diff --git a/CORE/MAC/src/cfg/cfgProcMsg.c b/CORE/MAC/src/cfg/cfgProcMsg.c
index ea2e0ec..7e6be46 100644
--- a/CORE/MAC/src/cfg/cfgProcMsg.c
+++ b/CORE/MAC/src/cfg/cfgProcMsg.c
@@ -1682,6 +1682,11 @@
      WNI_CFG_ACTIVE_PASSIVE_CON_MIN,
      WNI_CFG_ACTIVE_PASSIVE_CON_MAX,
      WNI_CFG_ACTIVE_PASSIVE_CON_DEF},
+    {WNI_CFG_EXT_SCAN_CONC_MODE,
+     CFG_CTL_VALID | CFG_CTL_RE | CFG_CTL_WE | CFG_CTL_INT | CFG_CTL_NTF_HAL,
+     WNI_CFG_EXT_SCAN_CONC_MODE_MIN,
+     WNI_CFG_EXT_SCAN_CONC_MODE_MAX,
+     WNI_CFG_EXT_SCAN_CONC_MODE_DEF},
 };
 
 tAniSirCfgStaticString cfgStaticString[CFG_MAX_STATIC_STRING] =
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index d85b7d0..dfcd7a1 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -2317,6 +2317,21 @@
    tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
                            + sizeof(tHalCfg) + tlvStruct->length) ;
 
+   /* QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE  */
+   tlvStruct->type = QWLAN_HAL_CFG_EXT_SCAN_CONC_MODE ;
+   tlvStruct->length = sizeof(tANI_U32);
+   configDataValue = (tANI_U32 *)(tlvStruct + 1);
+
+   if (wlan_cfgGetInt(pMac, WNI_CFG_EXT_SCAN_CONC_MODE,
+                                            configDataValue ) != eSIR_SUCCESS)
+   {
+      VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+               "Failed to get value for WNI_CFG_EXT_SCAN_CONC_MODE");
+      goto handle_failure;
+   }
+   tlvStruct = (tHalCfg *)( (tANI_U8 *) tlvStruct
+                           + sizeof(tHalCfg) + tlvStruct->length) ;
+
    wdiStartParams->usConfigBufferLen = (tANI_U8 *)tlvStruct - tlvStructStart ;
 #ifdef WLAN_DEBUG
    {