wlan: Update SME scan cache with PNO candidate information.
Update SME scan cache with candidate information passed in
network found indication from firmware.
CRs-Fixed: 484419
Change-Id: I32bf3cd9e0a7cf2c94a62b8427ede8387a97a4f6
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 9758006..d735353 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -11310,7 +11310,11 @@
case WDI_PREF_NETWORK_FOUND_IND:
{
vos_msg_t vosMsg;
- tSirPrefNetworkFoundInd *pPrefNetworkFoundInd = (tSirPrefNetworkFoundInd *)vos_mem_malloc(sizeof(tSirPrefNetworkFoundInd));
+ v_U32_t size = sizeof(tSirPrefNetworkFoundInd) +
+ wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
+ tSirPrefNetworkFoundInd *pPrefNetworkFoundInd =
+ (tSirPrefNetworkFoundInd *)vos_mem_malloc(size);
+
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
"Received WDI_PREF_NETWORK_FOUND_IND from WDI");
if (NULL == pPrefNetworkFoundInd)
@@ -11322,7 +11326,7 @@
}
/* Message Header */
pPrefNetworkFoundInd->mesgType = eWNI_SME_PREF_NETWORK_FOUND_IND;
- pPrefNetworkFoundInd->mesgLen = sizeof(*pPrefNetworkFoundInd);
+ pPrefNetworkFoundInd->mesgLen = size;
/* Info from WDI Indication */
pPrefNetworkFoundInd->ssId.length =
@@ -11331,6 +11335,21 @@
vos_mem_copy( pPrefNetworkFoundInd->ssId.ssId,
wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.ssId.sSSID,
pPrefNetworkFoundInd->ssId.length);
+ if (NULL !=
+ wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData)
+ {
+ pPrefNetworkFoundInd->frameLength =
+ wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.frameLength;
+ vos_mem_copy( pPrefNetworkFoundInd->data,
+ wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData,
+ pPrefNetworkFoundInd->frameLength);
+ wpalMemoryFree(wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData);
+ wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.pData = NULL;
+ }
+ else
+ {
+ pPrefNetworkFoundInd->frameLength = 0;
+ }
pPrefNetworkFoundInd ->rssi = wdiLowLevelInd->wdiIndicationData.wdiPrefNetworkFoundInd.rssi;
/* VOS message wrapper */
vosMsg.type = eWNI_SME_PREF_NETWORK_FOUND_IND;