prima: Changes to support new OEM_DATA_REQ msg
Add changes to handle OEM_DATA_REQ_IND_NEW/OEM_DATA_RSP_IND_NEW.
Change-Id: I86af0eae6b726fa8b347fb4a66b78297e41301bb
CRs-Fixed: 927234
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 2fe0f9d..d54f7a9 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -1361,6 +1361,11 @@
void wlan_hdd_cfg80211_nan_init(hdd_context_t *pHddCtx);
+#ifdef FEATURE_OEM_DATA_SUPPORT
+void wlan_hdd_cfg80211_oemdata_callback(void *ctx, const tANI_U16 evType,
+ void *pMsg);
+#endif /* FEATURE_OEM_DATA_SUPPORT */
+
#if !(defined (SUPPORT_WDEV_CFG80211_VENDOR_EVENT_ALLOC))
static inline struct sk_buff *
backported_cfg80211_vendor_event_alloc(struct wiphy *wiphy,
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 1d43e6d..84c7f48 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -18979,6 +18979,56 @@
return ret;
}
+
+#ifdef FEATURE_OEM_DATA_SUPPORT
+static void wlan_hdd_cfg80211_oem_data_rsp_ind_new(void *ctx,
+ void *pMsg)
+{
+ hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
+
+ ENTER();
+
+ if (wlan_hdd_validate_context(pHddCtx)) {
+ return;
+ }
+ if (!pMsg)
+ {
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("pMsg is null"));
+ return;
+ }
+
+ send_oem_data_rsp_msg(sizeof(tOemDataRspNew), pMsg);
+
+ EXIT();
+ return;
+
+}
+
+void wlan_hdd_cfg80211_oemdata_callback(void *ctx, const tANI_U16 evType,
+ void *pMsg)
+{
+ hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
+
+ ENTER();
+
+ if (wlan_hdd_validate_context(pHddCtx)) {
+ return;
+ }
+
+ hddLog(VOS_TRACE_LEVEL_INFO, FL("Rcvd Event (%d)"), evType);
+
+ switch(evType) {
+ case SIR_HAL_START_OEM_DATA_RSP_IND_NEW:
+ wlan_hdd_cfg80211_oem_data_rsp_ind_new(ctx, pMsg);
+ break;
+ default:
+ hddLog(VOS_TRACE_LEVEL_ERROR, FL("invalid event type %d "), evType);
+ break;
+ }
+ EXIT();
+}
+#endif
+
/* cfg80211_ops */
static struct cfg80211_ops wlan_hdd_cfg80211_ops =
{
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 9bacff4..7f40951 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -2283,6 +2283,13 @@
wlan_hdd_cfg80211_extscan_callback,
pHddCtx);
#endif /* WLAN_FEATURE_EXTSCAN */
+
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ sme_OemDataRegisterCallback(pHddCtx->hHal,
+ wlan_hdd_cfg80211_oemdata_callback,
+ pHddCtx);
+#endif /* FEATURE_OEM_DATA_SUPPORT */
+
goto success;
err_unregister_pmops:
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index eabfaed..4eb2ff1 100755
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -10479,6 +10479,12 @@
pHddCtx);
#endif /* WLAN_FEATURE_EXTSCAN */
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ sme_OemDataRegisterCallback(pHddCtx->hHal,
+ wlan_hdd_cfg80211_oemdata_callback,
+ pHddCtx);
+#endif /* FEATURE_OEM_DATA_SUPPORT */
+
sme_set_rssi_threshold_breached_cb(pHddCtx->hHal, hdd_rssi_threshold_breached_cb);
#ifdef WLAN_NS_OFFLOAD
// Register IPv6 notifier to notify if any change in IP
diff --git a/CORE/HDD/src/wlan_hdd_oemdata.c b/CORE/HDD/src/wlan_hdd_oemdata.c
index d662266..b9a873a 100644
--- a/CORE/HDD/src/wlan_hdd_oemdata.c
+++ b/CORE/HDD/src/wlan_hdd_oemdata.c
@@ -816,6 +816,9 @@
tAniMsgHdr *msg_hdr;
int ret;
char *sign_str = NULL;
+ char* aniMsgBody;
+ tANI_U32 *oemMsgSubType;
+
nlh = (struct nlmsghdr *)skb->data;
if (!nlh) {
@@ -845,6 +848,8 @@
return -EPERM;
}
+ hddLog(LOG1, FL("Received App msg type: %d"), msg_hdr->type);
+
switch (msg_hdr->type) {
case ANI_MSG_APP_REG_REQ:
/* Registration request is only allowed for Qualcomm Application */
@@ -891,6 +896,10 @@
OEM_ERR_INVALID_MESSAGE_LENGTH);
return -EPERM;
}
+ aniMsgBody = (char *)((char *)msg_hdr + sizeof(tAniMsgHdr));
+ oemMsgSubType = (tANI_U32*) aniMsgBody;
+ hddLog(LOGE, FL("oemMsgSubType: 0x%x"), *oemMsgSubType);
+
oem_process_data_req_msg(msg_hdr->length,
(char *) ((char *)msg_hdr +
sizeof(tAniMsgHdr)));
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index 096b3d1..28757c8 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -733,6 +733,8 @@
#define SIR_HAL_HIGH_PRIORITY_DATA_INFO_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 279)
#define SIR_HAL_WIFI_CONFIG_PARAMS (SIR_HAL_ITC_MSG_TYPES_BEGIN + 280)
+#define SIR_HAL_START_OEM_DATA_REQ_IND_NEW (SIR_HAL_ITC_MSG_TYPES_BEGIN + 281)
+#define SIR_HAL_START_OEM_DATA_RSP_IND_NEW (SIR_HAL_ITC_MSG_TYPES_BEGIN + 282)
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/SME/inc/oemDataApi.h b/CORE/SME/inc/oemDataApi.h
index 2ae978b..184deb3 100644
--- a/CORE/SME/inc/oemDataApi.h
+++ b/CORE/SME/inc/oemDataApi.h
@@ -54,6 +54,14 @@
#define OEM_DATA_RSP_SIZE 1968
#endif
+#ifndef NEW_OEM_DATA_REQ_SIZE
+#define NEW_OEM_DATA_REQ_SIZE 292
+#endif
+
+#ifndef NEW_OEM_DATA_RSP_SIZE
+#define NEW_OEM_DATA_RSP_SIZE 2100
+#endif
+
/*************************************************************************************************************
OEM DATA REQ/RSP - DATA STRUCTURES
*************************************************************************************************************/
@@ -133,6 +141,28 @@
-------------------------------------------------------------------------------*/
eHalStatus oemData_IsOemDataReqAllowed(tHalHandle hHal);
+
+/* ---------------------------------------------------------------------------
+ OEM DATA REQ NEW - DATA STRUCTURES
+ -------------------------------------------------------------------------------*/
+/* Structure for defining req sent to the PE */
+typedef struct tagOemDataReqNew
+{
+ tANI_U8 oemDataReqNew[NEW_OEM_DATA_REQ_SIZE];
+} tOemDataReqNew, tOemDataReqNewConfig;
+
+/* ---------------------------------------------------------------------------
+ OEM DATA RESPONSE - DATA STRUCTURES
+ -------------------------------------------------------------------------------*/
+typedef struct tagOemDataRspNew
+{
+ tANI_U8 oemDataRspNew[NEW_OEM_DATA_RSP_SIZE];
+} tOemDataRspNew;
+
+/*************************************************************************************************************/
+
+void send_oem_data_rsp_msg(int length, tANI_U8 *oemDataRsp);
+
#endif //_OEM_DATA_API_H__
#endif //FEATURE_OEM_DATA_SUPPORT
diff --git a/CORE/SME/inc/smeInternal.h b/CORE/SME/inc/smeInternal.h
index 7ca02b5..0322b40 100644
--- a/CORE/SME/inc/smeInternal.h
+++ b/CORE/SME/inc/smeInternal.h
@@ -166,6 +166,10 @@
void (*pBtCoexTDLSNotification) (void *pAdapter, int);
void (*nanCallback) (void*, tSirNanEvent*);
void (*rssiThresholdBreachedCb)(void *, struct rssi_breach_event *);
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ void (*pOemDataIndCb) (void *, const tANI_U16, void *);
+ void *pOemDataCallbackContext;
+#endif /* FEATURE_OEM_DATA_SUPPORT */
} tSmeStruct, *tpSmeStruct;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index fbec5de..593f5ab 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -293,6 +293,13 @@
void *);
#endif /* WLAN_FEATURE_EXTSCAN */
+
+#ifdef FEATURE_OEM_DATA_SUPPORT
+eHalStatus sme_OemDataRegisterCallback (tHalHandle hHal,
+ void (*pOemDataIndCb)(void *, const tANI_U16, void *),
+ void *callbackContext);
+#endif
+
/* ---------------------------------------------------------------------------
\fn sme_SpoofMacAddrReq
\brief SME API to send Spoof Mac Addr req to HAL
@@ -2080,6 +2087,14 @@
eHalStatus sme_getOemDataRsp(tHalHandle hHal,
tOemDataRsp **pOemDataRsp);
+/* ---------------------------------------------------------------------------
+ \fn sme_OemDataReqNew
+ \brief a wrapper function for OEM DATA REQ NEW
+ \param pOemDataReqNewConfig - Data to be passed to FW
+ ---------------------------------------------------------------------------*/
+void sme_OemDataReqNew(tHalHandle hHal,
+ tOemDataReqNewConfig *pOemDataReqNewConfig);
+
#endif /*FEATURE_OEM_DATA_SUPPORT*/
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 6279de6..3634623 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -6739,6 +6739,50 @@
return(status);
}
+/* ---------------------------------------------------------------------------
+ \fn sme_OemDataReqNew
+ \brief a wrapper function for OEM DATA REQ NEW
+ \param pOemDataReqNewConfig - Data to be passed to FW
+ ---------------------------------------------------------------------------*/
+void sme_OemDataReqNew(tHalHandle hHal,
+ tOemDataReqNewConfig *pOemDataReqNewConfig)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ tOemDataReqNewConfig *pLocalOemDataReqNewConfig;
+ vos_msg_t vosMessage = {0};
+
+ pLocalOemDataReqNewConfig =
+ vos_mem_malloc(sizeof(*pLocalOemDataReqNewConfig));
+
+ if (!pLocalOemDataReqNewConfig)
+ {
+ smsLog(pMac, LOGE,
+ "Failed to allocate memory for WDA_START_OEM_DATA_REQ_IND_NEW");
+ return;
+ }
+
+ vos_mem_zero(pLocalOemDataReqNewConfig, sizeof(tOemDataReqNewConfig));
+ vos_mem_copy(pLocalOemDataReqNewConfig, pOemDataReqNewConfig,
+ sizeof(tOemDataReqNewConfig));
+
+ if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
+ /* Serialize the req through MC thread */
+ vosMessage.bodyptr = pLocalOemDataReqNewConfig;
+ vosMessage.type = WDA_START_OEM_DATA_REQ_IND_NEW;
+ 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_START_OEM_DATA_REQ_IND_NEW msg to WDA",
+ __func__);
+ }
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+}
+
#endif /*FEATURE_OEM_DATA_SUPPORT*/
/*--------------------------------------------------------------------------
@@ -12867,6 +12911,23 @@
return(status);
}
+#ifdef FEATURE_OEM_DATA_SUPPORT
+eHalStatus sme_OemDataRegisterCallback (tHalHandle hHal,
+ void (*pOemDataIndCb)(void *, const tANI_U16, void *),
+ void *callbackContext)
+{
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+
+ if (eHAL_STATUS_SUCCESS == (status = sme_AcquireGlobalLock(&pMac->sme))) {
+ pMac->sme.pOemDataIndCb = pOemDataIndCb;
+ pMac->sme.pOemDataCallbackContext = callbackContext;
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+ return(status);
+}
+#endif
+
void sme_SetMiracastMode (tHalHandle hHal,tANI_U8 mode)
{
tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 9475fbe..33553d0 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -1312,6 +1312,11 @@
#define WDA_WIFI_CONFIG_REQ SIR_HAL_WIFI_CONFIG_PARAMS
+#ifdef FEATURE_OEM_DATA_SUPPORT
+#define WDA_START_OEM_DATA_REQ_IND_NEW SIR_HAL_START_OEM_DATA_REQ_IND_NEW
+#define WDA_START_OEM_DATA_RSP_IND_NEW SIR_HAL_START_OEM_DATA_RSP_IND_NEW
+#endif
+
#define HAL_USE_BD_RATE2_FOR_MANAGEMENT_FRAME 0x40 // Bit 6 will be used to control BD rate for Management frames
#define halTxFrame(hHal, pFrmBuf, frmLen, frmType, txDir, tid, pCompFunc, pData, txFlag) \
diff --git a/CORE/WDA/src/wlan_qct_wda.c b/CORE/WDA/src/wlan_qct_wda.c
index ed50175..1574d46 100644
--- a/CORE/WDA/src/wlan_qct_wda.c
+++ b/CORE/WDA/src/wlan_qct_wda.c
@@ -271,6 +271,10 @@
VOS_STATUS WDA_ProcessWifiConfigReq(tWDA_CbContext *pWDA,
tSetWifiConfigParams *pwdaWificonfig);
+
+VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
+ tOemDataReqNewConfig *pOemDataReqNewConfig);
+
/*
* FUNCTION: WDA_ProcessNanRequest
* Process NAN request
@@ -15293,6 +15297,14 @@
WDA_ProcessWifiConfigReq(pWDA,(tSetWifiConfigParams *)pMsg->bodyptr);
break;
}
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ case WDA_START_OEM_DATA_REQ_IND_NEW:
+ {
+ WDA_ProcessStartOemDataReqIndNew(pWDA,
+ (tOemDataReqNewConfig *)pMsg->bodyptr);
+ break;
+ }
+#endif
default:
{
VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
@@ -16282,6 +16294,64 @@
vos_mem_free(pRssiBreachedInd);
break;
}
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ case WDI_START_OEM_DATA_RSP_IND_NEW:
+ {
+ void *pCallbackContext;
+ tpAniSirGlobal pMac;
+ tANI_U16 indType;
+ void *pOemRspNewIndData;
+
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "Received WDI_START_OEM_DATA_RSP_IND_NEW Indications from FW");
+
+ /*sanity check*/
+ if (NULL == pWDA)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pWDA is NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ indType = WDA_START_OEM_DATA_RSP_IND_NEW;
+ pOemRspNewIndData =
+ (void *)wdiLowLevelInd->wdiIndicationData.pOemRspNewIndData;
+ if (NULL == pOemRspNewIndData)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: OEM_DATA_RSP_IND_NEW Indication Data is null, can't invoke HDD callback",
+ __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pMac = (tpAniSirGlobal )VOS_GET_MAC_CTXT(pWDA->pVosContext);
+ if (NULL == pMac)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:pMac is NULL", __func__);
+ VOS_ASSERT(0);
+ return;
+ }
+
+ pCallbackContext = pMac->sme.pOemDataCallbackContext;
+
+ if(pMac->sme.pOemDataIndCb)
+ {
+ pMac->sme.pOemDataIndCb(pCallbackContext,
+ indType,
+ pOemRspNewIndData);
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s:HDD callback is null", __func__);
+ }
+ break;
+ }
+#endif /* FEATURE_OEM_DATA_SUPPORT */
+
default:
{
/* TODO error */
@@ -20566,3 +20636,63 @@
return status;
}
+
+#ifdef FEATURE_OEM_DATA_SUPPORT
+/*
+ * FUNCTION: WDA_ProcessStartOemDataReqIndNew
+ * Request to WDI.
+ */
+VOS_STATUS WDA_ProcessStartOemDataReqIndNew(tWDA_CbContext *pWDA,
+ tOemDataReqNewConfig *pOemDataReqNewConfig)
+{
+ VOS_STATUS status = VOS_STATUS_SUCCESS;
+ WDI_Status wstatus;
+ WDI_OemDataReqNewConfig *wdiOemDataReqNewConfig;
+
+ /* Sanity Check*/
+ if(NULL == pOemDataReqNewConfig)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: pOemDataReqNewConfig received NULL", __func__);
+ VOS_ASSERT(0) ;
+ return VOS_STATUS_E_FAULT;
+ }
+
+ wdiOemDataReqNewConfig = (WDI_OemDataReqNewConfig *)vos_mem_malloc(
+ sizeof(WDI_OemDataReqNewConfig));
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ "------> %s " ,__func__);
+
+ if(NULL == wdiOemDataReqNewConfig)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: VOS MEM Alloc Failure", __func__);
+ VOS_ASSERT(0);
+ vos_mem_free(pOemDataReqNewConfig);
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ vos_mem_copy(wdiOemDataReqNewConfig, pOemDataReqNewConfig,
+ sizeof(WDI_OemDataReqNewConfig));
+
+ wstatus = WDI_StartOemDataReqIndNew(wdiOemDataReqNewConfig);
+
+ if (WDI_STATUS_PENDING == wstatus)
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
+ FL("pending status received "));
+ }
+ else if ((WDI_STATUS_SUCCESS_SYNC != wstatus) && (WDI_STATUS_SUCCESS != wstatus))
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ FL("Failure in OemDataReqIndNew WDI API, free all memory %d"), wstatus);
+ vos_mem_free(wdiOemDataReqNewConfig);
+ }
+
+ // Free the memory allocated in sme_OemDataReqNew
+ vos_mem_free(pOemDataReqNewConfig);
+
+ return status;
+}
+#endif
+
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi.h b/CORE/WDI/CP/inc/wlan_qct_wdi.h
index 11b67a2..0d30012 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi.h
@@ -420,6 +420,9 @@
WDI_NAN_EVENT_IND,
WDI_LOST_LINK_PARAMS_IND,
WDI_RSSI_BREACHED_IND,
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ WDI_START_OEM_DATA_RSP_IND_NEW,
+#endif
WDI_MAX_IND
}WDI_LowLevelIndEnumType;
@@ -989,6 +992,10 @@
WDI_TxBDStatus wdiTxBdInd;
WDI_LostLinkParamsIndType wdiLostLinkParamsInd;
WDI_RssiBreachedIndType wdiRssiBreachedInd;
+#ifdef FEATURE_OEM_DATA_SUPPORT
+/*OEM Data Rsp New Results from FW*/
+ void *pOemRspNewIndData;
+#endif
} wdiIndicationData;
}WDI_LowLevelIndType;
@@ -4668,6 +4675,14 @@
#define OEM_DATA_RSP_SIZE 1968
#endif
+#ifndef NEW_OEM_DATA_REQ_SIZE
+#define NEW_OEM_DATA_REQ_SIZE 292
+#endif
+
+#ifndef NEW_OEM_DATA_RSP_SIZE
+#define NEW_OEM_DATA_RSP_SIZE 2100
+#endif
+
/*----------------------------------------------------------------------------
WDI_oemDataReqInfoType
----------------------------------------------------------------------------*/
@@ -4704,6 +4719,25 @@
wpt_uint8 oemDataRsp[OEM_DATA_RSP_SIZE];
}WDI_oemDataRspParamsType;
+/*----------------------------------------------------------------------------
+ OEM DATA REQ NEW/OEM DATA RSP NEW - DATA STRUCTURES
+----------------------------------------------------------------------------*/
+/* Structure for defining req sent to the PE */
+typedef struct
+{
+ wpt_uint8 oemDataReqNew[NEW_OEM_DATA_REQ_SIZE];
+} WDI_OemDataReqNew, WDI_OemDataReqNewConfig;
+
+/*----------------------------------------------------------------------------
+ OEM DATA RESPONSE - DATA STRUCTURES
+----------------------------------------------------------------------------*/
+typedef struct
+{
+ wpt_uint8 oemDataRspNew[NEW_OEM_DATA_RSP_SIZE];
+} WDI_OemDataRspNew;
+
+/*************************************************************************************************************/
+
#endif /* FEATURE_OEM_DATA_SUPPORT */
#ifdef WLAN_FEATURE_VOWIFI_11R
@@ -11786,6 +11820,22 @@
wpt_uint32 val
);
+#ifdef FEATURE_OEM_DATA_SUPPORT
+
+/**
+ @brief WDI_HighPriorityDataInfoInd
+
+ @param pHighPriorityDataInfoIndParams: Req parameter for the FW
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_StartOemDataReqIndNew
+(
+ WDI_OemDataReqNewConfig *pOemDataReqNewConfig
+);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
index a6e5ae9..8dcdf80 100644
--- a/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
+++ b/CORE/WDI/CP/inc/wlan_qct_wdi_i.h
@@ -531,6 +531,10 @@
WDI_HIGH_PRIORITY_DATA_INFO_IND,
#endif
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ WDI_START_OEM_DATA_REQ_IND_NEW,
+#endif
+
/*Keep adding the indications to the max request
such that we keep them separate */
WDI_MAX_UMAC_IND
@@ -917,6 +921,7 @@
WDI_HAL_NAN_EVENT = WDI_HAL_IND_MIN + 28,
WDI_HAL_LOST_LINK_PARAMS_IND = WDI_HAL_IND_MIN + 29,
WDI_HAL_RSSI_BREACHED_IND = WDI_HAL_IND_MIN + 30,
+ WDI_HAL_START_OEM_DATA_RSP_IND_NEW = WDI_HAL_IND_MIN + 31,
WDI_MAX_RESP
}WDI_ResponseEnumType;
@@ -6401,5 +6406,41 @@
WDI_EventInfoType* pEventData
);
+#ifdef FEATURE_OEM_DATA_SUPPORT
+/**
+ @brief WDI_ProcessStartOemDataReqIndNew -
+ Send OEM Data request new indication to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessStartOemDataReqIndNew
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+
+/**
+ @brief Process OemDataRsp New Indication indication from FW
+
+ @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_ProcessStartOemDataRspIndNew
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+);
+#endif
+
+
#endif /*WLAN_QCT_WDI_I_H*/
diff --git a/CORE/WDI/CP/src/wlan_qct_wdi.c b/CORE/WDI/CP/src/wlan_qct_wdi.c
index 0e70431..3da8295 100644
--- a/CORE/WDI/CP/src/wlan_qct_wdi.c
+++ b/CORE/WDI/CP/src/wlan_qct_wdi.c
@@ -542,6 +542,12 @@
NULL,
#endif /* WLAN_FEATURE_EXTSCAN */
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ WDI_ProcessStartOemDataReqIndNew, /* WDI_START_OEM_DATA_REQ_IND_NEW */
+#else
+ NULL,
+#endif /* FEATURE_OEM_DATA_SUPPORT */
+
};
@@ -872,6 +878,11 @@
WDI_ProcessNanEvent, /* WDI_HAL_NAN_EVENT */
WDI_Process_LostLinkParamInd, /* WDI_HAL_LOST_LINK_PARAMS_IND*/
WDI_Process_RssiBreachedInd, /* WDI_HAL_RSSI_BREACHED_IND */
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ WDI_ProcessStartOemDataRspIndNew, /* WDI_HAL_START_OEM_DATA_RSP_IND_NEW */
+#else
+ NULL,
+#endif
};
@@ -1220,6 +1231,7 @@
CASE_RETURN_STRING( WDI_FWR_MEM_DUMP_REQ);
CASE_RETURN_STRING( WDI_START_RSSI_MONITOR_REQ );
CASE_RETURN_STRING( WDI_STOP_RSSI_MONITOR_REQ );
+ CASE_RETURN_STRING( WDI_START_OEM_DATA_REQ_IND_NEW );
default:
return "Unknown WDI MessageId";
}
@@ -1359,6 +1371,9 @@
CASE_RETURN_STRING (WDI_START_RSSI_MONITOR_RSP);
CASE_RETURN_STRING (WDI_STOP_RSSI_MONITOR_RSP);
CASE_RETURN_STRING( WDI_WIFI_CONFIG_SET_RSP);
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ CASE_RETURN_STRING (WDI_HAL_START_OEM_DATA_RSP_IND_NEW);
+#endif
default:
return "Unknown WDI MessageId";
}
@@ -24545,6 +24560,8 @@
return WLAN_HAL_STOP_RSSI_MONITORING_REQ;
case WDI_WIFI_CONFIG_SET_REQ:
return WLAN_HAL_WIFI_CONFIG_SET_PARAMS_REQ;
+ case WDI_START_OEM_DATA_REQ_IND_NEW:
+ return WLAN_HAL_START_OEM_DATA_REQ_IND_NEW;
default:
return WLAN_HAL_MSG_MAX;
}
@@ -24888,6 +24905,10 @@
return WDI_HAL_RSSI_BREACHED_IND;
case WLAN_HAL_WIFI_CONFIG_SET_PARAMS_RSP:
return WDI_WIFI_CONFIG_SET_RSP;
+#ifdef FEATURE_OEM_DATA_SUPPORT
+ case WLAN_HAL_START_OEM_DATA_RSP_IND_NEW:
+ return WDI_HAL_START_OEM_DATA_RSP_IND_NEW;
+#endif /* FEATURE_OEM_DATA_SUPPORT */
default:
return eDRIVER_TYPE_MAX;
}
@@ -36452,3 +36473,169 @@
return WDI_STATUS_SUCCESS;
}
+
+#ifdef FEATURE_OEM_DATA_SUPPORT
+
+/**
+ @brief WDI_StartOemDataReqIndNew
+
+ @param pOemDataReqNewConfig: Req parameter for the FW
+
+ @return SUCCESS or FAIL
+*/
+WDI_Status
+WDI_StartOemDataReqIndNew
+(
+ WDI_OemDataReqNewConfig *pOemDataReqNewConfig
+)
+{
+ WDI_EventInfoType wdiEventData;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "%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_START_OEM_DATA_REQ_IND_NEW;
+ wdiEventData.pEventData = pOemDataReqNewConfig;
+ wdiEventData.uEventDataSize = sizeof(*pOemDataReqNewConfig);
+ wdiEventData.pCBfnc = NULL;
+ wdiEventData.pUserData = NULL;
+
+ return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData);
+}
+
+/**
+ @brief WDI_ProcessStartOemDataReqIndNew -
+ Send OEM Data request new indication to FW
+
+ @param pWDICtx : wdi context
+ pEventData : indication data
+
+ @see
+ @return none
+*/
+WDI_Status
+WDI_ProcessStartOemDataReqIndNew
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_OemDataReqNewConfig* wdiOemDataReqNewConfig;
+ wpt_uint8* pSendBuffer = NULL;
+ wpt_uint16 usSendSize = 0;
+ wpt_uint16 usDataOffset = 0;
+ tpStartOemDataReqParamsNew pHalStartOemDataReqParamsNew;
+ WDI_Status wdiStatus = WDI_STATUS_SUCCESS;
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_ERROR,
+ "%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;
+ }
+
+ wdiOemDataReqNewConfig =
+ (WDI_OemDataReqNewConfig *)pEventData->pEventData;
+
+ /*-----------------------------------------------------------------------
+ Get message buffer
+ -----------------------------------------------------------------------*/
+ if (( WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(
+ pWDICtx,
+ WDI_START_OEM_DATA_REQ_IND_NEW,
+ sizeof(tStartOemDataReqParamsNew),
+ &pSendBuffer, &usDataOffset,
+ &usSendSize))||
+ ( usSendSize < (usDataOffset + sizeof(tStartOemDataReqParamsNew) )))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN,
+ "Unable to get send buffer in %s %p %p", __func__,
+ pEventData, wdiOemDataReqNewConfig);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ pHalStartOemDataReqParamsNew =
+ (tpStartOemDataReqParamsNew) (pSendBuffer+usDataOffset);
+
+ wpalMemoryCopy(pHalStartOemDataReqParamsNew, wdiOemDataReqNewConfig, NEW_OEM_DATA_REQ_SIZE);
+
+
+ pWDICtx->pReqStatusUserData = NULL;
+ pWDICtx->pfncRspCB = NULL;
+
+ /*-------------------------------------------------------------------------
+ Send WDI_START_OEM_DATA_REQ_IND_NEW Request to HAL
+ -------------------------------------------------------------------------*/
+ wdiStatus = WDI_SendIndication( pWDICtx, pSendBuffer, usSendSize);
+ return (wdiStatus != WDI_STATUS_SUCCESS) ? wdiStatus:WDI_STATUS_SUCCESS_SYNC;
+}
+
+/**
+ @brief Process OemDataRsp New Indication indication from FW
+
+ @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_ProcessStartOemDataRspIndNew
+(
+ WDI_ControlBlockType* pWDICtx,
+ WDI_EventInfoType* pEventData
+)
+{
+ WDI_LowLevelIndType wdiInd;
+ /*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
+
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: ", __func__);
+
+ /* sanity check */
+ if (( NULL == pWDICtx ) || ( NULL == pEventData ) ||
+ ( NULL == pEventData->pEventData))
+ {
+ WPAL_TRACE( eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR,
+ "%s: Invalid parameters", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+
+ /* Fill in the indication parameters */
+ wdiInd.wdiIndicationType = WDI_START_OEM_DATA_RSP_IND_NEW;
+
+ /* extract response and send it to UMAC */
+ wdiInd.wdiIndicationData.pOemRspNewIndData = (void *)pEventData->pEventData;
+
+ /* Notify UMAC */
+ if (pWDICtx->wdiLowLevelIndCB)
+ {
+ pWDICtx->wdiLowLevelIndCB( &wdiInd, pWDICtx->pIndUserData );
+ }
+ else
+ {
+ VOS_TRACE( VOS_MODULE_ID_WDI, VOS_TRACE_LEVEL_INFO,
+ "%s: WDILowLevelIndCb is null", __func__);
+ WDI_ASSERT(0);
+ return WDI_STATUS_E_FAILURE;
+ }
+ return WDI_STATUS_SUCCESS;
+} /* End of WDI_ProcessEXTScanResultInd */
+
+#endif