Преглед изворни кода

qcacld-3.0: Remove oem data rsp passing over multiple layers

Remove oem data rsp passing over multiple layers.

This change set sends the OEM data response directly to
SME from WMA instead of going through LIM/MLM.

Change-Id: I3cff10ff7bdbcee39b39bd9ba03b5eff8444b017
CRs-Fixed: 1038872
Krishna Kumaar Natarajan пре 9 година
родитељ
комит
73ea9f2259

+ 1 - 1
core/hdd/inc/wlan_hdd_oemdata.h

@@ -186,7 +186,7 @@ int iw_get_oem_data_cap(struct net_device *dev, struct iw_request_info *info,
 
 int oem_activate_service(struct hdd_context_s *hdd_ctx);
 
-void hdd_send_oem_data_rsp_msg(int length, uint8_t *oemDataRsp);
+void hdd_send_oem_data_rsp_msg(tSirOemDataRsp *oem_rsp);
 #else
 static inline int oem_activate_service(struct hdd_context_s *hdd_ctx)
 {

+ 16 - 15
core/hdd/src/wlan_hdd_oemdata.c

@@ -295,28 +295,29 @@ static void send_oem_err_rsp_nlink_msg(int32_t app_pid, uint8_t error_code)
 
 /**
  * hdd_send_oem_data_rsp_msg() - send oem data response
- * @length: length of the OEM Data Response message
- * @oemDataRsp: the actual OEM Data Response message
+ * @oem_data_rsp: the actual OEM Data Response message
  *
  * This function sends an OEM Data Response message to a registered
  * application process over the netlink socket.
  *
  * Return: 0 for success, non zero for failure
  */
-void hdd_send_oem_data_rsp_msg(int length, uint8_t *oemDataRsp)
+void hdd_send_oem_data_rsp_msg(tSirOemDataRsp *oem_data_rsp)
 {
 	struct sk_buff *skb;
 	struct nlmsghdr *nlh;
-	tAniMsgHdr *aniHdr;
-	uint8_t *oemData;
+	tAniMsgHdr *ani_hdr;
+	uint8_t *oem_data;
 
-	/* OEM message is always to a specific process and cannot be a broadcast */
+	/*
+	 * OEM message is always to a specific process and cannot be a broadcast
+	 */
 	if (p_hdd_ctx->oem_pid == 0) {
 		hdd_err("invalid dest pid");
 		return;
 	}
 
-	if (length > OEM_DATA_RSP_SIZE) {
+	if (oem_data_rsp->rsp_len > OEM_DATA_RSP_SIZE) {
 		hdd_err("invalid length of Oem Data response");
 		return;
 	}
@@ -333,18 +334,18 @@ void hdd_send_oem_data_rsp_msg(int length, uint8_t *oemDataRsp)
 	nlh->nlmsg_flags = 0;
 	nlh->nlmsg_seq = 0;
 	nlh->nlmsg_type = WLAN_NL_MSG_OEM;
-	aniHdr = NLMSG_DATA(nlh);
-	aniHdr->type = ANI_MSG_OEM_DATA_RSP;
+	ani_hdr = NLMSG_DATA(nlh);
+	ani_hdr->type = ANI_MSG_OEM_DATA_RSP;
 
-	aniHdr->length = length;
-	nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + aniHdr->length));
-	oemData = (uint8_t *) ((char *)aniHdr + sizeof(tAniMsgHdr));
-	qdf_mem_copy(oemData, oemDataRsp, length);
+	ani_hdr->length = oem_data_rsp->rsp_len;
+	nlh->nlmsg_len = NLMSG_LENGTH((sizeof(tAniMsgHdr) + ani_hdr->length));
+	oem_data = (uint8_t *) ((char *)ani_hdr + sizeof(tAniMsgHdr));
+	qdf_mem_copy(oem_data, oem_data_rsp->data, oem_data_rsp->rsp_len);
 
-	skb_put(skb, NLMSG_SPACE((sizeof(tAniMsgHdr) + aniHdr->length)));
+	skb_put(skb, NLMSG_SPACE((sizeof(tAniMsgHdr) + ani_hdr->length)));
 
 	hdd_notice("sending Oem Data Response of len (%d) to process pid (%d)",
-		   length, p_hdd_ctx->oem_pid);
+		   oem_data_rsp->rsp_len, p_hdd_ctx->oem_pid);
 
 	(void)nl_srv_ucast(skb, p_hdd_ctx->oem_pid, MSG_DONTWAIT);
 

+ 1 - 4
core/mac/inc/sir_api.h

@@ -889,11 +889,8 @@ typedef struct sSirOemDataReq {
 } tSirOemDataReq, *tpSirOemDataReq;
 
 typedef struct sSirOemDataRsp {
-	uint16_t messageType;
-	uint16_t length;
-	bool target_rsp;
 	uint32_t rsp_len;
-	uint8_t *oem_data_rsp;
+	uint8_t *data;
 } tSirOemDataRsp, *tpSirOemDataRsp;
 
 #endif /* FEATURE_OEM_DATA_SUPPORT */

+ 0 - 3
core/mac/inc/wni_api.h

@@ -55,9 +55,6 @@ enum eWniMsgTypes {
 	eWNI_SME_SCAN_REQ,
 	eWNI_SME_SCAN_ABORT_IND,
 	eWNI_SME_SCAN_RSP,
-#ifdef FEATURE_OEM_DATA_SUPPORT
-	eWNI_SME_OEM_DATA_RSP,
-#endif
 	eWNI_SME_JOIN_REQ,
 	eWNI_SME_JOIN_RSP,
 	eWNI_SME_SETCONTEXT_REQ,

+ 0 - 55
core/mac/src/pe/lim/lim_process_message_queue.c

@@ -332,9 +332,6 @@ uint8_t static def_msg_decision(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
 		    && (limMsg->type != WMA_SWITCH_CHANNEL_RSP)
 		    && (limMsg->type != WMA_P2P_NOA_ATTR_IND)
 		    && (limMsg->type != WMA_P2P_NOA_START_IND) &&
-#ifdef FEATURE_OEM_DATA_SUPPORT
-		    (limMsg->type != WMA_START_OEM_DATA_RSP) &&
-#endif
 		    (limMsg->type != WMA_ADD_TS_RSP) &&
 		    /*
 		     * LIM won't process any defer queue commands if gLimAddtsSent is
@@ -1163,52 +1160,6 @@ void lim_message_processor(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
 	}
 }
 
-#ifdef FEATURE_OEM_DATA_SUPPORT
-
-void lim_oem_data_rsp_handle_resume_link_rsp(tpAniSirGlobal pMac, QDF_STATUS status,
-					     uint32_t *mlmOemDataRsp)
-{
-	if (status != QDF_STATUS_SUCCESS) {
-		lim_log(pMac, LOGE,
-			FL
-				("OEM Data Rsp failed to get the response for resume link"));
-	}
-
-	if (NULL != pMac->lim.gpLimMlmOemDataReq) {
-		qdf_mem_free(pMac->lim.gpLimMlmOemDataReq);
-		pMac->lim.gpLimMlmOemDataReq = NULL;
-	}
-	/* "Failure" status doesn't mean that Oem Data Rsp did not happen */
-	/* and hence we need to respond to upper layers. Only Resume link is failed, but */
-	/* we got the oem data response already. */
-	/* Post the meessage to MLM */
-	lim_post_sme_message(pMac, LIM_MLM_OEM_DATA_CNF,
-			     (uint32_t *) (mlmOemDataRsp));
-
-	return;
-}
-
-void lim_process_oem_data_rsp(tpAniSirGlobal pMac, uint32_t *body)
-{
-	tpLimMlmOemDataRsp mlmOemDataRsp = NULL;
-
-	/* Process all the messages for the lim queue */
-	SET_LIM_PROCESS_DEFD_MESGS(pMac, true);
-
-	mlmOemDataRsp = (tpLimMlmOemDataRsp) body;
-
-	PELOG1(lim_log
-		       (pMac, LOG1, FL("%s: sending oem data response msg to sme"),
-		       __func__);
-	       )
-	lim_post_sme_message(pMac, LIM_MLM_OEM_DATA_CNF,
-			     (uint32_t *) (mlmOemDataRsp));
-
-	return;
-}
-
-#endif
-
 static void lim_process_sme_obss_scan_ind(tpAniSirGlobal mac_ctx,
 							struct sSirMsgQ *msg)
 {
@@ -1311,12 +1262,6 @@ void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
 			lim_print_msg_name(mac_ctx, LOGE, msg->type);
 		}
 		break;
-#ifdef FEATURE_OEM_DATA_SUPPORT
-	case WMA_START_OEM_DATA_RSP:
-		lim_process_oem_data_rsp(mac_ctx, msg->bodyptr);
-		msg->bodyptr = NULL;
-		break;
-#endif
 	case WMA_SWITCH_CHANNEL_RSP:
 		lim_process_switch_channel_rsp(mac_ctx, msg->bodyptr);
 		msg->bodyptr = NULL;

+ 0 - 49
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -55,9 +55,6 @@
 
 static void lim_handle_sme_join_result(tpAniSirGlobal, tSirResultCodes, uint16_t,
 				       tpPESession);
-#ifdef FEATURE_OEM_DATA_SUPPORT
-void lim_process_mlm_oem_data_req_cnf(tpAniSirGlobal, uint32_t *);
-#endif
 void lim_process_mlm_join_cnf(tpAniSirGlobal, uint32_t *);
 void lim_process_mlm_auth_cnf(tpAniSirGlobal, uint32_t *);
 void lim_process_mlm_start_cnf(tpAniSirGlobal, uint32_t *);
@@ -102,14 +99,6 @@ lim_process_mlm_rsp_messages(tpAniSirGlobal pMac, uint32_t msgType,
 	}
 	MTRACE(mac_trace(pMac, TRACE_CODE_TX_LIM_MSG, 0, msgType));
 	switch (msgType) {
-
-#ifdef FEATURE_OEM_DATA_SUPPORT
-	case LIM_MLM_OEM_DATA_CNF:
-		lim_process_mlm_oem_data_req_cnf(pMac, pMsgBuf);
-		pMsgBuf = NULL;
-		break;
-#endif
-
 	case LIM_MLM_AUTH_CNF:
 		lim_process_mlm_auth_cnf(pMac, pMsgBuf);
 		break;
@@ -154,44 +143,6 @@ lim_process_mlm_rsp_messages(tpAniSirGlobal pMac, uint32_t msgType,
 	return;
 } /*** end lim_process_mlm_rsp_messages() ***/
 
-#ifdef FEATURE_OEM_DATA_SUPPORT
-
-/**
- * lim_process_mlm_oem_data_req_cnf()
- *
- ***FUNCTION:
- * This function is called to processes LIM_MLM_OEM_DATA_REQ_CNF
- * message from MLM State machine.
- *
- ***LOGIC:
- *
- ***ASSUMPTIONS:
- *
- ***NOTE:
- *
- * @param pMac       Pointer to Global MAC structure
- * @param pMsgBuf    A pointer to the MLM message buffer
- *
- * @return None
- */
-
-void lim_process_mlm_oem_data_req_cnf(tpAniSirGlobal pMac, uint32_t *pMsgBuf)
-{
-	tLimMlmOemDataRsp *measRsp;
-
-	tSirResultCodes resultCode = eSIR_SME_SUCCESS;
-
-	measRsp = (tLimMlmOemDataRsp *) (pMsgBuf);
-
-	/* Now send the meas confirm message to the sme */
-	lim_send_sme_oem_data_rsp(pMac, (uint32_t *) measRsp, resultCode);
-
-	/* Dont free the memory here. It will be freed up by the callee */
-
-	return;
-}
-#endif
-
 /**
  * lim_process_mlm_start_cnf()
  *

+ 0 - 93
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -785,99 +785,6 @@ lim_post_sme_scan_rsp_message(tpAniSirGlobal pMac,
 
 } /*** lim_post_sme_scan_rsp_message ***/
 
-#ifdef FEATURE_OEM_DATA_SUPPORT
-
-/**
- * lim_send_sme_oem_data_rsp()
- *
- ***FUNCTION:
- * This function is called by lim_process_sme_req_messages() to send
- * eWNI_SME_OEM_DATA_RSP message to applications above MAC
- * Software.
- *
- ***PARAMS:
- *
- ***LOGIC:
- *
- ***ASSUMPTIONS:
- * NA
- *
- ***NOTE:
- * NA
- *
- * @param pMac         Pointer to Global MAC structure
- * @param pMsgBuf      Indicates the mlm message
- * @param resultCode   Indicates the result of previously issued
- *                     eWNI_SME_OEM_DATA_RSP message
- *
- * @return None
- */
-
-void lim_send_sme_oem_data_rsp(tpAniSirGlobal pMac, uint32_t *pMsgBuf,
-			       tSirResultCodes resultCode)
-{
-	tSirMsgQ mmhMsg;
-	tSirOemDataRsp *pSirSmeOemDataRsp = NULL;
-	tLimMlmOemDataRsp *pMlmOemDataRsp = NULL;
-	uint16_t msgLength;
-
-	/* get the pointer to the mlm message */
-	pMlmOemDataRsp = (tLimMlmOemDataRsp *) (pMsgBuf);
-
-	msgLength = sizeof(*pSirSmeOemDataRsp);
-	/* now allocate memory for the char buffer */
-	pSirSmeOemDataRsp = qdf_mem_malloc(sizeof(*pSirSmeOemDataRsp));
-	if (NULL == pSirSmeOemDataRsp) {
-		lim_log(pMac, LOGP,
-			FL("malloc failed for pSirSmeOemDataRsp"));
-		qdf_mem_free(pMlmOemDataRsp->oem_data_rsp);
-		qdf_mem_free(pMlmOemDataRsp);
-		return;
-	}
-
-	if (pMlmOemDataRsp->rsp_len) {
-		pSirSmeOemDataRsp->oem_data_rsp =
-			qdf_mem_malloc(pMlmOemDataRsp->rsp_len);
-		if (!pSirSmeOemDataRsp->oem_data_rsp) {
-			lim_log(pMac, LOGE,
-				FL("malloc failed for oem_data_rsp"));
-			qdf_mem_free(pSirSmeOemDataRsp);
-			qdf_mem_free(pMlmOemDataRsp->oem_data_rsp);
-			qdf_mem_free(pMlmOemDataRsp);
-			return;
-		}
-	}
-
-#if defined (ANI_LITTLE_BYTE_ENDIAN)
-	sir_store_u16_n((uint8_t *) &pSirSmeOemDataRsp->length, msgLength);
-	sir_store_u16_n((uint8_t *) &pSirSmeOemDataRsp->messageType,
-			eWNI_SME_OEM_DATA_RSP);
-#else
-	pSirSmeOemDataRsp->length = msgLength;
-	pSirSmeOemDataRsp->messageType = eWNI_SME_OEM_DATA_RSP;
-#endif
-	pSirSmeOemDataRsp->target_rsp = pMlmOemDataRsp->target_rsp;
-	pSirSmeOemDataRsp->rsp_len = pMlmOemDataRsp->rsp_len;
-	if (pSirSmeOemDataRsp->rsp_len)
-		qdf_mem_copy(pSirSmeOemDataRsp->oem_data_rsp,
-			     pMlmOemDataRsp->oem_data_rsp,
-			     pSirSmeOemDataRsp->rsp_len);
-
-	/* Now free the memory from MLM Rsp Message */
-	qdf_mem_free(pMlmOemDataRsp->oem_data_rsp);
-	qdf_mem_free(pMlmOemDataRsp);
-
-	mmhMsg.type = eWNI_SME_OEM_DATA_RSP;
-	mmhMsg.bodyptr = pSirSmeOemDataRsp;
-	mmhMsg.bodyval = 0;
-
-	lim_sys_process_mmh_msg_api(pMac, &mmhMsg, ePROT);
-
-	return;
-} /*** lim_send_sme_oem_data_rsp ***/
-
-#endif
-
 void lim_send_sme_disassoc_deauth_ntf(tpAniSirGlobal pMac,
 				      QDF_STATUS status, uint32_t *pCtx)
 {

+ 0 - 5
core/mac/src/pe/lim/lim_send_sme_rsp_messages.h

@@ -98,11 +98,6 @@ void lim_send_sme_ibss_peer_ind(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
 				uint8_t bcastIdx, uint8_t *beacon,
 				uint16_t beaconLen, uint16_t msgType,
 				uint8_t sessionId);
-#ifdef FEATURE_OEM_DATA_SUPPORT
-void lim_send_sme_oem_data_rsp(tpAniSirGlobal pMac, uint32_t *pMsgBuf,
-			       tSirResultCodes resultCode);
-#endif
-
 void lim_send_sme_max_assoc_exceeded_ntf(tpAniSirGlobal pMac, tSirMacAddr peerMacAddr,
 					 uint8_t smesessionId);
 #ifdef FEATURE_WLAN_TDLS

+ 0 - 4
core/mac/src/pe/lim/lim_types.h

@@ -94,10 +94,6 @@
  * (LIM_MLM_MSG_START + 40) are unused.
  */
 
-#ifdef FEATURE_OEM_DATA_SUPPORT
-#define LIM_MLM_OEM_DATA_CNF            (LIM_MLM_MSG_START + 42)
-#endif
-
 #define LIM_HASH_ADD            0
 #define LIM_HASH_UPDATE         1
 

+ 0 - 4
core/mac/src/pe/lim/lim_utils.c

@@ -277,10 +277,6 @@ char *lim_msg_str(uint32_t msgType)
 		return "eWNI_SME_SYS_READY_IND";
 	case eWNI_SME_SCAN_REQ:
 		return "eWNI_SME_SCAN_REQ";
-#ifdef FEATURE_OEM_DATA_SUPPORT
-	case eWNI_SME_OEM_DATA_RSP:
-		return "eWNI_SME_OEM_DATA_RSP";
-#endif
 	case eWNI_SME_SCAN_RSP:
 		return "eWNI_SME_SCAN_RSP";
 	case eWNI_SME_JOIN_REQ:

+ 0 - 6
core/mac/src/sys/legacy/src/utils/src/mac_trace.c

@@ -233,9 +233,6 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg)
 		CASE_RETURN_STRING(eWNI_SME_SCAN_REQ);
 		CASE_RETURN_STRING(eWNI_SME_SCAN_ABORT_IND);
 		CASE_RETURN_STRING(eWNI_SME_SCAN_RSP);
-#ifdef FEATURE_OEM_DATA_SUPPORT
-		CASE_RETURN_STRING(eWNI_SME_OEM_DATA_RSP);
-#endif
 		CASE_RETURN_STRING(eWNI_SME_JOIN_REQ);
 		CASE_RETURN_STRING(eWNI_SME_JOIN_RSP);
 		CASE_RETURN_STRING(eWNI_SME_SETCONTEXT_REQ);
@@ -411,9 +408,6 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
 		CASE_RETURN_STRING(WMA_BTC_SET_CFG);
 		CASE_RETURN_STRING(WMA_HANDLE_FW_MBOX_RSP);
 		CASE_RETURN_STRING(WMA_SEND_PROBE_RSP_TMPL);
-#ifdef FEATURE_OEM_DATA_SUPPORT
-		CASE_RETURN_STRING(WMA_START_OEM_DATA_RSP);
-#endif /* SUPPORT_BEACON_FILTER */
 		CASE_RETURN_STRING(WMA_SET_MAX_TX_POWER_REQ);
 		CASE_RETURN_STRING(WMA_SET_HOST_OFFLOAD);
 		CASE_RETURN_STRING(WMA_SET_KEEP_ALIVE);

+ 2 - 2
core/sme/inc/oem_data_api.h

@@ -60,6 +60,7 @@ typedef enum {
 	eOEM_DATA_REQ_FAILURE,
 	eOEM_DATA_REQ_INVALID_MODE,
 } eOemDataReqStatus;
+
 QDF_STATUS oem_data_oem_data_req_open(tHalHandle hHal);
 QDF_STATUS oem_data_oem_data_req_close(tHalHandle hHal);
 
@@ -70,8 +71,7 @@ QDF_STATUS oem_data_oem_data_req_close(tHalHandle hHal);
 typedef QDF_STATUS (*oem_data_oem_data_reqCompleteCallback)(tHalHandle,
 		void *p2, uint32_t oemDataReqID, eOemDataReqStatus status);
 
-QDF_STATUS sme_handle_oem_data_rsp(tHalHandle hHal, uint8_t *);
-typedef void (*sme_send_oem_data_rsp_msg)(int length, uint8_t *oem_data_rsp);
+typedef void (*sme_send_oem_data_rsp_msg)(tSirOemDataRsp *);
 #endif /* _OEM_DATA_API_H__ */
 
 #endif /* FEATURE_OEM_DATA_SUPPORT */

+ 0 - 13
core/sme/src/common/sme_api.c

@@ -2531,19 +2531,6 @@ QDF_STATUS sme_process_msg(tHalHandle hHal, cds_msg_t *pMsg)
 				pMsg->type);
 		}
 		break;
-#ifdef FEATURE_OEM_DATA_SUPPORT
-	/* Handle the eWNI_SME_OEM_DATA_RSP: */
-	case eWNI_SME_OEM_DATA_RSP:
-		if (pMsg->bodyptr) {
-			status = sme_handle_oem_data_rsp(pMac, pMsg->bodyptr);
-			qdf_mem_free(pMsg->bodyptr);
-		} else {
-			sms_log(pMac, LOGE, FL("Empty message for %d"),
-				pMsg->type);
-		}
-		sme_process_pending_queue(pMac);
-		break;
-#endif
 	case eWNI_SME_ADD_STA_SELF_RSP:
 		if (pMsg->bodyptr) {
 			status = csr_process_add_sta_session_rsp(pMac,

+ 1 - 75
core/sme/src/oem_data/oem_data_api.c

@@ -94,78 +94,4 @@ QDF_STATUS oem_data_oem_data_req_close(tHalHandle hHal)
 
 	return QDF_STATUS_SUCCESS;
 }
-
-/**
- * sme_handle_oem_data_rsp() - processes the oem data response
- * @hHal:                      Handle returned by mac_open.
- * @pMsg:                      Pointer to the pSirOemDataRsp
- *
- * This function processes the oem data response obtained from the PE
- *
- * Return: QDF_STATUS.
- */
-QDF_STATUS sme_handle_oem_data_rsp(tHalHandle hHal, uint8_t *pMsg)
-{
-	QDF_STATUS status = QDF_STATUS_SUCCESS;
-	tpAniSirGlobal pMac;
-	tListElem *pEntry = NULL;
-	tSmeCmd *pCommand = NULL;
-	tSirOemDataRsp *pOemDataRsp = NULL;
-	tOemDataReq *req;
-
-	pMac = PMAC_STRUCT(hHal);
-
-	sms_log(pMac, LOG1, "%s: OEM_DATA Entering", __func__);
-
-	do {
-		if (pMsg == NULL) {
-			sms_log(pMac, LOGE, "in %s msg ptr is NULL", __func__);
-			status = QDF_STATUS_E_FAILURE;
-			break;
-		}
-
-		/* In this case, there can be multiple OEM Data Responses for one
-		 * OEM Data request, SME does not peek into data response so SME
-		 * can not know which response is the last one. So SME clears active
-		 * request command on receiving first response and thereafter SME
-		 * passes each sunsequent response to upper user layer.
-		 */
-		pEntry =
-			csr_ll_peek_head(&pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK);
-		if (pEntry) {
-			pCommand = GET_BASE_ADDR(pEntry, tSmeCmd, Link);
-			if (eSmeCommandOemDataReq == pCommand->command) {
-				if (csr_ll_remove_entry
-					    (&pMac->sme.smeCmdActiveList,
-					    &pCommand->Link, LL_ACCESS_LOCK)) {
-					qdf_mem_set(&(pCommand->u.oemDataCmd),
-						    sizeof(tOemDataCmd), 0);
-					req =
-					   &(pCommand->u.oemDataCmd.oemDataReq);
-					qdf_mem_free(req->data);
-					sme_release_command(pMac, pCommand);
-				}
-			}
-		}
-
-		pOemDataRsp = (tSirOemDataRsp *) pMsg;
-
-		/* Send to upper layer only if rsp is from target */
-		if (pOemDataRsp->target_rsp) {
-			sms_log(pMac, LOG1,
-				FL("received target oem data resp"));
-			if (pMac->oemData.oem_data_rsp_callback != NULL)
-				 pMac->oemData.oem_data_rsp_callback(
-					pOemDataRsp->rsp_len,
-					pOemDataRsp->oem_data_rsp);
-		} else {
-			sms_log(pMac, LOG1,
-				FL("received internal oem data resp"));
-		}
-		qdf_mem_free(pOemDataRsp->oem_data_rsp);
-	} while (0);
-
-	return status;
-}
-
-#endif /*FEATURE_OEM_DATA_SUPPORT */
+#endif

+ 0 - 5
core/wma/inc/wma_types.h

@@ -228,11 +228,6 @@
 #define WMA_BTC_SET_CFG                SIR_HAL_BTC_SET_CFG
 #define WMA_HANDLE_FW_MBOX_RSP         SIR_HAL_HANDLE_FW_MBOX_RSP
 
-#ifdef FEATURE_OEM_DATA_SUPPORT
-/* PE <-> HAL OEM_DATA RELATED MESSAGES */
-#define WMA_START_OEM_DATA_RSP         SIR_HAL_START_OEM_DATA_RSP
-#endif
-
 #define WMA_SET_MAX_TX_POWER_REQ       SIR_HAL_SET_MAX_TX_POWER_REQ
 #define WMA_SET_MAX_TX_POWER_RSP       SIR_HAL_SET_MAX_TX_POWER_RSP
 #define WMA_SET_TX_POWER_REQ           SIR_HAL_SET_TX_POWER_REQ

+ 23 - 9
core/wma/src/wma_features.c

@@ -1638,11 +1638,21 @@ int wma_csa_offload_handler(void *handle, uint8_t *event, uint32_t len)
 int wma_oem_data_response_handler(void *handle,
 				  uint8_t *datap, uint32_t len)
 {
-	tp_wma_handle wma = (tp_wma_handle) handle;
 	WMI_OEM_RESPONSE_EVENTID_param_tlvs *param_buf;
 	uint8_t *data;
 	uint32_t datalen;
-	tStartOemDataRsp *oem_rsp;
+	tSirOemDataRsp *oem_rsp;
+	tpAniSirGlobal pmac = cds_get_context(QDF_MODULE_ID_PE);
+
+	if (!pmac) {
+		WMA_LOGE(FL("Invalid pmac"));
+		return -EINVAL;
+	}
+
+	if (!pmac->oemData.oem_data_rsp_callback) {
+		WMA_LOGE(FL("Callback not registered"));
+		return -EINVAL;
+	}
 
 	param_buf = (WMI_OEM_RESPONSE_EVENTID_param_tlvs *) datap;
 	if (!param_buf) {
@@ -1671,9 +1681,9 @@ int wma_oem_data_response_handler(void *handle,
 	}
 	oem_rsp->rsp_len = datalen;
 	if (oem_rsp->rsp_len) {
-		oem_rsp->oem_data_rsp = qdf_mem_malloc(oem_rsp->rsp_len);
-		if (!oem_rsp->oem_data_rsp) {
-			WMA_LOGE(FL("malloc failed for oem_data_rsp"));
+		oem_rsp->data = qdf_mem_malloc(oem_rsp->rsp_len);
+		if (!oem_rsp->data) {
+			WMA_LOGE(FL("malloc failed for data"));
 			qdf_mem_free(oem_rsp);
 			return -ENOMEM;
 		}
@@ -1684,12 +1694,16 @@ int wma_oem_data_response_handler(void *handle,
 		return -EINVAL;
 	}
 
-	oem_rsp->target_rsp = true;
-	qdf_mem_copy(oem_rsp->oem_data_rsp, data, datalen);
+	qdf_mem_copy(oem_rsp->data, data, datalen);
+
+	WMA_LOGI(FL("Sending OEM_DATA_RSP(len: %d) to upper layer"), datalen);
+
+	pmac->oemData.oem_data_rsp_callback(oem_rsp);
 
-	WMA_LOGI(FL("Sending WMA_START_OEM_DATA_RSP, data len %d"), datalen);
+	if (oem_rsp->data)
+		qdf_mem_free(oem_rsp->data);
+	qdf_mem_free(oem_rsp);
 
-	wma_send_msg(wma, WMA_START_OEM_DATA_RSP, (void *)oem_rsp, 0);
 	return 0;
 }