summaryrefslogtreecommitdiff
path: root/CORE/SAP/src
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-01-12 05:59:01 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2014-01-12 05:59:01 -0800
commitee26a888bf0a61e52469fc2b4fc68898d954d662 (patch)
tree32f7ae59d048f37ed4879c5730890569d7f53f40 /CORE/SAP/src
parentab881cbfbab8a7b1baa5c9edfabd30a787073e22 (diff)
parentb4174298c60195acaf7fe20a172c72cf70105ba3 (diff)
Merge "Release 4.0.0.68C for MDM9x35 delivery from qcacld-2.0"
Diffstat (limited to 'CORE/SAP/src')
-rw-r--r--CORE/SAP/src/sapApiLinkCntl.c5
-rw-r--r--CORE/SAP/src/sapChSelect.c1129
-rw-r--r--CORE/SAP/src/sapChSelect.h5
-rw-r--r--CORE/SAP/src/sapFsm.c8
-rw-r--r--CORE/SAP/src/sapFsm_ext.h1
-rw-r--r--CORE/SAP/src/sapInternal.h47
-rw-r--r--CORE/SAP/src/sapModule.c69
7 files changed, 980 insertions, 284 deletions
diff --git a/CORE/SAP/src/sapApiLinkCntl.c b/CORE/SAP/src/sapApiLinkCntl.c
index 5ee32f9f5738..2a87dbd22d69 100644
--- a/CORE/SAP/src/sapApiLinkCntl.c
+++ b/CORE/SAP/src/sapApiLinkCntl.c
@@ -24,7 +24,6 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
/*===========================================================================
s a p A p i L i n k C n t l . C
@@ -41,10 +40,6 @@
Are listed for each API below.
-
- Copyright (c) 2010 Qualcomm Technologies, Inc.
- All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
diff --git a/CORE/SAP/src/sapChSelect.c b/CORE/SAP/src/sapChSelect.c
index cb44a4e5ba41..37c60864c2fc 100644
--- a/CORE/SAP/src/sapChSelect.c
+++ b/CORE/SAP/src/sapChSelect.c
@@ -24,24 +24,18 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
/*===========================================================================
s a p C h S e l e c t . C
-
OVERVIEW:
-
+
This software unit holds the implementation of the WLAN SAP modules
- functions for channel selection.
+ functions for channel selection.
- DEPENDENCIES:
+ DEPENDENCIES:
+
+ Are listed for each API below.
- Are listed for each API below.
-
-
- Copyright (c) 2010 Qualcomm Technologies, Inc.
- All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
@@ -72,6 +66,9 @@
#ifdef ANI_OS_TYPE_QNX
#include "stdio.h"
#endif
+#ifdef FEATURE_WLAN_CH_AVOID
+#include "wlan_hdd_main.h"
+#endif /* FEATURE_WLAN_CH_AVOID */
/*--------------------------------------------------------------------------
Function definitions
@@ -82,6 +79,135 @@
--------------------------------------------------------------------------*/
#define SAP_DEBUG
+#define IS_RSSI_VALID( extRssi, rssi ) \
+( \
+ ((extRssi < rssi)?eANI_BOOLEAN_TRUE:eANI_BOOLEAN_FALSE) \
+)
+
+#ifdef FEATURE_WLAN_CH_AVOID
+/* Store channel safty information */
+typedef struct
+{
+ v_U16_t channelNumber;
+ v_BOOL_t isSafe;
+} sapSafeChannelType;
+
+sapSafeChannelType safeChannels[NUM_20MHZ_RF_CHANNELS] =
+{
+ /*CH , SAFE, default safe */
+ {1 , VOS_TRUE}, //RF_CHAN_1,
+ {2 , VOS_TRUE}, //RF_CHAN_2,
+ {3 , VOS_TRUE}, //RF_CHAN_3,
+ {4 , VOS_TRUE}, //RF_CHAN_4,
+ {5 , VOS_TRUE}, //RF_CHAN_5,
+ {6 , VOS_TRUE}, //RF_CHAN_6,
+ {7 , VOS_TRUE}, //RF_CHAN_7,
+ {8 , VOS_TRUE}, //RF_CHAN_8,
+ {9 , VOS_TRUE}, //RF_CHAN_9,
+ {10 , VOS_TRUE}, //RF_CHAN_10,
+ {11 , VOS_TRUE}, //RF_CHAN_11,
+ {12 , VOS_TRUE}, //RF_CHAN_12,
+ {13 , VOS_TRUE}, //RF_CHAN_13,
+ {14 , VOS_TRUE}, //RF_CHAN_14,
+ {240, VOS_TRUE}, //RF_CHAN_240,
+ {244, VOS_TRUE}, //RF_CHAN_244,
+ {248, VOS_TRUE}, //RF_CHAN_248,
+ {252, VOS_TRUE}, //RF_CHAN_252,
+ {208, VOS_TRUE}, //RF_CHAN_208,
+ {212, VOS_TRUE}, //RF_CHAN_212,
+ {216, VOS_TRUE}, //RF_CHAN_216,
+ {36 , VOS_TRUE}, //RF_CHAN_36,
+ {40 , VOS_TRUE}, //RF_CHAN_40,
+ {44 , VOS_TRUE}, //RF_CHAN_44,
+ {48 , VOS_TRUE}, //RF_CHAN_48,
+ {52 , VOS_TRUE}, //RF_CHAN_52,
+ {56 , VOS_TRUE}, //RF_CHAN_56,
+ {60 , VOS_TRUE}, //RF_CHAN_60,
+ {64 , VOS_TRUE}, //RF_CHAN_64,
+ {100, VOS_TRUE}, //RF_CHAN_100,
+ {104, VOS_TRUE}, //RF_CHAN_104,
+ {108, VOS_TRUE}, //RF_CHAN_108,
+ {112, VOS_TRUE}, //RF_CHAN_112,
+ {116, VOS_TRUE}, //RF_CHAN_116,
+ {120, VOS_TRUE}, //RF_CHAN_120,
+ {124, VOS_TRUE}, //RF_CHAN_124,
+ {128, VOS_TRUE}, //RF_CHAN_128,
+ {132, VOS_TRUE}, //RF_CHAN_132,
+ {136, VOS_TRUE}, //RF_CHAN_136,
+ {140, VOS_TRUE}, //RF_CHAN_140,
+ {149, VOS_TRUE}, //RF_CHAN_149,
+ {153, VOS_TRUE}, //RF_CHAN_153,
+ {157, VOS_TRUE}, //RF_CHAN_157,
+ {161, VOS_TRUE}, //RF_CHAN_161,
+ {165, VOS_TRUE}, //RF_CHAN_165,
+};
+
+/*==========================================================================
+ FUNCTION sapUpdateUnsafeChannelList
+
+ DESCRIPTION
+ Function Undate unsafe channel list table
+
+ DEPENDENCIES
+ NA.
+
+ IN
+ NULL
+
+ RETURN VALUE
+ NULL
+============================================================================*/
+void sapUpdateUnsafeChannelList()
+{
+ v_U16_t i, j;
+
+ v_PVOID_t pvosGCtx = vos_get_global_context(VOS_MODULE_ID_SAP, NULL);
+ struct hdd_context_s *hdd_ctxt;
+
+ if (NULL == pvosGCtx)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
+ "VOSS Global Context is NULL");
+ return ;
+ }
+
+ hdd_ctxt = (struct hdd_context_s *) vos_get_context(VOS_MODULE_ID_HDD, pvosGCtx);
+
+ if (NULL == hdd_ctxt)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_FATAL,
+ "HDD Context is NULL");
+ return ;
+ }
+
+ /* Flush, default set all channel safe */
+ for (i = 0; i < NUM_20MHZ_RF_CHANNELS; i++)
+ {
+ safeChannels[i].isSafe = VOS_TRUE;
+ }
+
+ /* Try to find unsafe channel */
+ for (i = 0; i < hdd_ctxt->unsafe_channel_count; i++)
+ {
+ for (j = 0; j < NUM_20MHZ_RF_CHANNELS; j++)
+ {
+ if(safeChannels[j].channelNumber == hdd_ctxt->unsafe_channel_list[i])
+ {
+ /* Found unsafe channel, update it */
+ safeChannels[j].isSafe = VOS_FALSE;
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s : CH %d is not safe",
+ __func__, hdd_ctxt->unsafe_channel_list[i]);
+ break;
+ }
+ }
+ }
+
+ return;
+}
+
+#endif /* FEATURE_WLAN_CH_AVOID */
+
/*==========================================================================
FUNCTION sapCleanupChannelList
@@ -204,10 +330,22 @@ int sapSetPreferredChannel(tANI_U8* ptr)
}
/*getting the first argument ie the number of channels*/
- sscanf(param, "%d ", &tempInt);
+ if (sscanf(param, "%d ", &tempInt) != 1)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: Cannot get number of channels from input", __func__);
+ return -EINVAL;
+ }
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- "Number of channel added are: %d", tempInt);
+ "%s: Number of channel added are: %d", __func__, tempInt);
+
+ if (tempInt <= 0 || tempInt > 255)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: Invalid Number of channel received", __func__);
+ return -EINVAL;
+ }
/*allocating space for the desired number of channels*/
pSapCtx->SapChnlList.channelList = (v_U8_t *)vos_mem_malloc(tempInt);
@@ -244,12 +382,26 @@ int sapSetPreferredChannel(tANI_U8* ptr)
return -EINVAL;
}
- sscanf(param, "%d ", &tempInt);
+ if (sscanf(param, "%d ", &tempInt) != 1)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: Cannot read channel number", __func__);
+ sapCleanupChannelList();
+ return -EINVAL;
+ }
+ if (tempInt < 0 || tempInt > 255)
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s: Invalid channel number received", __func__);
+ sapCleanupChannelList();
+ return -EINVAL;
+ }
+
pSapCtx->SapChnlList.channelList[j] = tempInt;
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- "Channel %d added to preferred channel list",
- pSapCtx->SapChnlList.channelList[j] );
+ "%s: Channel %d added to preferred channel list",
+ __func__, pSapCtx->SapChnlList.channelList[j] );
}
@@ -360,9 +512,17 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, tSapChSelSpectInfo *pSpectInfoPara
v_U8_t *pChans = NULL;
v_U16_t channelnum = 0;
tpAniSirGlobal pMac = PMAC_STRUCT(halHandle);
+#ifdef FEATURE_WLAN_CH_AVOID
+ v_U16_t i;
+ v_BOOL_t chSafe = VOS_TRUE;
+#endif /* FEATURE_WLAN_CH_AVOID */
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s", __func__);
+#ifdef FEATURE_WLAN_CH_AVOID
+ sapUpdateUnsafeChannelList();
+#endif /* FEATURE_WLAN_CH_AVOID */
+
// Channels for that 2.4GHz band
//Considered only for 2.4GHz need to change in future to support 5GHz support
pSpectInfoParams->numSpectChans = pMac->scan.base20MHzChannels.numChannels;
@@ -384,14 +544,35 @@ v_BOOL_t sapChanSelInit(tHalHandle halHandle, tSapChSelSpectInfo *pSpectInfoPara
// Fill the channel number in the spectrum in the operating freq band
for (channelnum = 0; channelnum < pSpectInfoParams->numSpectChans; channelnum++, pChans++) {
+#ifdef FEATURE_WLAN_CH_AVOID
+ chSafe = VOS_TRUE;
+ for(i = 0; i < NUM_20MHZ_RF_CHANNELS; i++) {
+ if((safeChannels[i].channelNumber == *pChans) &&
+ (VOS_FALSE == safeChannels[i].isSafe))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Ch %d is not safe",
+ __func__, *pChans);
+ chSafe = VOS_FALSE;
+ break;
+ }
+ }
+#endif /* FEATURE_WLAN_CH_AVOID */
if(*pChans == 14 ) //OFDM rates are not supported on channel 14
continue;
- pSpectCh->chNum = *pChans;
- pSpectCh->valid = eSAP_TRUE;
- pSpectCh->rssiAgr = SOFTAP_MIN_RSSI;// Initialise for all channels
- pSpectCh->channelWidth = SOFTAP_HT20_CHANNELWIDTH; // Initialise 20MHz for all the Channels
- pSpectCh++;
+
+#ifdef FEATURE_WLAN_CH_AVOID
+ if (VOS_TRUE == chSafe)
+ {
+#endif /* FEATURE_WLAN_CH_AVOID */
+ pSpectCh->chNum = *pChans;
+ pSpectCh->valid = eSAP_TRUE;
+ pSpectCh->rssiAgr = SOFTAP_MIN_RSSI;// Initialise for all channels
+ pSpectCh->channelWidth = SOFTAP_HT20_CHANNELWIDTH; // Initialise 20MHz for all the Channels
+ pSpectCh++;
+#ifdef FEATURE_WLAN_CH_AVOID
+ }
+#endif /* FEATURE_WLAN_CH_AVOID */
}
return eSAP_TRUE;
}
@@ -426,7 +607,7 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count)
// Weight from RSSI
rssiWeight = SOFTAP_RSSI_WEIGHT * (rssi - SOFTAP_MIN_RSSI)
/(SOFTAP_MAX_RSSI - SOFTAP_MIN_RSSI);
-
+
if(rssiWeight > SOFTAP_RSSI_WEIGHT)
rssiWeight = SOFTAP_RSSI_WEIGHT;
else if (rssiWeight < 0)
@@ -435,12 +616,12 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count)
// Weight from data count
countWeight = SOFTAP_COUNT_WEIGHT * (count - SOFTAP_MIN_COUNT)
/(SOFTAP_MAX_COUNT - SOFTAP_MIN_COUNT);
-
+
if(countWeight > SOFTAP_COUNT_WEIGHT)
countWeight = SOFTAP_COUNT_WEIGHT;
else if (countWeight < 0)
countWeight = 0;
-
+
rssicountWeight = rssiWeight + countWeight;
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, rssiWeight=%d, countWeight=%d, rssicountWeight=%d",
@@ -472,184 +653,716 @@ v_U32_t sapweightRssiCount(v_S7_t rssi, v_U16_t count)
void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh)
{
tSapSpectChInfo *pExtSpectCh = NULL;
+ v_S31_t rssi;
+
switch(pSpectCh->chNum)
{
case CHANNEL_1:
pExtSpectCh = (pSpectCh + 1);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 2);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 3);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 4);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
+
case CHANNEL_2:
pExtSpectCh = (pSpectCh - 1);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 1);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 2);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 3);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
case CHANNEL_3:
+ pExtSpectCh = (pSpectCh - 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ break;
case CHANNEL_4:
+ pExtSpectCh = (pSpectCh - 3);
+ if(pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ break;
+
case CHANNEL_5:
case CHANNEL_6:
case CHANNEL_7:
- case CHANNEL_8:
- case CHANNEL_9:
- pExtSpectCh = (pSpectCh - 1);
- if(pExtSpectCh != NULL)
+ pExtSpectCh = (pSpectCh - 4);
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
- pExtSpectCh = (pSpectCh + 1);
- if(pExtSpectCh != NULL)
+ pExtSpectCh = (pSpectCh - 3);
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh - 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 2);
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 3);
+ if(pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
- case CHANNEL_10:
- pExtSpectCh = (pSpectCh - 1);
+
+ case CHANNEL_8:
+ pExtSpectCh = (pSpectCh - 4);
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+
+ pExtSpectCh = (pSpectCh - 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh + 1);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ break;
+
+ case CHANNEL_9:
+ pExtSpectCh = (pSpectCh - 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
+
+ pExtSpectCh = (pSpectCh - 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
pExtSpectCh = (pSpectCh - 2);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 2);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ break;
+
+ case CHANNEL_10:
+ pExtSpectCh = (pSpectCh - 4);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
+
pExtSpectCh = (pSpectCh - 3);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 2);
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh - 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
+ }
+ pExtSpectCh = (pSpectCh + 1);
+ if (pExtSpectCh != NULL)
+ {
+ ++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
+
case CHANNEL_11:
pExtSpectCh = (pSpectCh - 1);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FIRST_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh - 2);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_SEC_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh - 3);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_THIRD_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
pExtSpectCh = (pSpectCh - 4);
- if(pExtSpectCh != NULL)
+ if (pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY);
- if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
+ rssi = pSpectCh->rssiAgr +
+ SAP_24GHZ_FOURTH_OVERLAP_CHAN_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
+ if (pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
+
default:
break;
}
@@ -678,8 +1391,8 @@ void sapInterferenceRssiCount(tSapSpectChInfo *pSpectCh)
SIDE EFFECTS
============================================================================*/
-void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
- tHalHandle halHandle, tScanResultHandle pResult)
+void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
+ tHalHandle halHandle, tScanResultHandle pResult)
{
v_S7_t rssi = 0;
v_U8_t chn_num = 0;
@@ -696,14 +1409,13 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
tSirProbeRespBeacon *pBeaconStruct;
tpAniSirGlobal pMac = (tpAniSirGlobal) halHandle;
- if(eHAL_STATUS_SUCCESS != palAllocateMemory(pMac->hHdd,
- (void **)&pBeaconStruct, sizeof(tSirProbeRespBeacon)))
+ pBeaconStruct = vos_mem_malloc(sizeof(tSirProbeRespBeacon));
+ if ( NULL == pBeaconStruct )
{
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,"Unable to PAL allocate memory in sapComputeSpectWeight\n");
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "Unable to allocate memory in sapComputeSpectWeight\n");
return;
}
-
-
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Computing spectral weight", __func__);
/**
@@ -711,7 +1423,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
*/
ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
- pScanResult = sme_ScanResultGetFirst(halHandle, pResult);
+ pScanResult = sme_ScanResultGetFirst(halHandle, pResult);
while (pScanResult) {
pSpectCh = pSpectInfoParams->pSpectCh;
@@ -720,15 +1432,15 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
secondaryChannelOffset = PHY_SINGLE_CHANNEL_CENTERED;
vhtSupport = 0;
centerFreq = 0;
-
- if(pScanResult->BssDescriptor.ieFields != NULL)
+
+ if (pScanResult->BssDescriptor.ieFields != NULL)
{
ieLen = (pScanResult->BssDescriptor.length + sizeof(tANI_U16) + sizeof(tANI_U32) - sizeof(tSirBssDescription));
- palZeroMemory(pMac->hHdd, (tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon));
-
+ vos_mem_set((tANI_U8 *) pBeaconStruct, sizeof(tSirProbeRespBeacon), 0);
+
if ((sirParseBeaconIE(pMac, pBeaconStruct,(tANI_U8 *)( pScanResult->BssDescriptor.ieFields), ieLen)) == eSIR_SUCCESS)
{
- if(pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present)
+ if (pBeaconStruct->HTCaps.present && pBeaconStruct->HTInfo.present)
{
channelWidth = pBeaconStruct->HTCaps.supportedChannelWidthSet;
secondaryChannelOffset = pBeaconStruct->HTInfo.secondaryChannelOffset;
@@ -756,7 +1468,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
else
channel_id = pScanResult->BssDescriptor.channelId;
- if (channel_id == pSpectCh->chNum) {
+ if (channel_id == pSpectCh->chNum) {
if (pSpectCh->rssiAgr < pScanResult->BssDescriptor.rssi)
pSpectCh->rssiAgr = pScanResult->BssDescriptor.rssi;
@@ -765,8 +1477,8 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(operatingBand) // Connsidering the Extension Channel only in a channels
{
/* Updating the received ChannelWidth */
- if (pSpectCh->channelWidth != channelWidth)
- pSpectCh->channelWidth = channelWidth;
+ if (pSpectCh->channelWidth != channelWidth)
+ pSpectCh->channelWidth = channelWidth;
/* If received ChannelWidth is other than HT20, we need to update the extension channel Params as well */
/* channelWidth == 0, HT20 */
/* channelWidth == 1, HT40 */
@@ -782,17 +1494,26 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
// REducing the rssi by -20 and assigning it to Extension channel
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
break;
+
case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY: // Below the Primary channel
pExtSpectCh = (pSpectCh - 1);
if(pExtSpectCh != NULL)
{
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
++pExtSpectCh->bssCount;
@@ -808,7 +1529,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -20 and assigning it to Subband 1
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -20 and assigning it to Subband 1
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -816,7 +1541,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -30 and assigning it to Subband 2
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -30 and assigning it to Subband 2
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -824,10 +1553,14 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY); // Reducing the rssi by -40 and assigning it to Subband 3
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi; // Reducing the rssi by -40 and assigning it to Subband 3
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
- }
+ }
}
else if((centerFreq - channel_id) == 2)
{
@@ -836,7 +1569,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -844,7 +1581,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -852,7 +1593,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -864,7 +1609,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -872,7 +1621,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -880,7 +1633,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -892,7 +1649,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND1_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -900,7 +1661,11 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND2_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
@@ -908,14 +1673,18 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
if(pExtSpectCh != NULL)
{
++pExtSpectCh->bssCount;
- pExtSpectCh->rssiAgr = (pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY);
+ rssi = pSpectCh->rssiAgr + SAP_SUBBAND3_RSSI_EFFECT_PRIMARY;
+ if (IS_RSSI_VALID(pExtSpectCh->rssiAgr, rssi))
+ {
+ pExtSpectCh->rssiAgr = rssi;
+ }
if(pExtSpectCh->rssiAgr < SOFTAP_MIN_RSSI)
pExtSpectCh->rssiAgr = SOFTAP_MIN_RSSI;
}
}
break;
}
- }
+ }
else if(operatingBand == RF_SUBBAND_2_4_GHZ)
{
sapInterferenceRssiCount(pSpectCh);
@@ -940,7 +1709,7 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Spectrum Channels Weight", __func__);
for (chn_num = 0; chn_num < (pSpectInfoParams->numSpectChans); chn_num++) {
-
+
/*
rssi : Maximum received signal strength among all BSS on that channel
bssCount : Number of BSS on that channel
@@ -950,13 +1719,15 @@ void sapComputeSpectWeight( tSapChSelSpectInfo* pSpectInfoParams,
pSpectCh->weight = SAPDFS_NORMALISE_1000 * sapweightRssiCount(rssi, pSpectCh->bssCount);
- //------ Debug Info ------
- VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Chan=%d Weight= %d rssiAgr=%d bssCount=%d", __func__, pSpectCh->chNum,
- pSpectCh->weight, pSpectCh->rssiAgr, pSpectCh->bssCount);
- //------ Debug Info ------
+ //------ Debug Info ------
+ VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "In %s, Chan=%d Weight= %d rssiAgr=%d bssCount=%d", __func__,
+ pSpectCh->chNum, pSpectCh->weight,
+ pSpectCh->rssiAgr, pSpectCh->bssCount);
+ //------ Debug Info ------
pSpectCh++;
}
- palFreeMemory(pMac->hHdd, pBeaconStruct);
+ vos_mem_free(pBeaconStruct);
}
/*==========================================================================
@@ -1056,68 +1827,6 @@ void sapSortChlWeight(tSapChSelSpectInfo *pSpectInfoParams)
}
/*==========================================================================
- FUNCTION sapComputeNonOverlapChannel
-
- DESCRIPTION
- Checking for the Free Non Overlapping Channel
-
- DEPENDENCIES
- NA.
-
- PARAMETERS
-
- IN
- pSpectInfoParams: Spectrum Info params
- startChannelNum: Allowed start channel number
- endChannelNum: Allowed end channel number
-
- RETURN VALUE
- v_U8_t : Success - Bit mask
-
- SIDE EFFECTS
-============================================================================*/
-v_U8_t sapComputeNonOverlapChannel(tSapChSelSpectInfo* pSpectInfoParams,
- v_U32_t startChannelNum, v_U32_t endChannelNum)
-{
- v_U8_t nonOverlap = 0;
- tSapSpectChInfo *pSpectCh = NULL;
- v_U8_t chn_num = 0;
- pSpectCh = pSpectInfoParams->pSpectCh;
- for (chn_num = 0; chn_num < (pSpectInfoParams->numSpectChans); chn_num++) {
-
- if (startChannelNum > pSpectCh->chNum || endChannelNum < pSpectCh->chNum)
- {
- // Channel is not in allowed range
- pSpectCh++;
- continue;
- }
-
- if(pSpectCh->chNum == CHANNEL_1 || pSpectCh->chNum == CHANNEL_6 || pSpectCh->chNum == CHANNEL_11)
- {
- switch(pSpectCh->chNum)
- {
- case 1:
- if(pSpectCh->weight == 0)
- nonOverlap |= 0x1; //Bit 0 For channel 1
- break;
- case 6:
- if(pSpectCh->weight == 0)
- nonOverlap |= 0x2; // Bit 1 For Channel 6
- break;
- case 11:
- if(pSpectCh->weight == 0)
- nonOverlap |= 0x4; // Bit 2 for Channel 11
- break;
- default:
- break;
- }
- }
- pSpectCh++;
- }
- return nonOverlap;
-}
-
-/*==========================================================================
FUNCTION sapSelectChannel
DESCRIPTION
@@ -1143,7 +1852,6 @@ v_U8_t sapSelectChannel(tHalHandle halHandle, ptSapContext pSapCtx, tScanResult
// DFS param object holding all the data req by the algo
tSapChSelSpectInfo oSpectInfoParams = {NULL,0};
tSapChSelSpectInfo *pSpectInfoParams = &oSpectInfoParams; // Memory? NB
- v_U8_t nonOverlap = 0;
v_U8_t bestChNum = 0;
#ifdef SOFTAP_CHANNEL_RANGE
v_U32_t startChannelNum;
@@ -1173,60 +1881,49 @@ v_U8_t sapSelectChannel(tHalHandle halHandle, ptSapContext pSapCtx, tScanResult
ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_END_CHANNEL, &endChannelNum);
ccmCfgGetInt( halHandle, WNI_CFG_SAP_CHANNEL_SELECT_OPERATING_BAND, &operatingBand);
- // Calculating the Non overlapping Channel Availability */
- if(operatingBand == RF_SUBBAND_2_4_GHZ)
- nonOverlap = sapComputeNonOverlapChannel(pSpectInfoParams, startChannelNum,
- endChannelNum);
-
/*Loop till get the best channel in the given range */
for(count=0; count < pSpectInfoParams->numSpectChans ; count++)
{
if((startChannelNum <= pSpectInfoParams->pSpectCh[count].chNum)&&
( endChannelNum >= pSpectInfoParams->pSpectCh[count].chNum))
{
- bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum;
- break;
- }
- }
-
+ if(bestChNum == 0)
+ {
+ bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum;
+ }
+ else
+ {
+ if(operatingBand == RF_SUBBAND_2_4_GHZ)
+ {
+ /* Give preference to Non-overlap channels */
+ if(((pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_1) ||
+ (pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_6) ||
+ (pSpectInfoParams->pSpectCh[count].chNum == CHANNEL_11))&&
+ (pSpectInfoParams->pSpectCh[count].weight == 0))
+ {
+ bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[count].chNum;
+ break;
+ }
+ }
+ }
+ }
+ }
#else
// Get the first channel in sorted array as best 20M Channel
bestChNum = (v_U8_t)pSpectInfoParams->pSpectCh[0].chNum;
-
#endif
-
+
//Select Best Channel from Channel List if Configured
bestChNum = sapSelectPreferredChannelFromChannelList(bestChNum, pSapCtx, pSpectInfoParams);
- if(operatingBand == RF_SUBBAND_2_4_GHZ)
- {
- if(nonOverlap)
- {
- switch(nonOverlap)
- {
- case 0x1:
- bestChNum = CHANNEL_1;
- break;
- case 0x2:
- bestChNum = CHANNEL_6;
- break;
- case 0x4:
- bestChNum = CHANNEL_11;
- break;
- default:
- break;
- }
- }
- }
-
// Free all the allocated memory
sapChanSelExit(pSpectInfoParams);
VOS_TRACE(VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH, "In %s, Running SAP Ch select Completed, Ch=%d",
- __func__, bestChNum);
-
+ __func__, bestChNum);
if (bestChNum > 0 && bestChNum <= 252)
return bestChNum;
else
return SAP_CHANNEL_NOT_SELECTED;
}
+
diff --git a/CORE/SAP/src/sapChSelect.h b/CORE/SAP/src/sapChSelect.h
index 9e9bd592807e..ed8cdfabb268 100644
--- a/CORE/SAP/src/sapChSelect.h
+++ b/CORE/SAP/src/sapChSelect.h
@@ -24,7 +24,6 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
#if !defined( __SAP_CH_SELECT_H )
#define __SAP_CH_SELECT_H
@@ -42,10 +41,6 @@
Are listed for each API below.
-
- Copyright (c) 2010 Qualcomm Technologies, Inc.
- All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c
index 7d85166f1bcf..ddba2f0b2e69 100644
--- a/CORE/SAP/src/sapFsm.c
+++ b/CORE/SAP/src/sapFsm.c
@@ -24,7 +24,6 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
/*===========================================================================
s a p F s m . C
@@ -38,10 +37,6 @@
Are listed for each API below.
-
- Copyright (c) 2010 Qualcomm Technologies, Inc.
- All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
@@ -327,11 +322,10 @@ sapGotoStarting
eHalStatus halStatus;
tANI_U32 type, subType;
VOS_STATUS status = VOS_STATUS_E_FAILURE;
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
-
/*- - - - - - - - TODO:once configs from hdd available - - - - - - - - -*/
char key_material[32]={ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1,};
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
sapContext->key_type = 0x05;
sapContext->key_length = 32;
vos_mem_copy(sapContext->key_material, key_material, sizeof(key_material)); /* Need a key size define */
diff --git a/CORE/SAP/src/sapFsm_ext.h b/CORE/SAP/src/sapFsm_ext.h
index 46b53ac41aa3..5535732b235c 100644
--- a/CORE/SAP/src/sapFsm_ext.h
+++ b/CORE/SAP/src/sapFsm_ext.h
@@ -25,7 +25,6 @@
* to the Linux Foundation.
*/
-
/* This file is generated from btampFsm.cdd - do not edit manually*/
/* Generated on: Thu Oct 16 15:40:39 PDT 2008 */
diff --git a/CORE/SAP/src/sapInternal.h b/CORE/SAP/src/sapInternal.h
index c6f646e9e145..aa23a9ba40aa 100644
--- a/CORE/SAP/src/sapInternal.h
+++ b/CORE/SAP/src/sapInternal.h
@@ -24,7 +24,6 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
#ifndef WLAN_QCT_WLANSAP_INTERNAL_H
#define WLAN_QCT_WLANSAP_INTERNAL_H
@@ -38,9 +37,6 @@ DESCRIPTION
This file contains the internal API exposed by the wlan SAP PAL layer
module.
-
- Copyright (c) 2008 Qualcomm Technologies, Inc. All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
@@ -190,9 +186,9 @@ typedef struct sSapContext {
// Mac filtering settings
eSapMacAddrACL eSapMacAddrAclMode;
- v_MACADDR_t acceptMacList[MAX_MAC_ADDRESS_ACCEPTED];
+ v_MACADDR_t acceptMacList[MAX_ACL_MAC_ADDRESS];
v_U8_t nAcceptMac;
- v_MACADDR_t denyMacList[MAX_MAC_ADDRESS_DENIED];
+ v_MACADDR_t denyMacList[MAX_ACL_MAC_ADDRESS];
v_U8_t nDenyMac;
// QOS config
@@ -581,26 +577,28 @@ sapSortMacList(v_MACADDR_t *macList, v_U8_t size);
FUNCTION sapAddMacToACL
- DESCRIPTION
+ DESCRIPTION
Function to ADD a mac address in an ACL.
The function ensures that the ACL list remains sorted after the addition.
- This API does not take care of buffer overflow i.e. if the list is already maxed out while adding a mac address,
- it will still try to add.
- The caller must take care that the ACL size is less than MAX_MAC_ADDRESS_ACCEPTED before calling this function.
+ This API does not take care of buffer overflow i.e. if the list is already
+ maxed out while adding a mac address, it will still try to add.
+ The caller must take care that the ACL size is less than MAX_ACL_MAC_ADDRESS
+ before calling this function.
- DEPENDENCIES
+ DEPENDENCIES
- PARAMETERS
+ PARAMETERS
IN
macList : ACL list of mac addresses (black/white list)
- size (I/O) : size of the ACL. It is an I/O arg. The API takes care of incrementing the size by 1.
+ size (I/O) : size of the ACL. It is an I/O arg. The API takes care
+ of incrementing the size by 1.
peerMac : Mac address of the peer to be added
RETURN VALUE
None.
- SIDE EFFECTS
+ SIDE EFFECTS
============================================================================*/
void
@@ -753,6 +751,27 @@ SIDE EFFECTS
============================================================================*/
eCsrPhyMode sapConvertSapPhyModeToCsrPhyMode( eSapPhyMode sapPhyMode );
+#ifdef FEATURE_WLAN_CH_AVOID
+/*==========================================================================
+ FUNCTION sapUpdateUnsafeChannelList
+
+ DESCRIPTION
+ Function sapUpdateUnsafeChannelList updates the SAP context of unsafe channels.
+
+ DEPENDENCIES
+ NA.
+
+ PARAMETERS
+
+ IN
+ NULL
+
+ RETURN VALUE
+ NULL
+============================================================================*/
+void sapUpdateUnsafeChannelList(void);
+#endif /* FEATURE_WLAN_CH_AVOID */
+
#ifdef __cplusplus
}
#endif
diff --git a/CORE/SAP/src/sapModule.c b/CORE/SAP/src/sapModule.c
index 4f0f6b2ec742..b644747209af 100644
--- a/CORE/SAP/src/sapModule.c
+++ b/CORE/SAP/src/sapModule.c
@@ -24,7 +24,6 @@
* under proprietary terms before Copyright ownership was assigned
* to the Linux Foundation.
*/
-
/*===========================================================================
s a p M o d u l e . C
@@ -39,9 +38,6 @@
Are listed for each API below.
- Copyright (c) 2010 Qualcomm Technologies, Inc.
- All Rights Reserved.
- Qualcomm Technologies Confidential and Proprietary
===========================================================================*/
/*===========================================================================
@@ -625,7 +621,7 @@ WLANSAP_StartBss
//present or not doesn't maater as we have to follow whatever
//STA session does)
if ((0 == sme_GetConcurrentOperationChannel(hHal)) &&
- pConfig->ieee80211d)
+ pConfig->ieee80211d)
{
/* Setting the region/country information */
sme_setRegInfo(hHal, pConfig->countryCode);
@@ -661,7 +657,6 @@ WLANSAP_StartBss
return vosStatus;
}// WLANSAP_StartBss
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0))
/*==========================================================================
FUNCTION WLANSAP_SetMacACL
@@ -700,42 +695,44 @@ WLANSAP_SetMacACL
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
"WLANSAP_SetMacACL");
- if (VOS_STA_SAP_MODE != vos_get_conparam ())
- {
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
- "%s : SoftAp role has not been enabled", __func__);
- return VOS_STATUS_E_FAULT;
- }
-
- pSapCtx = VOS_GET_SAP_CB(pvosGCtx);
- if ( NULL == pSapCtx )
+ if (VOS_STA_SAP_MODE == vos_get_conparam ())
{
- VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
- "%s: Invalid SAP pointer from pvosGCtx", __func__);
- return VOS_STATUS_E_FAULT;
- }
+ pSapCtx = VOS_GET_SAP_CB(pvosGCtx);
+ if ( NULL == pSapCtx )
+ {
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_INFO_HIGH,
+ "%s: Invalid SAP pointer from pvosGCtx", __func__);
+ return VOS_STATUS_E_FAULT;
+ }
- // Copy MAC filtering settings to sap context
- pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl;
+ // Copy MAC filtering settings to sap context
+ pSapCtx->eSapMacAddrAclMode = pConfig->SapMacaddr_acl;
- if (eSAP_DENY_UNLESS_ACCEPTED == pSapCtx->eSapMacAddrAclMode)
- {
- vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac,
- sizeof(pConfig->accept_mac));
- pSapCtx->nAcceptMac = pConfig->num_accept_mac;
- sapSortMacList(pSapCtx->acceptMacList, pSapCtx->nAcceptMac);
+ if (eSAP_DENY_UNLESS_ACCEPTED == pSapCtx->eSapMacAddrAclMode)
+ {
+ vos_mem_copy(pSapCtx->acceptMacList, pConfig->accept_mac,
+ sizeof(pConfig->accept_mac));
+ pSapCtx->nAcceptMac = pConfig->num_accept_mac;
+ sapSortMacList(pSapCtx->acceptMacList, pSapCtx->nAcceptMac);
+ }
+ else if (eSAP_ACCEPT_UNLESS_DENIED == pSapCtx->eSapMacAddrAclMode)
+ {
+ vos_mem_copy(pSapCtx->denyMacList, pConfig->deny_mac,
+ sizeof(pConfig->deny_mac));
+ pSapCtx->nDenyMac = pConfig->num_deny_mac;
+ sapSortMacList(pSapCtx->denyMacList, pSapCtx->nDenyMac);
+ }
}
- else if (eSAP_ACCEPT_UNLESS_DENIED == pSapCtx->eSapMacAddrAclMode)
+ else
{
- vos_mem_copy(pSapCtx->denyMacList, pConfig->deny_mac,
- sizeof(pConfig->deny_mac));
- pSapCtx->nDenyMac = pConfig->num_deny_mac;
- sapSortMacList(pSapCtx->denyMacList, pSapCtx->nDenyMac);
+ VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
+ "%s : SoftAp role has not been enabled", __func__);
+ return VOS_STATUS_E_FAULT;
}
return vosStatus;
}//WLANSAP_SetMacACL
-#endif
+
/*==========================================================================
FUNCTION WLANSAP_StopBss
@@ -1073,7 +1070,7 @@ WLANSAP_ModifyACL
{
//error check
// if list is already at max, return failure
- if (pSapCtx->nAcceptMac == MAX_MAC_ADDRESS_ACCEPTED)
+ if (pSapCtx->nAcceptMac == MAX_ACL_MAC_ADDRESS)
{
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
"White list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x",
@@ -1136,7 +1133,7 @@ WLANSAP_ModifyACL
{
//error check
// if list is already at max, return failure
- if (pSapCtx->nDenyMac == MAX_MAC_ADDRESS_ACCEPTED)
+ if (pSapCtx->nDenyMac == MAX_ACL_MAC_ADDRESS)
{
VOS_TRACE( VOS_MODULE_ID_SAP, VOS_TRACE_LEVEL_ERROR,
"Black list is already maxed out. Cannot accept %02x:%02x:%02x:%02x:%02x:%02x",
@@ -2162,7 +2159,7 @@ VOS_STATUS WLANSAP_RemainOnChannel( v_PVOID_t pvosGCtx,
}
halStatus = sme_RemainOnChannel( hHal, pSapCtx->sessionId,
- channel, duration, callback, pContext );
+ channel, duration, callback, pContext, TRUE );
if( eHAL_STATUS_SUCCESS == halStatus )
{