From 73ea9f2259b4021c3e553eabd971710e13bf4042 Mon Sep 17 00:00:00 2001 From: Krishna Kumaar Natarajan Date: Thu, 30 Jun 2016 18:38:47 -0700 Subject: [PATCH] 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 --- core/hdd/inc/wlan_hdd_oemdata.h | 2 +- core/hdd/src/wlan_hdd_oemdata.c | 31 ++++--- core/mac/inc/sir_api.h | 5 +- core/mac/inc/wni_api.h | 3 - .../src/pe/lim/lim_process_message_queue.c | 55 ----------- .../src/pe/lim/lim_process_mlm_rsp_messages.c | 49 ---------- .../src/pe/lim/lim_send_sme_rsp_messages.c | 93 ------------------- .../src/pe/lim/lim_send_sme_rsp_messages.h | 5 - core/mac/src/pe/lim/lim_types.h | 4 - core/mac/src/pe/lim/lim_utils.c | 4 - .../src/sys/legacy/src/utils/src/mac_trace.c | 6 -- core/sme/inc/oem_data_api.h | 4 +- core/sme/src/common/sme_api.c | 13 --- core/sme/src/oem_data/oem_data_api.c | 76 +-------------- core/wma/inc/wma_types.h | 5 - core/wma/src/wma_features.c | 32 +++++-- 16 files changed, 44 insertions(+), 343 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_oemdata.h b/core/hdd/inc/wlan_hdd_oemdata.h index fcfc4f148a..33dd4527d5 100644 --- a/core/hdd/inc/wlan_hdd_oemdata.h +++ b/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) { diff --git a/core/hdd/src/wlan_hdd_oemdata.c b/core/hdd/src/wlan_hdd_oemdata.c index c69c13b2ca..5e46a72b3f 100644 --- a/core/hdd/src/wlan_hdd_oemdata.c +++ b/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); diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 8443a177f6..d5ae056eb3 100644 --- a/core/mac/inc/sir_api.h +++ b/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 */ diff --git a/core/mac/inc/wni_api.h b/core/mac/inc/wni_api.h index 1772a427fb..c338a648db 100644 --- a/core/mac/inc/wni_api.h +++ b/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, diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c index 8b9135feef..c07ee89dec 100644 --- a/core/mac/src/pe/lim/lim_process_message_queue.c +++ b/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; diff --git a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c b/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c index 5637496c25..95cb2e245f 100644 --- a/core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c +++ b/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() * diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c index 9f6413fdec..7ba373852d 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.c +++ b/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) { diff --git a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h b/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h index f8997d19bc..55a58ff0ee 100644 --- a/core/mac/src/pe/lim/lim_send_sme_rsp_messages.h +++ b/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 diff --git a/core/mac/src/pe/lim/lim_types.h b/core/mac/src/pe/lim/lim_types.h index f78a3604aa..04c01e51c3 100644 --- a/core/mac/src/pe/lim/lim_types.h +++ b/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 diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c index ce3cf16618..01bdfb67ff 100644 --- a/core/mac/src/pe/lim/lim_utils.c +++ b/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: diff --git a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c index 5ae1f318d1..85504c6094 100644 --- a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c +++ b/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); diff --git a/core/sme/inc/oem_data_api.h b/core/sme/inc/oem_data_api.h index 14f35d572a..c8cd1a38ac 100644 --- a/core/sme/inc/oem_data_api.h +++ b/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 */ diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index a058e8df51..d02a3c7e2b 100644 --- a/core/sme/src/common/sme_api.c +++ b/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, diff --git a/core/sme/src/oem_data/oem_data_api.c b/core/sme/src/oem_data/oem_data_api.c index fe36a2e563..71a6bd0ed1 100644 --- a/core/sme/src/oem_data/oem_data_api.c +++ b/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 diff --git a/core/wma/inc/wma_types.h b/core/wma/inc/wma_types.h index 328fc0f5f0..7bb5ecaa9a 100644 --- a/core/wma/inc/wma_types.h +++ b/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 diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c index 4a8c07ce2c..abd8848ee4 100644 --- a/core/wma/src/wma_features.c +++ b/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 WMA_START_OEM_DATA_RSP, data len %d"), datalen); + WMA_LOGI(FL("Sending OEM_DATA_RSP(len: %d) to upper layer"), datalen); + + pmac->oemData.oem_data_rsp_callback(oem_rsp); + + 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; }