wlan: Force scc with ecsa channel switch once STA connect to new chan

Adds INI force_scc_with_ecsa and if force_scc_with_ecsa is set
use ECSA to force scc and change channel instead of SAP restart.

Change-Id: If8f47225ea729b7b2e1868fdd98d418af8ef16c9
CRs-Fixed: 2143138
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 287b29c..6e15164 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -2659,10 +2659,19 @@
                 hddLog(VOS_TRACE_LEVEL_INFO,"Restart Sap as SAP channel is %d "
                        "and STA channel is %d", pHostapdAdapter->sessionCtx.ap.operatingChannel,
                        (int)pRoamInfo->pBssDesc->channelId);
-                hdd_hostapd_stop(pHostapdAdapter->dev);
-                if (pHddCtx->cfg_ini->enable_sap_auth_offload)
-                  hdd_force_scc_restart_sap(pHostapdAdapter,
-                      pHddCtx, (int)pRoamInfo->pBssDesc->channelId);
+                if (pHddCtx->cfg_ini->force_scc_with_ecsa)
+                {
+                    wlansap_set_channel_change(
+                       (WLAN_HDD_GET_CTX(pHostapdAdapter))->pvosContext,
+                        (int)pRoamInfo->pBssDesc->channelId, true);
+               }
+               else
+               {
+                    hdd_hostapd_stop(pHostapdAdapter->dev);
+                    if (pHddCtx->cfg_ini->enable_sap_auth_offload)
+                       hdd_force_scc_restart_sap(pHostapdAdapter,
+                             pHddCtx, (int)pRoamInfo->pBssDesc->channelId);
+                }
 
              }
         }
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index c761ef2..465ba6a 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -3943,6 +3943,13 @@
                 CFG_TRIGGER_NULLFRAME_BEFORE_HB_DEFAULT,
                 CFG_TRIGGER_NULLFRAME_BEFORE_HB_MIN,
                 CFG_TRIGGER_NULLFRAME_BEFORE_HB_MAX ),
+
+  REG_VARIABLE(CFG_FORCE_SCC_WITH_ECSA_NAME, WLAN_PARAM_Integer,
+               hdd_config_t, force_scc_with_ecsa,
+               VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+               CFG_FORCE_SCC_WITH_ECSA_DEFAULT,
+               CFG_FORCE_SCC_WITH_ECSA_MIN,
+               CFG_FORCE_SCC_WITH_ECSA_MAX ),
 };
 
 /*
@@ -4593,6 +4600,11 @@
             "Name = [%s] Value = [%u] ",
             CFG_TRIGGER_NULLFRAME_BEFORE_HB_NAME,
             pHddCtx->cfg_ini->trigger_nullframe_before_hb);
+
+    VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+            "Name = [%s] Value = [%u] ",
+            CFG_FORCE_SCC_WITH_ECSA_NAME,
+            pHddCtx->cfg_ini->force_scc_with_ecsa);
 }
 
 
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 53bbdfa..422e200 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -20832,7 +20832,7 @@
         return -ENOTSUPP;
 
    channel = vos_freq_to_chan(csa_params->chandef.chan->center_freq);
-   ret = wlansap_set_channel_change(vos_ctx, channel);
+   ret = wlansap_set_channel_change(vos_ctx, channel, false);
 
    return ret;
 }
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 2a5e376..40b3aa9 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -2321,7 +2321,7 @@
                 (WLAN_HDD_P2P_GO == pHostapdAdapter->device_mode)) {
                 hddLog(LOG1, FL("ET Channel Change to new channel= %d"),
                        set_value);
-                ret = wlansap_set_channel_change(pVosContext, set_value);
+                ret = wlansap_set_channel_change(pVosContext, set_value, false);
             } else {
                 hddLog(LOGE, FL("Channel %d Change Failed, Device in not in SAP/GO mode"),
                        set_value);