From 98e882947a9b089d69fa24816b3e285aa691eeb2 Mon Sep 17 00:00:00 2001 From: Naveen Rawat Date: Wed, 15 Jan 2014 17:30:59 -0800 Subject: qcacld: fix for NCHO API - SETBAND. Two issues were causing this: 1) in function csrUpdateChannelList, channel list should be updated from pScan->base20MHzChannels rather than pScan->defaultPowerTable. 2) in function hdd_setBand_helper hdd_abort_mac_scan function is meant to abort any ongoing scan in current device. but it was aborting new incoming scans from wpa_supplicant. moved this call before dis-associated is initiated from current ap. Change-Id: I250eaa29fc2d595292bde2d9fe7ca8d22ecd5e3d CRs-Fixed: 595830 --- CORE/HDD/src/wlan_hdd_wext.c | 3 ++- CORE/SME/src/csr/csrApiRoam.c | 24 ++++++++++++++++++++++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c index afbcb38c88bf..243420078334 100644 --- a/CORE/HDD/src/wlan_hdd_wext.c +++ b/CORE/HDD/src/wlan_hdd_wext.c @@ -8550,6 +8550,8 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) "%s: Current band value = %u, new setting %u ", __func__, currBand, band); + hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); + if (hdd_connIsConnected(WLAN_HDD_GET_STATION_CTX_PTR(pAdapter))) { hdd_station_ctx_t *pHddStaCtx = &(pAdapter)->sessionCtx.station; @@ -8590,7 +8592,6 @@ int hdd_setBand_helper(struct net_device *dev, tANI_U8* ptr) } } - hdd_abort_mac_scan(pHddCtx, pAdapter->sessionId); sme_ScanFlushResult(hHal, pAdapter->sessionId); if (eHAL_STATUS_SUCCESS != sme_SetFreqBand(hHal, (eCsrBand)band)) { diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c index 740570712cdd..789f8451bcb7 100644 --- a/CORE/SME/src/csr/csrApiRoam.c +++ b/CORE/SME/src/csr/csrApiRoam.c @@ -440,6 +440,23 @@ eHalStatus csrClose(tpAniSirGlobal pMac) return (status); } +static tChannelPwrLimit csrFindChannelPwr(tChannelListWithPower * pdefaultPowerTable, + tANI_U8 ChannelNum) +{ + tANI_U8 i; + // TODO: if defaultPowerTable is guaranteed to be in ascending + // order of channel numbers, we can employ binary search + for (i = 0; i < WNI_CFG_VALID_CHANNEL_LIST_LEN; i++) + { + if (pdefaultPowerTable[i].chanId == ChannelNum) + return pdefaultPowerTable[i].pwr; + } + // could not find the channel list in default list + // this should not have occured + VOS_ASSERT(0); + return 0; +} + eHalStatus csrUpdateChannelList(tCsrScanStruct *pScan) { tSirUpdateChanList *pChanList; @@ -463,8 +480,11 @@ eHalStatus csrUpdateChannelList(tCsrScanStruct *pScan) pChanList->numChan = numChan; for (i = 0; i < pChanList->numChan; i++) { - pChanList->chanParam[i].chanId = pScan->defaultPowerTable[i].chanId; - pChanList->chanParam[i].pwr = pScan->defaultPowerTable[i].pwr; + pChanList->chanParam[i].chanId = + pScan->base20MHzChannels.channelList[i]; + pChanList->chanParam[i].pwr = + csrFindChannelPwr(pScan->defaultPowerTable, + pChanList->chanParam[i].chanId); /*Set DFS flag for DFS channel*/ if (vos_nv_getChannelEnabledState(pChanList->chanParam[i].chanId) == NV_CHANNEL_DFS) -- cgit v1.2.3