wlan: While fast roaming prefer 5G Access Points over 2.4G
On top of Roaming, add a new small feature to prefer 5G Access points
over 2.4 G.
because 5G is clean spectrum, more channels
1. Preferring 5G over 2.4G should be configurable dynamically via cfg
ini item
2. We prefer 5G over 2.4G, only if both the Access points RSSI falls in
the same category gap.
For example, 11a AP Rssi 48 and 11b AP Rssi 46..we prefer 11a AP
Change-Id: If0583bb8420e6b6cd93c53b2912ac5167230f8ee
CR-Fixed: 425810
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 0d7f4e8..327b78f 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -333,6 +333,13 @@
#define CFG_RSSI_CATEGORY_GAP_MAX ( 100 )
#define CFG_RSSI_CATEGORY_GAP_DEFAULT ( 30 )
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+#define CFG_ROAM_PREFER_5GHZ "gRoamPrefer5GHz"
+#define CFG_ROAM_PREFER_5GHZ_MIN ( 0 )
+#define CFG_ROAM_PREFER_5GHZ_MAX ( 1 )
+#define CFG_ROAM_PREFER_5GHZ_DEFAULT ( 1 )
+#endif
+
#define CFG_STAT_TIMER_INTERVAL_NAME "gStatTimerInterval"
#define CFG_STAT_TIMER_INTERVAL_MIN ( 50 ) //ms
#define CFG_STAT_TIMER_INTERVAL_MAX ( 10000 )
@@ -1686,6 +1693,9 @@
v_U8_t ShortGI40MhzEnable;
eHddLinkSpeedReportType reportMaxLinkSpeed;
v_S31_t linkSpeedRssiHigh;
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ v_BOOL_t nRoamPrefer5GHz;
+#endif
v_S31_t linkSpeedRssiMid;
v_S31_t linkSpeedRssiLow;
v_U8_t enableMCC;
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index e8014ca..26ed4d8 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -54,6 +54,10 @@
#include <pmcApi.h>
#include <wlan_hdd_misc.h>
+static void cbNotifySetRoamPrefer5GHz(hdd_context_t *pHddCtx, unsigned long NotifyId)
+{
+ sme_UpdateRoamPrefer5GHz((tHalHandle)(pHddCtx->hHal), pHddCtx->cfg_ini->nRoamPrefer5GHz);
+}
REG_TABLE_ENTRY g_registry_table[] =
{
@@ -1575,6 +1579,16 @@
CFG_LINK_SPEED_RSSI_LOW_MAX,
NULL, 0 ),
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ REG_DYNAMIC_VARIABLE( CFG_ROAM_PREFER_5GHZ, WLAN_PARAM_Integer,
+ hdd_config_t, nRoamPrefer5GHz,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_ROAM_PREFER_5GHZ_DEFAULT,
+ CFG_ROAM_PREFER_5GHZ_MIN,
+ CFG_ROAM_PREFER_5GHZ_MAX,
+ cbNotifySetRoamPrefer5GHz, 0 ),
+#endif
+
#ifdef WLAN_FEATURE_P2P
REG_VARIABLE( CFG_P2P_DEVICE_ADDRESS_ADMINISTRATED_NAME, WLAN_PARAM_Integer,
hdd_config_t, isP2pDeviceAddrAdministrated,
@@ -3215,6 +3229,9 @@
smeConfig.csrConfig.fEnableBypass11d = pConfig->enableBypass11d;
smeConfig.csrConfig.fEnableDFSChnlScan = pConfig->enableDFSChnlScan;
smeConfig.csrConfig.fIgnore_chan165 = pConfig->ignore_chan165;
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ smeConfig.csrConfig.nRoamPrefer5GHz = pConfig->nRoamPrefer5GHz;
+#endif
smeConfig.csrConfig.fFirstScanOnly2GChnl = pConfig->enableFirstScan2GOnly;
//FIXME 11d config is hardcoded
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index f6fdf3b..6605386 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -1023,6 +1023,9 @@
tANI_BOOLEAN fFirstScanOnly2GChnl;
tANI_BOOLEAN fIgnore_chan165;
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ tANI_BOOLEAN nRoamPrefer5GHz;
+#endif
}tCsrConfigParam;
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index abf7419..fa743b7 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -76,6 +76,13 @@
NULL \
)
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+#define CSR_IS_ROAM_PREFER_5GHZ( pMac ) \
+( \
+ (((pMac)->roam.configParam.nRoamPrefer5GHz)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \
+)
+#endif
+
//Support for "Fast roaming" (i.e., CCX, LFR, or 802.11r.)
#define CSR_BG_SCAN_OCCUPIED_CHANNEL_LIST_LEN 15
@@ -569,6 +576,7 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
tANI_U8 isFastTransitionEnabled;
tANI_U8 RoamRssiDiff;
+ tANI_BOOLEAN nRoamPrefer5GHz;
#endif
#ifdef WLAN_FEATURE_NEIGHBOR_ROAMING
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 37f9900..968df13 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -2184,4 +2184,19 @@
v_BOOL_t displaySnapshot,
v_BOOL_t toggleStallDetect
);
+
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+/* ---------------------------------------------------------------------------
+ \fn sme_UpdateRoamPrefer5GHz
+ \brief enable/disable Roam prefer 5G runtime option
+ This function is called through dynamic setConfig callback function
+ to configure the Roam prefer 5G runtime option
+ \param hHal - HAL handle for device
+ \param nRoamPrefer5GHz Enable/Disable Roam prefer 5G runtime option
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz);
+#endif
+
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 88ba3de..d175502 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -1273,6 +1273,7 @@
#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
pMac->roam.configParam.isFastTransitionEnabled = pParam->isFastTransitionEnabled;
pMac->roam.configParam.RoamRssiDiff = pParam->RoamRssiDiff;
+ pMac->roam.configParam.nRoamPrefer5GHz = pParam->nRoamPrefer5GHz;
#endif
#ifdef FEATURE_WLAN_LFR
pMac->roam.configParam.isFastRoamIniFeatureEnabled = pParam->isFastRoamIniFeatureEnabled;
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index 6092e1d..47a27fa 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -1772,7 +1772,15 @@
static tANI_U32 csrGetBssCapValue(tpAniSirGlobal pMac, tSirBssDescription *pBssDesc, tDot11fBeaconIEs *pIes)
{
tANI_U32 ret = CSR_BSS_CAP_VALUE_NONE;
-
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+ if(CSR_IS_ROAM_PREFER_5GHZ(pMac))
+ {
+ if((pBssDesc) && CSR_IS_CHANNEL_5GHZ(pBssDesc->channelId))
+ {
+ ret += CSR_BSS_CAP_VALUE_5GHZ;
+ }
+ }
+#endif
if( pIes )
{
//We only care about 11N capability
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index 5864512..6ba16ff 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -88,6 +88,9 @@
#define CSR_BSS_CAP_VALUE_HT 2
#define CSR_BSS_CAP_VALUE_WMM 1
#define CSR_BSS_CAP_VALUE_UAPSD 1
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+#define CSR_BSS_CAP_VALUE_5GHZ 1
+#endif
#define CSR_DEFAULT_ROAMING_TIME 10 //10 seconds
#define CSR_ROAM_MIN(X, Y) ((X) < (Y) ? (X) : (Y))
#define CSR_ROAM_MAX(X, Y) ((X) > (Y) ? (X) : (Y))
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 16f8aff..f495e2c 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -6735,3 +6735,24 @@
{
WDA_TransportChannelDebug(displaySnapshot, toggleStallDetect);
}
+
+#if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR)
+/* ---------------------------------------------------------------------------
+ \fn sme_UpdateRoamPrefer5GHz
+ \brief enable/disable Roam prefer 5G runtime option
+ This function is called through dynamic setConfig callback function
+ to configure the Roam prefer 5G runtime option
+ \param hHal - HAL handle for device
+ \param nRoamPrefer5GHz Enable/Disable Roam prefer 5G runtime option
+ \- return Success or failure
+ -------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateRoamPrefer5GHz(tHalHandle hHal, v_BOOL_t nRoamPrefer5GHz)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ pMac->roam.configParam.nRoamPrefer5GHz = nRoamPrefer5GHz;
+ return(eHAL_STATUS_SUCCESS);
+}
+#endif
+
+
diff --git a/firmware_bin/WCNSS_qcom_cfg.ini b/firmware_bin/WCNSS_qcom_cfg.ini
index 9709da3..731afb3 100644
--- a/firmware_bin/WCNSS_qcom_cfg.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.ini
@@ -181,6 +181,9 @@
#each individual category (aka bucket).
gRssiCatGap=5
+#Prefer 5GHz APs while roaming (default is gRoamPrefer5GHz=1)
+gRoamPrefer5GHz=1
+
# SAP Country code
# Default Country Code is 2 bytes, 3rd byte is optional indoor or out door.