summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNaveen Rawat <nrawat@qca.qualcomm.com>2014-01-15 17:30:59 -0800
committerPrakash Dhavali <pdhavali@qca.qualcomm.com>2014-01-26 00:53:50 -0800
commit98e882947a9b089d69fa24816b3e285aa691eeb2 (patch)
treebc47fb4e7965c3912b1bf105948c9687966d7d30
parentcef53cca2c7e83f498e2a2bc6511788a4ed525eb (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.c3
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c24
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)