summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYoona Kim <yoonak@qca.qualcomm.com>2014-12-16 10:25:49 -0800
committerAnjaneeDevi Kapparapu <c_akappa@qti.qualcomm.com>2015-01-08 20:04:51 +0530
commitea0444543d0ee408f7cc80224ceff15bf85d6904 (patch)
tree8343d3e556709dc3b07bbf2ea5a26159c4a41b9d
parentb31d8404ca37731cf499b274509eb173edfe88de (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.h2
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c14
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c1
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.c22
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) -