diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2014-01-12 05:59:01 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2014-01-12 05:59:01 -0800 |
| commit | ee26a888bf0a61e52469fc2b4fc68898d954d662 (patch) | |
| tree | 32f7ae59d048f37ed4879c5730890569d7f53f40 /CORE/SAP/src | |
| parent | ab881cbfbab8a7b1baa5c9edfabd30a787073e22 (diff) | |
| parent | b4174298c60195acaf7fe20a172c72cf70105ba3 (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.c | 5 | ||||
| -rw-r--r-- | CORE/SAP/src/sapChSelect.c | 1129 | ||||
| -rw-r--r-- | CORE/SAP/src/sapChSelect.h | 5 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm.c | 8 | ||||
| -rw-r--r-- | CORE/SAP/src/sapFsm_ext.h | 1 | ||||
| -rw-r--r-- | CORE/SAP/src/sapInternal.h | 47 | ||||
| -rw-r--r-- | CORE/SAP/src/sapModule.c | 69 |
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 ) { |
