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/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index dbe8195..3af951a 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -143,6 +143,11 @@
#else
,FEATURE_NOT_SUPPORTED
#endif
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ ,WLAN_ROAM_SCAN_OFFLOAD
+#else
+ ,FEATURE_NOT_SUPPORTED
+#endif
};
/*--------------------------------------------------------------------------
@@ -349,6 +354,11 @@
NULL,
#endif
WDI_ProcessSetTxPowerReq, /* WDI_SET_TX_POWER_REQ*/
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ WDI_ProcessStartRoamCandidatelookupReq, /* WDI_START_ROAM_CANDIDATE_LOOKUP_REQ */
+#else
+ NULL,
+#endif /* WLAN_FEATURE_ROAM_SCAN_OFFLOAD */
/*-------------------------------------------------------------------------
Indications
-------------------------------------------------------------------------*/
@@ -527,7 +537,11 @@
NULL,
#endif
WDI_ProcessSetTxPowerRsp, /* WDI_SET_TX_POWER_RESP */
-
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ WDI_ProcessStartRoamCandidatelookupRsp, /* WDI_START_ROAM_CANDIDATE_LOOKUP_RESP */
+#else
+ NULL,
+#endif
/*---------------------------------------------------------------------
Indications
---------------------------------------------------------------------*/
@@ -848,6 +862,9 @@
CASE_RETURN_STRING( WDI_SET_RSSI_FILTER_REQ );
CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_REQ );
#endif
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ CASE_RETURN_STRING( WDI_START_ROAM_CANDIDATE_LOOKUP_REQ );
+#endif
CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_REQ );
CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_REQ );
CASE_RETURN_STRING( WDI_RECEIVE_FILTER_SET_FILTER_REQ );
@@ -949,6 +966,9 @@
CASE_RETURN_STRING( WDI_SET_RSSI_FILTER_RESP );
CASE_RETURN_STRING( WDI_UPDATE_SCAN_PARAMS_RESP );
#endif
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ CASE_RETURN_STRING( WDI_START_ROAM_CANDIDATE_LOOKUP_RESP );
+#endif
CASE_RETURN_STRING( WDI_SET_TX_PER_TRACKING_RESP );
CASE_RETURN_STRING( WDI_8023_MULTICAST_LIST_RESP );
CASE_RETURN_STRING( WDI_RECEIVE_FILTER_SET_FILTER_RESP );
@@ -21758,7 +21778,10 @@
#endif
case WDI_KEEP_ALIVE_REQ:
return WLAN_HAL_KEEP_ALIVE_REQ;
-
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ case WDI_START_ROAM_CANDIDATE_LOOKUP_REQ:
+ return WLAN_START_ROAM_CANDIDATE_LOOKUP_REQ;
+#endif
#ifdef FEATURE_WLAN_SCAN_PNO
case WDI_SET_PREF_NETWORK_REQ:
return WLAN_HAL_SET_PREF_NETWORK_REQ;
@@ -21982,6 +22005,10 @@
case WLAN_HAL_PREF_NETW_FOUND_IND:
return WDI_HAL_PREF_NETWORK_FOUND_IND;
#endif // FEATURE_WLAN_SCAN_PNO
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+ case WLAN_START_ROAM_CANDIDATE_LOOKUP_RSP:
+ return WDI_START_ROAM_CANDIDATE_LOOKUP_RESP;
+#endif
case WLAN_HAL_SET_TX_PER_TRACKING_RSP:
return WDI_SET_TX_PER_TRACKING_RESP;
#ifdef WLAN_FEATURE_PACKET_FILTERING
@@ -23678,7 +23705,322 @@
return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
wdiRssiFilterCb, pEventData->pUserData, WDI_SET_RSSI_FILTER_RESP);
}
+#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+/**
+ @brief WDI_StartRoamCandidateLookupReq
+ @param pwdiRoamCandidateLookupReqParams: the LookupReq as specified
+ by the Device Interface
+
+ wdiRoamOffloadScancb: callback for passing back the response
+ of the Roam Candidate Lookup Req operation received from the
+ device
+
+ pUserData: user data will be passed back with the
+ callback
+ @return Result of the function call
+*/
+WDI_Status
+WDI_StartRoamCandidateLookupReq
+(
+ WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams,
+ WDI_RoamOffloadScanCb wdiRoamOffloadScancb,
+ void* pUserData
+)
+{
+ WDI_EventInfoType wdiEventData = {{0}};
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ /*------------------------------------------------------------------------
+ Fill in Event data and post to the Main FSM
+ ------------------------------------------------------------------------*/
+ wdiEventData.wdiRequest = WDI_START_ROAM_CANDIDATE_LOOKUP_REQ;
+ wdiEventData.pEventData = pwdiRoamCandidateLookupReqParams;
+ wdiEventData.uEventDataSize = sizeof(*pwdiRoamCandidateLookupReqParams);
+ wdiEventData.pCBfnc = wdiRoamOffloadScancb;
+ wdiEventData.pUserData = pUserData;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+void
+WDI_wdiEdTypeEncToEdTypeEnc(tEdType *EdType, WDI_EdType wdiEdType)
+{
+ switch (wdiEdType)
+ {
+ case WDI_ED_NONE:
+ *EdType = eED_NONE;
+ break;
+ case WDI_ED_WEP40:
+ case WDI_ED_WEP104:
+ *EdType = eED_WEP;
+ break;
+ case WDI_ED_TKIP:
+ *EdType = eED_TKIP;
+ break;
+ case WDI_ED_CCMP:
+#ifdef WLAN_FEATURE_11W
+ case WDI_ED_AES_128_CMAC:
+#endif
+ *EdType = eED_CCMP;
+ break;
+#ifdef FEATURE_WLAN_WAPI
+ case WDI_ED_WPI:
+ *EdType = eED_WPI;
+ break;
+#endif
+ case WDI_ED_ANY:
+ *EdType = eED_ANY;
+ break;
+
+ default:
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Unknown Encryption Type", __func__);
+ break;
+ }
+}
+
+/**
+ @brief Helper function to pack Start Roam Candidate Lookup
+ Request parameters
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pwdiRoamCandidateLookupReqParams: pointer to the info received
+ from upper layers
+ ppSendBuffer, pSize - out pointers of the packed buffer
+ and its size
+
+ @return Result of the function call
+*/
+
+WDI_Status
+WDI_PackStartRoamCandidateLookup
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams,
+ wpt_uint8** ppSendBuffer,
+ wpt_uint16* pSize
+)
+{
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usDataOffset = 0;
+ wpt_uint16 usSendSize = 0;
+ tpRoamCandidateListParams pRoamCandidateListParams = NULL;
+ wpt_uint8 i;
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer( pWDICtx, WDI_START_ROAM_CANDIDATE_LOOKUP_REQ,
+ sizeof(tRoamCandidateListParams),
+ &pSendBuffer, &usDataOffset, &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tpRoamCandidateListParams) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in Start Roam Candidate Lookup Req %x ",
+ pwdiRoamCandidateLookupReqParams);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pRoamCandidateListParams = (tpRoamCandidateListParams)(pSendBuffer + usDataOffset);
+ wpalMemoryZero(pRoamCandidateListParams, sizeof(tpRoamCandidateListParams));
+ pRoamCandidateListParams->RoamScanOffloadEnabled = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.RoamScanOffloadEnabled;
+ wpalMemoryCopy(pRoamCandidateListParams->ConnectedNetwork.currAPbssid,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.currAPbssid,
+ HAL_MAC_ADDR_LEN);
+ pRoamCandidateListParams->ConnectedNetwork.authentication = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.authentication;
+ WDI_wdiEdTypeEncToEdTypeEnc(&pRoamCandidateListParams->ConnectedNetwork.encryption,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.encryption);
+ WDI_wdiEdTypeEncToEdTypeEnc(&pRoamCandidateListParams->ConnectedNetwork.mcencryption,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.mcencryption);
+
+ pRoamCandidateListParams->ConnectedNetwork.ssId.length
+ = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.ucLength;
+ wpalMemoryCopy( pRoamCandidateListParams->ConnectedNetwork.ssId.ssId,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ssId.sSSID,
+ pRoamCandidateListParams->ConnectedNetwork.ssId.length);
+ wpalMemoryCopy(pRoamCandidateListParams->ConnectedNetwork.ChannelCache,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCache,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount );
+ pRoamCandidateListParams->ConnectedNetwork.ChannelCount = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ConnectedNetwork.ChannelCount;
+ pRoamCandidateListParams->ChannelCacheType = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ChannelCacheType ;
+ pRoamCandidateListParams->LookupThreshold = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.LookupThreshold;
+ pRoamCandidateListParams->RoamRssiDiff = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.RoamRssiDiff ;
+ pRoamCandidateListParams->Command = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.Command ;
+ pRoamCandidateListParams->StartScanReason = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.StartScanReason ;
+ pRoamCandidateListParams->NeighborScanTimerPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanTimerPeriod ;
+ pRoamCandidateListParams->NeighborRoamScanRefreshPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborRoamScanRefreshPeriod ;
+ pRoamCandidateListParams->NeighborScanChannelMinTime = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMinTime ;
+ pRoamCandidateListParams->NeighborScanChannelMaxTime = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.NeighborScanChannelMaxTime ;
+ pRoamCandidateListParams->EmptyRefreshScanPeriod = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.EmptyRefreshScanPeriod ;
+ pRoamCandidateListParams->IsCCXEnabled = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.IsCCXEnabled ;
+ wpalMemoryCopy(pRoamCandidateListParams->ValidChannelList,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelList,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelCount);
+ pRoamCandidateListParams->ValidChannelCount = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.ValidChannelCount;
+
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "Values are ssid = %s, RoamOffloadScan=%d,Command=%d,StartScanReason=%d, NeighborScanTimerPeriod=%d, NeighborRoamScanRefreshPeriod=%d,NeighborScanChannelMinTime=%d,NeighborScanChannelMaxTime = %d,EmptyRefreshScanPeriod=%d, mdiePresent=%d,MDID=%d, auth=%d, uce=%d, mce=%d\n",
+ pRoamCandidateListParams->ConnectedNetwork.ssId.ssId, pRoamCandidateListParams->RoamScanOffloadEnabled,
+ pRoamCandidateListParams->Command,pRoamCandidateListParams->StartScanReason,
+ pRoamCandidateListParams->NeighborScanTimerPeriod,pRoamCandidateListParams->NeighborRoamScanRefreshPeriod,
+ pRoamCandidateListParams->NeighborScanChannelMinTime,pRoamCandidateListParams->NeighborScanChannelMaxTime,
+ pRoamCandidateListParams->EmptyRefreshScanPeriod,pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain,
+ pRoamCandidateListParams->ConnectedNetwork.authentication, pRoamCandidateListParams->ConnectedNetwork.encryption,
+ pRoamCandidateListParams->ConnectedNetwork.mcencryption);
+ pRoamCandidateListParams->us24GProbeSize =
+ (pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us24GProbeSize<
+ WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE)?
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us24GProbeSize:
+ WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE;
+ wpalMemoryCopy(pRoamCandidateListParams->a24GProbeTemplate,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.a24GProbeTemplate,
+ pRoamCandidateListParams->us24GProbeSize);
+ pRoamCandidateListParams->us5GProbeSize =
+ (pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us5GProbeSize<
+ WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE)?
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.us5GProbeSize:
+ WLAN_HAL_ROAM_SCAN_MAX_PROBE_SIZE;
+ wpalMemoryCopy(pRoamCandidateListParams->a5GProbeTemplate,
+ pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.a5GProbeTemplate,
+ pRoamCandidateListParams->us5GProbeSize);
+ pRoamCandidateListParams->MDID.mdiePresent = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mdiePresent;
+ pRoamCandidateListParams->MDID.mobilityDomain = pwdiRoamCandidateLookupReqParams->wdiRoamOffloadScanInfo.MDID.mobilityDomain;
+
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,"Valid Channel List");
+ for (i=0; i<pRoamCandidateListParams->ValidChannelCount ; i++)
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,"%d", pRoamCandidateListParams->ValidChannelList[i]);
+ }
+
+
+ /*Set the output values*/
+ *ppSendBuffer = pSendBuffer;
+ *pSize = usSendSize;
+ return WDI_STATUS_SUCCESS;
+}/*WDI_PackStartRoamCandidateLookup*/
+
+/**
+ @brief Process Start Roam Candidate Lookup Request function
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessStartRoamCandidatelookupReq
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_RoamCandidateLookupReqParamsType* pwdiRoamCandidateLookupReqParams = NULL;
+ WDI_RoamOffloadScanCb wdiRoamOffloadScancb = NULL;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ WDI_Status wdiStatus;
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pEventData ) ||
+ ( NULL == (pwdiRoamCandidateLookupReqParams = (WDI_RoamCandidateLookupReqParamsType*)pEventData->pEventData)) ||
+ ( NULL == (wdiRoamOffloadScancb = (WDI_RoamOffloadScanCb)pEventData->pCBfnc)))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /*-------------------------------------------------------------------------
+ Pack the Start Roam Candidate Lookup request structure based on version
+ -------------------------------------------------------------------------*/
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO,
+ "%s: Packing Roam Candidate Lookup request ", __func__);
+
+ wdiStatus = WDI_PackStartRoamCandidateLookup( pWDICtx, pwdiRoamCandidateLookupReqParams,
+ &pSendBuffer, &usSendSize);
+
+ if (( WDI_STATUS_SUCCESS != wdiStatus )||
+ ( NULL == pSendBuffer )||( 0 == usSendSize ))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: failed to pack request parameters", __func__);
+ WDI_ASSERT(0);
+ return wdiStatus;
+ }
+
+ pWDICtx->wdiReqStatusCB = pwdiRoamCandidateLookupReqParams->wdiReqStatusCB;
+ pWDICtx->pReqStatusUserData = pwdiRoamCandidateLookupReqParams->pUserData;
+
+ /*-------------------------------------------------------------------------
+ Send WDI_START_ROAM_CANDIDATE_LOOKUP_REQ to HAL
+ -------------------------------------------------------------------------*/
+ return WDI_SendMsg( pWDICtx, pSendBuffer, usSendSize,
+ wdiRoamOffloadScancb, pEventData->pUserData, WDI_START_ROAM_CANDIDATE_LOOKUP_RESP);
+}
+
+/**
+ @brief Process Start Roam Candidate Lookup Rsp function (called when a
+ response is being received over the bus from HAL)
+
+ @param pWDICtx: pointer to the WLAN DAL context
+ pEventData: pointer to the event information structure
+
+ @see
+ @return Result of the function call
+*/
+WDI_Status
+WDI_ProcessStartRoamCandidatelookupRsp
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_Status wdiStatus;
+ eHalStatus halStatus;
+ WDI_RoamOffloadScanCb wdiRoamOffloadScancb = NULL;
+
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ /*-------------------------------------------------------------------------
+ Sanity check
+ -------------------------------------------------------------------------*/
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData ))
+ {
+ WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ wdiRoamOffloadScancb = (WDI_RoamOffloadScanCb)pWDICtx->pfncRspCB;
+
+ /*-------------------------------------------------------------------------
+ Extract response and send it to UMAC
+ -------------------------------------------------------------------------*/
+ halStatus = *((eHalStatus*)pEventData->pEventData);
+ wdiStatus = WDI_HAL_2_WDI_STATUS(halStatus);
+
+ /*Notify UMAC*/
+ wdiRoamOffloadScancb(wdiStatus, pWDICtx->pRspCBUserData);
+
+ return WDI_STATUS_SUCCESS;
+}/*WDI_ProcessStartRoamCandidatelookupRsp*/
+#endif
/**
@brief Process Update Scan Params function