diff options
| author | Naveen Rawat <nrawat@qca.qualcomm.com> | 2014-01-15 17:30:59 -0800 |
|---|---|---|
| committer | Prakash Dhavali <pdhavali@qca.qualcomm.com> | 2014-01-26 00:53:50 -0800 |
| commit | 98e882947a9b089d69fa24816b3e285aa691eeb2 (patch) | |
| tree | bc47fb4e7965c3912b1bf105948c9687966d7d30 | |
| parent | cef53cca2c7e83f498e2a2bc6511788a4ed525eb (diff) | |
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
| -rw-r--r-- | CORE/HDD/src/wlan_hdd_wext.c | 3 | ||||
| -rw-r--r-- | 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) |
