prima: extscan: Pause/unpause ext scan indication to FW
Add code changes to send pause/unpause ext scan to FW.
Currently, changes are added to pause/unpause ext scan when
WFD in progress.
Change-Id: Ibbf2d7886a25156de3dddd6a91099fd2f37f1ea2
CRs-Fixed: 907616
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index cd23ab7..d78f208 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -5515,7 +5515,11 @@
}tSirEXTScanProgressIndParams,
*tpSirEXTScanProgressIndParams;
-
+typedef PACKED_PRE struct PACKED_POST
+{
+ tANI_BOOLEAN pause; // 1 -> pause, 0 -> unpause
+ tANI_U32 reserved; //reserved for future use
+}tSirHighPriorityDataInfoInd, *tpSirHighPriorityDataInfoInd;
#endif /* WLAN_FEATURE_EXTSCAN */
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 428909d..2b041b8 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -723,7 +723,7 @@
#define SIR_HAL_FW_MEM_DUMP_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 276)
#define SIR_HAL_RSSI_MON_START_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 277)
#define SIR_HAL_RSSI_MON_STOP_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 278)
-
+#define SIR_HAL_HIGH_PRIORITY_DATA_INFO_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 279)
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 168a63e..fbf0cf1 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -12868,8 +12868,45 @@
void sme_SetMiracastMode (tHalHandle hHal,tANI_U8 mode)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ vos_msg_t vosMessage = {0};
+ tSirHighPriorityDataInfoInd *phighPriorityDataInfo;
pMac->miracast_mode = mode;
+
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: miracast_mode: %d", __func__, mode);
+
+ phighPriorityDataInfo =
+ vos_mem_malloc(sizeof(*phighPriorityDataInfo));
+ if ( !phighPriorityDataInfo)
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s:"
+ "Failed to allocate memory for WDA_HIGH_PRIORITY_DATA_INFO_IND",
+ __func__);
+ return;
+ }
+
+ if (mode)
+ phighPriorityDataInfo->pause = TRUE;
+ else
+ phighPriorityDataInfo->pause = FALSE;
+
+ if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
+ /* Serialize the req through MC thread */
+ vosMessage.bodyptr = phighPriorityDataInfo;
+ vosMessage.type = WDA_HIGH_PRIORITY_DATA_INFO_IND;
+ MTRACE(vos_trace(VOS_MODULE_ID_SME,
+ TRACE_CODE_SME_TX_WDA_MSG, NO_SESSION, vosMessage.type));
+
+ if(VOS_STATUS_SUCCESS !=
+ vos_mq_post_message(VOS_MQ_ID_WDA, &vosMessage)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR, "%s:"
+ "Failed to post WDA_HIGH_PRIORITY_DATA_INFO_IND msg to WDA",
+ __func__);
+ }
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
}
#endif /* WLAN_FEATURE_EXTSCAN */
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 2e9c6a1..54da66d 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -867,6 +867,7 @@
CASE_RETURN_STRING(WDA_EXTSCAN_SET_BSSID_HOTLIST_REQ);
CASE_RETURN_STRING(WDA_EXTSCAN_RESET_BSSID_HOTLIST_REQ);
CASE_RETURN_STRING(WDA_EXTSCAN_GET_CACHED_RESULTS_REQ);
+ CASE_RETURN_STRING(WDA_HIGH_PRIORITY_DATA_INFO_IND);
#endif /* WLAN_FEATURE_EXTSCAN */
CASE_RETURN_STRING(WDA_HT40_OBSS_SCAN_IND);
CASE_RETURN_STRING(WDA_HT40_OBSS_STOP_SCAN_IND);
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 381d879..f6a0cca 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1304,6 +1304,9 @@
#define WDA_SEND_FREQ_RANGE_CONTROL_IND SIR_HAL_SEND_FREQ_RANGE_CONTROL_IND
+#ifdef WLAN_FEATURE_EXTSCAN
+#define WDA_HIGH_PRIORITY_DATA_INFO_IND SIR_HAL_HIGH_PRIORITY_DATA_INFO_IND
+#endif /* WLAN_FEATURE_EXTSCAN */
#define WDA_FW_MEM_DUMP_REQ SIR_HAL_FW_MEM_DUMP_REQ
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index dfcd7a1..620fe20 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -237,7 +237,8 @@
tSirEXTScanSetSsidHotListReqParams *wdaRequest);
VOS_STATUS WDA_ProcessEXTScanResetSSIDHotlistReq(tWDA_CbContext *pWDA,
tSirEXTScanResetSsidHotlistReqParams *wdaRequest);
-
+VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
+ tSirHighPriorityDataInfoInd *wdaRequest);
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -14929,6 +14930,12 @@
(tSirEXTScanResetSsidHotlistReqParams *)pMsg->bodyptr);
break;
}
+ case WDA_HIGH_PRIORITY_DATA_INFO_IND:
+ {
+ WDA_ProcessHighPriorityDataInfoInd(pWDA,
+ (tSirHighPriorityDataInfoInd *)pMsg->bodyptr);
+ break;
+ }
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WDA_UT
case WDA_WDI_EVENT_MSG:
@@ -19459,8 +19466,6 @@
return;
}
-
-
/*==========================================================================
FUNCTION WDA_ProcessEXTScanStartReq
@@ -19805,6 +19810,37 @@
return CONVERT_WDI2VOS_STATUS(status);
}
+/*==========================================================================
+ FUNCTION WDA_ProcessHighPriorityDataInfoInd
+
+ DESCRIPTION
+ API to send Reset SSID Hotlist Request to WDI
+
+ PARAMETERS
+ pWDA: Pointer to WDA context
+ wdaRequest: Pointer to EXTScan req parameters
+===========================================================================*/
+VOS_STATUS WDA_ProcessHighPriorityDataInfoInd(tWDA_CbContext *pWDA,
+ tSirHighPriorityDataInfoInd *wdaRequest)
+{
+ WDI_Status status = WDI_STATUS_SUCCESS;
+
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "%s:", __func__);
+
+ status = WDI_HighPriorityDataInfoInd((void *)wdaRequest);
+ if (WDI_STATUS_PENDING == status)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("pending status received "));
+ }
+ else if (WDI_STATUS_SUCCESS_SYNC != status)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure status %d"), status);
+ }
+ return CONVERT_WDI2VOS_STATUS(status);
+}
#endif /* WLAN_FEATURE_EXTSCAN */
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index c89f731..73bce7c 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -6002,8 +6002,14 @@
typedef struct
{
- wpt_uint32 requestId;
- wpt_uint8 sessionId; // session Id mapped to vdev_id
+ wpt_boolean pause;
+ wpt_uint32 reserved;
+} WDI_HighPriorityDataInfoIndParams;
+
+typedef struct
+{
+ wpt_int32 requestId;
+ wpt_int8 sessionId; // session Id mapped to vdev_id
wpt_uint32 lostSsidSampleSize;
wpt_uint32 numSsid; // number of hotlist APs
WDI_SSIDThresholdParam ssid[WDI_WLAN_EXTSCAN_MAX_HOTLIST_SSID]; // hotlist SSIDs
@@ -8112,8 +8118,6 @@
void *pUserData);
typedef void (*WDI_EXTScanResetSSIDHotlistRspCb)(void *pEventData,
void *pUserData);
-
-
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -11529,6 +11533,19 @@
void* pUserData
);
+/**
+ @brief WDI_HighPriorityDataInfoInd
+
+ @param pHighPriorityDataInfoIndParams: Req parameter for the FW
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_HighPriorityDataInfoInd
+(
+ WDI_HighPriorityDataInfoIndParams* pHighPriorityDataInfoIndParams
+);
+
#endif /* WLAN_FEATURE_EXTSCAN */
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index 3aef6b6..cf7d8c1 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -525,6 +525,10 @@
WDI_FW_LOGGING_DXE_DONE_IND,
WDI_SEND_FREQ_RANGE_CONTROL_IND,
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_HIGH_PRIORITY_DATA_INFO_IND,
+#endif
+
/*Keep adding the indications to the max request
such that we keep them separate */
WDI_MAX_UMAC_IND
@@ -6034,6 +6038,13 @@
);
WDI_Status
+WDI_ProcessHighPriorityDataInfoInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+WDI_Status
WDI_ProcessEXTScanScanAvailableInd
(
WDI_ControlBlockType* pWDICtx,
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index cbb1784..756b8ae 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -522,6 +522,13 @@
WDI_ProcessSetRtsCtsHtvhtInd, /* WDI_SET_RTS_CTS_HTVHT_IND */
WDI_ProcessFWLoggingDXEdoneInd, /* WDI_FW_LOGGING_DXE_DONE_IND */
WDI_ProcessEnableDisableCAEventInd, /* WDI_SEND_FREQ_RANGE_CONTROL_IND */
+
+#ifdef WLAN_FEATURE_EXTSCAN
+ WDI_ProcessHighPriorityDataInfoInd, /* WDI_HIGH_PRIORITY_DATA_INFO_IND */
+#else
+ NULL,
+#endif /* WLAN_FEATURE_EXTSCAN */
+
};
@@ -1182,6 +1189,7 @@
CASE_RETURN_STRING( WDI_EXTSCAN_RESET_BSSID_HOTLIST_REQ);
CASE_RETURN_STRING( WDI_EXTSCAN_SET_SSID_HOTLIST_REQ);
CASE_RETURN_STRING( WDI_EXTSCAN_RESET_SSID_HOTLIST_REQ);
+ CASE_RETURN_STRING( WDI_HIGH_PRIORITY_DATA_INFO_IND);
#endif /* WLAN_FEATURE_EXTSCAN */
CASE_RETURN_STRING( WDI_SPOOF_MAC_ADDR_REQ);
CASE_RETURN_STRING( WDI_GET_FW_STATS_REQ);
@@ -1326,7 +1334,6 @@
CASE_RETURN_STRING( WDI_HAL_EXTSCAN_RESULT_IND);
CASE_RETURN_STRING( WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND);
CASE_RETURN_STRING( WDI_HAL_EXTSCAN_SSID_HOTLIST_RESULT_IND);
-
#endif /* WLAN_FEATURE_EXTSCAN */
CASE_RETURN_STRING( WDI_GET_FW_STATS_RSP);
CASE_RETURN_STRING( WDI_ENCRYPT_MSG_RSP);
@@ -24476,7 +24483,8 @@
return WLAN_HAL_SSID_HOTLIST_SET_REQ;
case WDI_EXTSCAN_RESET_SSID_HOTLIST_REQ:
return WLAN_HAL_SSID_HOTLIST_RESET_REQ;
-
+ case WDI_HIGH_PRIORITY_DATA_INFO_IND:
+ return WLAN_HAL_HIGH_PRIORITY_DATA_INFO_REQ;
#endif /* WLAN_FEATURE_EXTSCAN */
case WDI_SPOOF_MAC_ADDR_REQ:
return WLAN_HAL_MAC_SPOOFED_SCAN_REQ;
@@ -24818,7 +24826,6 @@
return WDI_HAL_EXTSCAN_BSSID_HOTLIST_RESULT_IND;
case WLAN_HAL_SSID_HOTLIST_RESULT_IND:
return WDI_HAL_EXTSCAN_SSID_HOTLIST_RESULT_IND;
-
#endif /* WLAN_FEATURE_EXTSCAN */
case WLAN_HAL_MAC_SPOOFED_SCAN_RSP:
return WDI_SPOOF_MAC_ADDR_RSP;
@@ -34063,6 +34070,115 @@
/**
+ @brief WDI_HighPriorityDataInfoInd
+
+ @param pHighPriorityDataInfoIndParams: Req parameter for the FW
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_HighPriorityDataInfoInd
+(
+ WDI_HighPriorityDataInfoIndParams* pHighPriorityDataInfoIndParams
+)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+ /*------------------------------------------------------------------------
+ Sanity Check
+ ------------------------------------------------------------------------*/
+ if ( eWLAN_PAL_FALSE == gWDIInitialized )
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "WDI API call before module is initialized - Fail request");
+
+ return WDI_STATUS_E_NOT_ALLOWED;
+ }
+
+ wdiEventData.wdiRequest = WDI_HIGH_PRIORITY_DATA_INFO_IND;
+ wdiEventData.pEventData = pHighPriorityDataInfoIndParams;
+ wdiEventData.uEventDataSize = sizeof(*pHighPriorityDataInfoIndParams);
+ wdiEventData.pCBfnc = NULL;
+ wdiEventData.pUserData = NULL;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessHighPriorityDataInfoInd -
+ Send WFD indication to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessHighPriorityDataInfoInd
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_HighPriorityDataInfoIndParams* pHighPriorityDataInfoIndParams;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpHalHighPriorityDataInfoInd pHalHighPriorityDataInfoIndParams;
+ WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: %d",__func__, __LINE__);
+
+ 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;
+ }
+
+ pHighPriorityDataInfoIndParams =
+ (WDI_HighPriorityDataInfoIndParams *)pEventData->pEventData;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_HIGH_PRIORITY_DATA_INFO_IND,
+ sizeof(tHalHighPriorityDataInfoInd),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tHalHighPriorityDataInfoInd) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p", __func__,
+ pEventData, pHighPriorityDataInfoIndParams);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pHalHighPriorityDataInfoIndParams =
+ (tpHalHighPriorityDataInfoInd) (pSendBuffer+usDataOffset);
+
+ pHalHighPriorityDataInfoIndParams->pause =
+ pHighPriorityDataInfoIndParams->pause;
+
+ pWDICtx->pReqStatusUserData = NULL;
+ pWDICtx->pfncRspCB = NULL;
+
+ /*-------------------------------------------------------------------------
+ Send HIGH_PRIORITY_DATA_INFO Request to HAL
+ -------------------------------------------------------------------------*/
+ wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize);
+ return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus:WDI_STATUS_SUCCESS_SYNC;
+}
+
+/**
@brief Process Extended Scan Start Rsp function (called when a response
is being received over the bus from HAL)
@@ -34464,7 +34580,6 @@
return WDI_STATUS_SUCCESS;
}
-
#endif /* WLAN_FEATURE_EXTSCAN */
/**