diff options
| author | Yoona Kim <yoonak@qca.qualcomm.com> | 2014-12-16 10:25:49 -0800 |
|---|---|---|
| committer | AnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com> | 2015-01-08 20:04:51 +0530 |
| commit | ea0444543d0ee408f7cc80224ceff15bf85d6904 (patch) | |
| tree | 8343d3e556709dc3b07bbf2ea5a26159c4a41b9d | |
| parent | b31d8404ca37731cf499b274509eb173edfe88de (diff) | |
wlan: mac: scan optimization to avoid P2P stale entry
This change addresses that driver ends up sending stale
P2P scan results to upper layer during back to back P2P connection.
Change-Id: Ia572ee781996c09903f064b77f40fe2c1ea3e6a4
CRs-Fixed: 771243
| -rw-r--r-- | CORE/MAC/inc/aniGlobal.h | 2 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c | 14 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSendSmeRspMessages.c | 22 |
4 files changed, 39 insertions, 0 deletions
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index cc79bc36282d..c586265ef9e8 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -846,6 +846,8 @@ tLimMlmOemDataRsp *gpLimMlmOemDataRsp; tANI_U8 fOffloadScanPending; /*Flag to track offload scan */ tANI_U8 fOffloadScanP2PSearch; /*Flag to track the p2p search */ tANI_U8 fOffloadScanP2PListen; /*Flag to track the p2p listen */ + /*Filter out P2P result if not P2P scan/listen */ + tANI_U8 offload_scan_filter_p2p_result; tANI_U8 probeCounter; tANI_U8 maxProbe; } tAniSirLim, *tpAniSirLim; diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c index 33a209d2f91a..e7900565b787 100644 --- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c @@ -4888,6 +4888,19 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) break; case SCAN_EVENT_START_FAILED: case SCAN_EVENT_COMPLETED: + limLog(pMac, LOG1, FL("pMac->fScanOffload %d, pMac->lim.fOffloadScanPending %d, pMac->lim.fOffloadScanP2PSearch %d, pMac->lim.fOffloadScanP2PListen %d"), + pMac->fScanOffload, pMac->lim.fOffloadScanPending, + pMac->lim.fOffloadScanP2PSearch, + pMac->lim.fOffloadScanP2PListen); + + if ((SCAN_EVENT_COMPLETED == pScanEvent->event) && + !(pMac->fScanOffload && pMac->lim.fOffloadScanPending && + (pMac->lim.fOffloadScanP2PSearch || + pMac->lim.fOffloadScanP2PListen))) + { + pMac->lim.offload_scan_filter_p2p_result = 1; + } + pMac->lim.fOffloadScanPending = 0; pMac->lim.fOffloadScanP2PSearch = 0; pMac->lim.fOffloadScanP2PListen = 0; @@ -4903,6 +4916,7 @@ void limProcessRxScanEvent(tpAniSirGlobal pMac, void *buf) { limSendScanOffloadComplete(pMac, pScanEvent); } + pMac->lim.offload_scan_filter_p2p_result = 0; break; case SCAN_EVENT_FOREIGN_CHANNEL: if (P2P_SCAN_TYPE_LISTEN == pScanEvent->p2pScanType) diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c index 9f45f99d5a9f..1f6c40489c7e 100644 --- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c +++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c @@ -1129,6 +1129,7 @@ static eHalStatus limSendHalStartScanOffloadReq(tpAniSirGlobal pMac, pMac->lim.fOffloadScanPending = 0; pMac->lim.fOffloadScanP2PSearch = 0; + pMac->lim.offload_scan_filter_p2p_result = 0; /* The tSirScanOffloadReq will reserve the space for first channel, so allocate the memory for (numChannels - 1) and uIEFieldLen */ diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index b2dbba39f890..86fdb9086082 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -782,6 +782,8 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, tANI_U16 i, bssCount; tANI_U8 *pbBuf; tSirBssDescription *pDesc; + tANI_U8 *pssidstr; + tSirMacSSid *pssid; limLog(pMac, LOG1, FL("Sending message SME_SCAN_RSP with length=%d reasonCode %s"), @@ -807,13 +809,33 @@ limSendSmeScanRsp(tpAniSirGlobal pMac, tANI_U16 length, return; } + for (i = 0; i < LIM_MAX_NUM_OF_SCAN_RESULTS; i++) { //when ptemp is not NULL it is a left over ptemp = pMac->lim.gLimCachedScanHashTable[i]; + pSirSmeScanRsp->sessionId = smesessionId; + pSirSmeScanRsp->transcationId = smetranscationId; + while(ptemp) { pbBuf = ((tANI_U8 *)pSirSmeScanRsp) + msgLen; + + if (pMac->lim.offload_scan_filter_p2p_result) + { + pssid = + (tSirMacSSid *)((tANI_U8 *)&ptemp->bssDescription.ieFields + 1); + pssidstr = pssid->ssId; + if (vos_mem_compare(pssidstr, P2P_WILDCARD_SSID, + P2P_WILDCARD_SSID_LEN)) + { + limLog(pMac, LOG1, + FL("Skipping p2p entries for eWNI_SME_SCAN_RSP")); + ptemp = ptemp->next; + continue; + } + } + if(0 == bssCount) { msgLen = sizeof(tSirSmeScanRsp) - |
