wlan: LFR2.0 Host Driver Changes
Master Gerrit for WLAN_FEATURE_ROAM_SCAN_OFFLOAD.
Includes all the Host Driver Changes.
Change-Id: I1c7adb30b24b49c6f2b5c3de3394831812b1c6d0
CRs-Fixed: 460568
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index 99d93a7..dd3efe8 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -180,6 +180,12 @@
static VOS_STATUS WDA_ProcessSetRssiFilterReq(tWDA_CbContext *pWDA, tSirSetRSSIFilterReq* pRssiFilterParams);
static VOS_STATUS WDA_ProcessUpdateScanParams(tWDA_CbContext *pWDA, tSirUpdateScanParams *pUpdateScanParams);
#endif // FEATURE_WLAN_SCAN_PNO
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA,tSirRoamOffloadScanReq *pRoamOffloadScanReqParams);
+void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData);
+void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType);
+void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType);
+#endif
#ifdef WLAN_FEATURE_PACKET_FILTERING
static VOS_STATUS WDA_Process8023MulticastListReq (
tWDA_CbContext *pWDA,
@@ -10907,6 +10913,13 @@
break;
}
#endif // FEATURE_WLAN_SCAN_PNO
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ case WDA_START_ROAM_CANDIDATE_LOOKUP_REQ:
+ {
+ WDA_ProcessStartRoamCandidatelookupReq(pWDA, (tSirRoamOffloadScanReq *)pMsg->bodyptr);
+ break;
+ }
+#endif
case WDA_SET_TX_PER_TRACKING_REQ:
{
WDA_ProcessSetTxPerTrackingReq(pWDA, (tSirTxPerTrackingParam *)pMsg->bodyptr);
@@ -12122,6 +12135,238 @@
}
return CONVERT_WDI2VOS_STATUS(status) ;
}
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+
+void WDA_ConvertSirAuthToWDIAuth(WDI_AuthType *AuthType, v_U8_t csrAuthType)
+{
+ /*Convert the CSR Auth types to WDI Auth types */
+ switch (csrAuthType)
+ {
+ case eCSR_AUTH_TYPE_OPEN_SYSTEM:
+ *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
+ break;
+#ifdef FEATURE_WLAN_CCX
+ case eCSR_AUTH_TYPE_CCKM_WPA:
+ *AuthType = eWDA_AUTH_TYPE_CCKM_WPA;
+ break;
+#endif
+ case eCSR_AUTH_TYPE_WPA:
+ *AuthType = eWDA_AUTH_TYPE_WPA;
+ break;
+ case eCSR_AUTH_TYPE_WPA_PSK:
+ *AuthType = eWDA_AUTH_TYPE_WPA_PSK;
+ break;
+#ifdef FEATURE_WLAN_CCX
+ case eCSR_AUTH_TYPE_CCKM_RSN:
+ *AuthType = eWDA_AUTH_TYPE_CCKM_RSN;
+ break;
+#endif
+ case eCSR_AUTH_TYPE_RSN:
+ *AuthType = eWDA_AUTH_TYPE_RSN;
+ break;
+ case eCSR_AUTH_TYPE_RSN_PSK:
+ *AuthType = eWDA_AUTH_TYPE_RSN_PSK;
+ break;
+#if defined WLAN_FEATURE_VOWIFI_11R
+ case eCSR_AUTH_TYPE_FT_RSN:
+ *AuthType = eWDA_AUTH_TYPE_FT_RSN;
+ break;
+ case eCSR_AUTH_TYPE_FT_RSN_PSK:
+ *AuthType = eWDA_AUTH_TYPE_FT_RSN_PSK;
+ break;
+#endif
+#ifdef FEATURE_WLAN_WAPI
+ case eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE:
+ *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_CERTIFICATE;
+ break;
+ case eCSR_AUTH_TYPE_WAPI_WAI_PSK:
+ *AuthType = eWDA_AUTH_TYPE_WAPI_WAI_PSK;
+ break;
+#endif /* FEATURE_WLAN_WAPI */
+ case eCSR_AUTH_TYPE_SHARED_KEY:
+ case eCSR_AUTH_TYPE_AUTOSWITCH:
+ *AuthType = eWDA_AUTH_TYPE_OPEN_SYSTEM;
+ break;
+#if 0
+ case eCSR_AUTH_TYPE_SHARED_KEY:
+ *AuthType = eWDA_AUTH_TYPE_SHARED_KEY;
+ break;
+ case eCSR_AUTH_TYPE_AUTOSWITCH:
+ *AuthType = eWDA_AUTH_TYPE_AUTOSWITCH;
+#endif
+ default:
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: Unknown Auth Type", __func__);
+ break;
+ }
+}
+void WDA_ConvertSirEncToWDIEnc(WDI_EdType *EncrType, v_U8_t csrEncrType)
+{
+ switch (csrEncrType)
+ {
+ case eCSR_ENCRYPT_TYPE_NONE:
+ *EncrType = WDI_ED_NONE;
+ break;
+ case eCSR_ENCRYPT_TYPE_WEP40_STATICKEY:
+ case eCSR_ENCRYPT_TYPE_WEP40:
+ *EncrType = WDI_ED_WEP40;
+ break;
+ case eCSR_ENCRYPT_TYPE_WEP104:
+ case eCSR_ENCRYPT_TYPE_WEP104_STATICKEY:
+ *EncrType = WDI_ED_WEP104;
+ break;
+ case eCSR_ENCRYPT_TYPE_TKIP:
+ *EncrType = WDI_ED_TKIP;
+ break;
+ case eCSR_ENCRYPT_TYPE_AES:
+ *EncrType = WDI_ED_CCMP;
+ break;
+#ifdef WLAN_FEATURE_11W
+ case eCSR_ENCRYPT_TYPE_AES_CMAC:
+ *EncrType = WDI_ED_AES_128_CMAC;
+ break;
+#endif
+#ifdef FEATURE_WLAN_WAPI
+ case eCSR_ENCRYPT_TYPE_WPI:
+ *EncrType = WDI_ED_WPI;
+ break;
+#endif
+ case eCSR_ENCRYPT_TYPE_ANY:
+ *EncrType = WDI_ED_ANY;
+ break;
+
+ default:
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: Unknown Encryption Type", __func__);
+ break;
+ }
+}
+
+/*
+ * FUNCTION: WDA_ProcessStartRoamCandidatelookupReq
+ * Request to WDI to set Roam Offload Scan
+ */
+VOS_STATUS WDA_ProcessStartRoamCandidatelookupReq(tWDA_CbContext *pWDA,
+ tSirRoamOffloadScanReq *pRoamOffloadScanReqParams)
+{
+ WDI_Status status;
+ WDI_RoamCandidateLookupReqParamsType *pwdiRoamCandidateLookupReqParams =
+ (WDI_RoamCandidateLookupReqParamsType *)vos_mem_malloc(sizeof(WDI_RoamCandidateLookupReqParamsType));
+ tWDA_ReqParams *pWdaParams ;
+ v_U8_t csrAuthType;
+ WDI_RoamNetworkType *pwdiRoamNetworkType;
+ WDI_RoamOffloadScanInfo *pwdiRoamOffloadScanInfo;
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s " ,__func__);
+ if (NULL == pwdiRoamCandidateLookupReqParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ return VOS_STATUS_E_NOMEM;
+ }
+ pWdaParams = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)) ;
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ vos_mem_free(pwdiRoamCandidateLookupReqParams);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ pwdiRoamNetworkType =
+ &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork;
+ pwdiRoamOffloadScanInfo =
+ &pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo;
+ vos_mem_zero (pwdiRoamCandidateLookupReqParams,sizeof(WDI_RoamCandidateLookupReqParamsType));
+ csrAuthType = pRoamOffloadScanReqParams->ConnectedNetwork.authentication;
+ pwdiRoamOffloadScanInfo->RoamScanOffloadEnabled =
+ pRoamOffloadScanReqParams->RoamScanOffloadEnabled;
+ vos_mem_copy(pwdiRoamNetworkType->currAPbssid,
+ pRoamOffloadScanReqParams->ConnectedNetwork.currAPbssid,
+ sizeof(pwdiRoamNetworkType->currAPbssid));
+ WDA_ConvertSirAuthToWDIAuth(&pwdiRoamNetworkType->authentication,
+ csrAuthType);
+ WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->encryption,
+ pRoamOffloadScanReqParams->ConnectedNetwork.encryption);
+ WDA_ConvertSirEncToWDIEnc(&pwdiRoamNetworkType->mcencryption,
+ pRoamOffloadScanReqParams->ConnectedNetwork.mcencryption);
+ pwdiRoamOffloadScanInfo->LookupThreshold =
+ pRoamOffloadScanReqParams->LookupThreshold ;
+ pwdiRoamOffloadScanInfo->RoamRssiDiff =
+ pRoamOffloadScanReqParams->RoamRssiDiff ;
+ pwdiRoamOffloadScanInfo->Command =
+ pRoamOffloadScanReqParams->Command ;
+ pwdiRoamOffloadScanInfo->StartScanReason =
+ pRoamOffloadScanReqParams->StartScanReason ;
+ pwdiRoamOffloadScanInfo->NeighborScanTimerPeriod =
+ pRoamOffloadScanReqParams->NeighborScanTimerPeriod ;
+ pwdiRoamOffloadScanInfo->NeighborRoamScanRefreshPeriod =
+ pRoamOffloadScanReqParams->NeighborRoamScanRefreshPeriod ;
+ pwdiRoamOffloadScanInfo->NeighborScanChannelMinTime =
+ pRoamOffloadScanReqParams->NeighborScanChannelMinTime ;
+ pwdiRoamOffloadScanInfo->NeighborScanChannelMaxTime =
+ pRoamOffloadScanReqParams->NeighborScanChannelMaxTime ;
+ pwdiRoamOffloadScanInfo->EmptyRefreshScanPeriod =
+ pRoamOffloadScanReqParams->EmptyRefreshScanPeriod ;
+ pwdiRoamOffloadScanInfo->IsCCXEnabled =
+ pRoamOffloadScanReqParams->IsCCXEnabled ;
+ vos_mem_copy(&pwdiRoamNetworkType->ssId.sSSID,
+ &pRoamOffloadScanReqParams->ConnectedNetwork.ssId.ssId,
+ pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length);
+ pwdiRoamNetworkType->ssId.ucLength =
+ pRoamOffloadScanReqParams->ConnectedNetwork.ssId.length;
+ vos_mem_copy(pwdiRoamNetworkType->ChannelCache,
+ pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCache,
+ pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount);
+ pwdiRoamNetworkType->ChannelCount =
+ pRoamOffloadScanReqParams->ConnectedNetwork.ChannelCount;
+ pwdiRoamOffloadScanInfo->ChannelCacheType =
+ pRoamOffloadScanReqParams->ChannelCacheType;
+ vos_mem_copy(pwdiRoamOffloadScanInfo->ValidChannelList,
+ pRoamOffloadScanReqParams->ValidChannelList,
+ pRoamOffloadScanReqParams->ValidChannelCount);
+ pwdiRoamOffloadScanInfo->ValidChannelCount =
+ pRoamOffloadScanReqParams->ValidChannelCount;
+ pwdiRoamOffloadScanInfo->us24GProbeSize =
+ (pRoamOffloadScanReqParams->us24GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
+ pRoamOffloadScanReqParams->us24GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
+ vos_mem_copy(&pwdiRoamOffloadScanInfo->a24GProbeTemplate,
+ pRoamOffloadScanReqParams->p24GProbeTemplate,
+ pwdiRoamOffloadScanInfo->us24GProbeSize);
+ pwdiRoamOffloadScanInfo->us5GProbeSize =
+ (pRoamOffloadScanReqParams->us5GProbeTemplateLen<WDI_PNO_MAX_PROBE_SIZE)?
+ pRoamOffloadScanReqParams->us5GProbeTemplateLen:WDI_PNO_MAX_PROBE_SIZE;
+ vos_mem_copy(&pwdiRoamOffloadScanInfo->a5GProbeTemplate,
+ pRoamOffloadScanReqParams->p5GProbeTemplate,
+ pwdiRoamOffloadScanInfo->us5GProbeSize);
+ pwdiRoamOffloadScanInfo->MDID.mdiePresent =
+ pRoamOffloadScanReqParams->MDID.mdiePresent;
+ pwdiRoamOffloadScanInfo->MDID.mobilityDomain =
+ pRoamOffloadScanReqParams->MDID.mobilityDomain;
+ pwdiRoamCandidateLookupReqParams->wdiReqStatusCB = NULL;
+ /* Store Params pass it to WDI */
+ pWdaParams->wdaWdiApiMsgParam = (void *)pwdiRoamCandidateLookupReqParams;
+ pWdaParams->pWdaContext = pWDA;
+ /* Store param pointer as passed in by caller */
+ pWdaParams->wdaMsgParam = pRoamOffloadScanReqParams;
+ status = WDI_StartRoamCandidateLookupReq(pwdiRoamCandidateLookupReqParams,
+ (WDI_RoamOffloadScanCb)WDA_RoamOffloadScanReqCallback, pWdaParams);
+ if(IS_WDI_STATUS_FAILURE(status))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "Failure in Start Roam Candidate Lookup Req WDI API, free all the memory " );
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam) ;
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ pWdaParams->wdaWdiApiMsgParam = NULL;
+ pWdaParams->wdaMsgParam = NULL;
+ }
+ return CONVERT_WDI2VOS_STATUS(status) ;
+}
+#endif
+
/*
* FUNCTION: WDA_RssiFilterRespCallback
*
@@ -12334,6 +12579,41 @@
return CONVERT_WDI2VOS_STATUS(status) ;
}
#endif // FEATURE_WLAN_SCAN_PNO
+
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+/*
+ * FUNCTION: WDA_RoamOffloadScanReqCallback
+ *
+ */
+void WDA_RoamOffloadScanReqCallback(WDI_Status status, void* pUserData)
+{
+ tWDA_ReqParams *pWdaParams = (tWDA_ReqParams *)pUserData;
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "<------ %s " ,__func__);
+ if (NULL == pWdaParams)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pWdaParams received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return ;
+ }
+ if ( pWdaParams != NULL )
+ {
+ if ( pWdaParams->wdaWdiApiMsgParam != NULL )
+ {
+ vos_mem_free(pWdaParams->wdaWdiApiMsgParam);
+ }
+ if ( pWdaParams->wdaMsgParam != NULL)
+ {
+ vos_mem_free(pWdaParams->wdaMsgParam);
+ }
+
+ vos_mem_free(pWdaParams) ;
+ }
+ return ;
+}
+#endif
+
/*
* FUNCTION: WDA_SetPowerParamsRespCallback
*