wlan: Add config parameter for PER based roam full scan

DUT should do a full scan if it is not able to find candidate
AP from the roam cache list. This full scan has to be done when
there is significant RSSI change which is configurable via ini.

Add changes for config paramer upon which full scan will be done.

CRs-Fixed: 1059278
Change-Id: Ia7b069f18560bebf3a593510bbd4babb293ea8b5
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index b5b56a7..6905673 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -975,6 +975,11 @@
 #define CFG_PER_ROAM_SCAN_CCA_ENABLED_MIN             (0)
 #define CFG_PER_ROAM_SCAN_CCA_ENABLED_MAX             (1)
 #define CFG_PER_ROAM_SCAN_CCA_ENABLED_DEFAULT         (0)
+
+#define CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD         "gPERRoamFullScanRssiDiffThreshold"
+#define CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_MIN     (5)
+#define CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_MAX     (50)
+#define CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_DEFAULT (10)
 #endif
 
 #define CFG_QOS_WMM_PKT_CLASSIFY_BASIS_NAME                "PktClassificationBasis" // DSCP or 802.1Q
@@ -3053,6 +3058,7 @@
    v_BOOL_t                     isPERRoamEnabled;
    v_BOOL_t                     isPERRoamRxPathEnabled;
    v_BOOL_t                     isPERRoamCCAEnabled;
+   v_S15_t                      PERRoamFullScanThreshold;
    v_U16_t                      rateUpThreshold;
    v_U16_t                      rateDownThreshold;
    v_U16_t                      PERroamTriggerPercent;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index c659b1c..2b567ed 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -2839,6 +2839,13 @@
                  CFG_PER_ROAM_SCAN_CCA_ENABLED_DEFAULT,
                  CFG_PER_ROAM_SCAN_CCA_ENABLED_MIN,
                  CFG_PER_ROAM_SCAN_CCA_ENABLED_MAX),
+
+   REG_VARIABLE(CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD, WLAN_PARAM_SignedInteger,
+                 hdd_config_t, PERRoamFullScanThreshold,
+                 VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+                 CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_DEFAULT,
+                 CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_MIN,
+                 CFG_PER_ROAM_FULL_SCAN_RSSI_THRESHOLD_MAX),
 #endif
 
    REG_VARIABLE( CFG_ENABLE_ADAPT_RX_DRAIN_NAME, WLAN_PARAM_Integer,
@@ -4234,6 +4241,10 @@
           pHddCtx->cfg_ini->isPERRoamCCAEnabled);
 
   VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+          "Name = [gPERRoamFullScanThreshold] Value = [%u] ",
+          pHddCtx->cfg_ini->PERRoamFullScanThreshold);
+
+  VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
           "Name = [gPERRoamScanInterval] Value = [%lu] ",
           (long unsigned int)pHddCtx->cfg_ini->waitPeriodForNextPERScan);
 
@@ -6041,6 +6052,8 @@
            pConfig->waitPeriodForNextPERScan;
    smeConfig->csrConfig.PERtimerThreshold = pConfig->PERtimerThreshold;
    smeConfig->csrConfig.isPERRoamCCAEnabled = pConfig->isPERRoamCCAEnabled;
+   smeConfig->csrConfig.PERRoamFullScanThreshold =
+                   pConfig->PERRoamFullScanThreshold * -1;
    smeConfig->csrConfig.PERroamTriggerPercent = pConfig->PERroamTriggerPercent;
 
 
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 8994dc3..c85db10 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -3977,7 +3977,7 @@
 
 #ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
 #define SIR_PER_ROAM_MAX_AP_CNT 20
-#define SIR_PER_ROAM_MAX_CANDIDATE_CNT 10
+#define SIR_PER_ROAM_MAX_CANDIDATE_CNT 32
 typedef struct __attribute__((packed))
 {
     tANI_U8    channelNumber;
@@ -4072,6 +4072,7 @@
   tANI_U32  waitPeriodForNextPERScan;
   tANI_U32  PERtimerThreshold;
   tANI_U32  PERroamTriggerPercent;
+  tANI_S16  PERRoamFullScanThreshold;
 } tSirPERRoamOffloadScanReq, *tpSirPERRoamOffloadScanReq;
 
 typedef struct sSirPERRoamTriggerScanReq
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 292aada..e0ce245 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1188,6 +1188,7 @@
     tANI_BOOLEAN bFastRoamInConIniFeatureEnabled;
     v_BOOL_t isPERRoamEnabled;
     v_BOOL_t isPERRoamCCAEnabled;
+    v_S15_t PERRoamFullScanThreshold;
     v_U32_t rateUpThreshold;
     v_U32_t rateDownThreshold;
     v_U32_t waitPeriodForNextPERScan;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index cb13a47..b987396 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -625,6 +625,7 @@
     tANI_BOOLEAN bFastRoamInConIniFeatureEnabled;
     v_BOOL_t     isPERRoamEnabled;
     v_BOOL_t     isPERRoamCCAEnabled;
+    v_S15_t      PERRoamFullScanThreshold;
     tANI_U32     rateUpThreshold;
     tANI_U32     rateDownThreshold;
     tANI_U32     waitPeriodForNextPERScan;
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index f3fe802..d2cd437 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1947,6 +1947,8 @@
         pMac->roam.configParam.PERtimerThreshold = pParam->PERtimerThreshold;
         pMac->roam.configParam.isPERRoamCCAEnabled =
                 pParam->isPERRoamCCAEnabled;
+        pMac->roam.configParam.PERRoamFullScanThreshold =
+                pParam->PERRoamFullScanThreshold;
         pMac->roam.configParam.PERroamTriggerPercent =
                 pParam->PERroamTriggerPercent;
 #endif
@@ -2165,6 +2167,8 @@
         pParam->PERtimerThreshold = pMac->roam.configParam.PERtimerThreshold;
         pParam->isPERRoamCCAEnabled =
                 pMac->roam.configParam.isPERRoamCCAEnabled;
+        pParam->PERRoamFullScanThreshold =
+                pMac->roam.configParam.PERRoamFullScanThreshold;
         pParam->PERroamTriggerPercent =
                 pMac->roam.configParam.PERroamTriggerPercent;
 #endif
@@ -17202,6 +17206,8 @@
               pMac->roam.configParam.PERtimerThreshold;
       PERRoamReqBuf->isPERRoamCCAEnabled =
               pMac->roam.configParam.isPERRoamCCAEnabled;
+      PERRoamReqBuf->PERRoamFullScanThreshold =
+              pMac->roam.configParam.PERRoamFullScanThreshold;
       PERRoamReqBuf->PERroamTriggerPercent =
               pMac->roam.configParam.PERroamTriggerPercent;
       PERRoamReqBuf->sessionId = sessionId;
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 0796496..3f6e8e3 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -18142,6 +18142,8 @@
           pPERRoamOffloadScanReqParams->PERtimerThreshold;
    pwdiPERRoamOffloadScanInfo->isPERRoamCCAEnabled =
           pPERRoamOffloadScanReqParams->isPERRoamCCAEnabled;
+   pwdiPERRoamOffloadScanInfo->PERRoamFullScanThreshold =
+          pPERRoamOffloadScanReqParams->PERRoamFullScanThreshold;
    pwdiPERRoamOffloadScanInfo->PERroamTriggerPercent =
           pPERRoamOffloadScanReqParams->PERroamTriggerPercent;
 
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index b44e3f7..6f0864d 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -5592,6 +5592,7 @@
   wpt_uint32  waitPeriodForNextPERScan;
   wpt_uint32  PERtimerThreshold;
   wpt_uint32  PERroamTriggerPercent;
+  wpt_int16   PERRoamFullScanThreshold;
 } WDI_PERRoamOffloadScanInfo;
 
 typedef struct
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 381006f..693922f 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -27195,6 +27195,8 @@
                      wdiPERRoamOffloadReq->rateDownThreshold;
    halPERRoamConfigReq.perRoamConfigParams.isPERRoamCCAEnabled =
                      wdiPERRoamOffloadReq->isPERRoamCCAEnabled;
+   halPERRoamConfigReq.perRoamConfigParams.PERRoamFullScanThreshold =
+                     wdiPERRoamOffloadReq->PERRoamFullScanThreshold;
    halPERRoamConfigReq.perRoamConfigParams.PERroamTriggerPercent =
                      wdiPERRoamOffloadReq->PERroamTriggerPercent;
    halPERRoamConfigReq.perRoamConfigParams.PERtimerThreshold =
@@ -27206,15 +27208,18 @@
                    &halPERRoamConfigReq.perRoamConfigParams,
                    sizeof(halPERRoamConfigReq.perRoamConfigParams));
 
-   WPAL_TRACE( eWLAN_MODULE_DAL_CTRL,  eWLAN_PAL_TRACE_LEVEL_INFO,
-          "request_id %d waitPeriodForNextPERScan=%d rateUpThreshold=%d rateDownThreshold=%d isPERRoamCCAEnabled=%d PERtimerThreshold=%d PERroamTriggerPercent =%d",
-          halPERRoamConfigReq.perRoamConfigParams.request_id,
+   WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+          "waitPeriodForNextPERScan=%d rateUpThreshold=%d rateDownThreshold=%d isPERRoamCCAEnabled=%d",
           halPERRoamConfigReq.perRoamConfigParams.waitPeriodForNextPERScan,
           halPERRoamConfigReq.perRoamConfigParams.rateUpThreshold,
           halPERRoamConfigReq.perRoamConfigParams.rateDownThreshold,
-          halPERRoamConfigReq.perRoamConfigParams.isPERRoamCCAEnabled,
+          halPERRoamConfigReq.perRoamConfigParams.isPERRoamCCAEnabled);
+   WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+          "PERtimerThreshold=%d PERroamTriggerPercent =%d PERRoamFullScanThreshold %d",
           halPERRoamConfigReq.perRoamConfigParams.PERtimerThreshold,
-          halPERRoamConfigReq.perRoamConfigParams.PERroamTriggerPercent);
+          halPERRoamConfigReq.perRoamConfigParams.PERroamTriggerPercent,
+          halPERRoamConfigReq.perRoamConfigParams.PERRoamFullScanThreshold);
+
    return  WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize,
                wdiPERRoamOffloadScancb, pEventData->pUserData,
                WDI_PER_ROAM_SCAN_OFFLOAD_RSP);