Loading CORE/WDA/src/wlan_qct_wda.c +111 −0 Original line number Diff line number Diff line Loading @@ -16795,6 +16795,110 @@ wda_get_mdns_stats_req(tWDA_CbContext *wda_handle, } #endif /* MDNS_OFFLOAD */ #ifdef FEATURE_WLAN_SW_PTA /** * WDA_sw_pta_resp_cb() - WDA callback api to get sw pta resp status * @status: SW PTA response status * @user_data: user data * * Retrun: None */ static void WDA_sw_pta_resp_cb(uint8_t status, void *user_data) { tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data; vos_msg_t msg; VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s", __func__); if (!wda_params) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: wda_params received NULL", __func__); VOS_ASSERT(0); return; } if (!wda_params->wdaMsgParam) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: wda_params->wdaMsgParam is NULL", __func__); VOS_ASSERT(0); vos_mem_free(wda_params->wdaWdiApiMsgParam); vos_mem_free(wda_params); return; } /* VOS message wrapper */ msg.type = eWNI_SME_SW_PTA_RESP; msg.bodyptr = NULL; msg.bodyval = status; if (vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t *)&msg) != VOS_STATUS_SUCCESS) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to post message to SME", __func__); } vos_mem_free(wda_params->wdaWdiApiMsgParam); vos_mem_free(wda_params->wdaMsgParam); vos_mem_free(wda_params); VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "EXIT <------ %s ", __func__); } /* WDA_process_sw_pta_req - Process sw pta request * @wda: wda handle * @sw_pta_req: sw pta coex params request * * Return: VOS_STATUS */ static VOS_STATUS WDA_process_sw_pta_req(tWDA_CbContext *wda, struct sir_sw_pta_req *sw_pta_req) { struct wdi_sw_pta_req *wdi_sw_pta_req; tWDA_ReqParams *wda_params; WDI_Status wdi_status; VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("Enter")); wdi_sw_pta_req = (struct wdi_sw_pta_req *) vos_mem_malloc(sizeof(tWDA_ReqParams)); if (!wdi_sw_pta_req) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); vos_mem_free(sw_pta_req); return VOS_STATUS_E_NOMEM; } wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); if (!wda_params) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); vos_mem_free(wdi_sw_pta_req); vos_mem_free(sw_pta_req); } memcpy(wdi_sw_pta_req, sw_pta_req, sizeof(*sw_pta_req)); /* Store Params pass it to WDI */ wda_params->wdaWdiApiMsgParam = (void *)wdi_sw_pta_req; wda_params->pWdaContext = wda; /* Store param pointer as passed in by caller */ wda_params->wdaMsgParam = sw_pta_req; wdi_status = WDI_sw_pta_req(WDA_sw_pta_resp_cb, wdi_sw_pta_req, wda_params); if (IS_WDI_STATUS_FAILURE(wdi_status)) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("Error in WDA sw pta request")); vos_mem_free(wdi_sw_pta_req); vos_mem_free(sw_pta_req); } return CONVERT_WDI2VOS_STATUS(wdi_status); } #endif /* * FUNCTION: WDA_McProcessMsg * Trigger DAL-AL to start CFG download Loading Loading @@ -17870,6 +17974,13 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) WDA_ProcessGetARPStatsReq(pWDA, (getArpStatsParams *)pMsg->bodyptr); break; } #ifdef FEATURE_WLAN_SW_PTA case WDA_SW_PTA_REQ: { WDA_process_sw_pta_req(pWDA, (struct sir_sw_pta_req *)pMsg->bodyptr); break; } #endif default: { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, CORE/WDI/CP/inc/wlan_qct_wdi.h +44 −0 Original line number Diff line number Diff line Loading @@ -6680,6 +6680,34 @@ struct WDI_sap_ofl_enable_params{ wpt_uint32 tsf_hi; } wdi_cap_tsf_rsp_t; #ifdef FEATURE_WLAN_SW_PTA /** * enum wdi_sw_pta_param_type - Type of sw pta coex param * @WDI_SCO_STATUS: Enable/Disable SCO * @WDI_NUD_STATUS: Enable/Disable NUD * @WDI_BT_STATUS: Enable/Disable BT */ /* Copied from sirApi.h to avoid compile error */ enum wdi_sw_pta_param_type { WDI_SCO_STATUS, WDI_NUD_STATUS, WDI_BT_STATUS, }; #define WDI_SW_PTA_COEX_PARAMS_MAX_LEN 32 /** * wdi_sw_pta_req - SW PTA coex params request * @param_type: sw pta coex param type * @length: sw pta coex params value length * @value: sw pta coex params value */ struct wdi_sw_pta_req { enum wdi_sw_pta_param_type param_type; uint8_t length; uint8_t value[WDI_SW_PTA_COEX_PARAMS_MAX_LEN]; }; #endif /*---------------------------------------------------------------------------- * WDI callback types *--------------------------------------------------------------------------*/ Loading Loading @@ -12563,5 +12591,21 @@ wdi_process_get_tsf_req (wdi_cap_tsf_params_t *wdi_get_tsf_req, wdi_tsf_rsp_cb wdi_tsf_rsp_callback, void *user_data); #ifdef FEATURE_WLAN_SW_PTA typedef void (*WDI_sw_pta_resp_cb)(uint8_t status, void *user_data); /** * @WDI_sw_pta_req - SW PTA request * * @wdi_sw_pta_resp_cb: WDI sw pta response callback * @wdi_sw_pta_req: sw pta request params * @user_data: user data * * @Return: WDI_Status */ WDI_Status WDI_sw_pta_req(WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb, struct wdi_sw_pta_req *wdi_sw_pta_req, void *user_data); #endif /* FEATURE_WLAN_SW_PTA */ #endif /* #ifndef WLAN_QCT_WDI_H */ CORE/WDI/CP/inc/wlan_qct_wdi_i.h +36 −0 Original line number Diff line number Diff line Loading @@ -508,6 +508,12 @@ typedef enum /* BLACKLIST Request */ WDI_BLACKLIST_REQ = 127, WDI_SET_LOW_POWER_REQ = 128, #ifdef FEATURE_WLAN_SW_PTA /* SW PTA coex params request */ WDI_SW_PTA_COEX_PARAMS_REQ = 129, #endif WDI_MAX_REQ, /*Send a suspend Indication down to HAL*/ Loading Loading @@ -901,6 +907,10 @@ typedef enum WDI_BLACKLIST_RSP = 126, WDI_SET_LOW_POWER_RSP = 127, #ifdef FEATURE_WLAN_SW_PTA /* SW PTA coex params response */ WDI_SW_PTA_COEX_PARAMS_RSP = 128, #endif /*------------------------------------------------------------------------- Indications !! Keep these last in the enum if possible Loading Loading @@ -6931,5 +6941,31 @@ WDI_ProcessGetArpStatsResp WDI_EventInfoType* pEventData ); #ifdef FEATURE_WLAN_SW_PTA /** * WDI_process_sw_pta_req() - process sw pta coex params request * * @pWDICtx: pointer to the WLAN DAL context * @pEventData: pointer to the event information structure * * @return Result of the function call */ WDI_Status WDI_process_sw_pta_req(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData); /** * WDI_process_sw_pta_resp() - process sw pta coex params response * * @pWDICtx: pointer to the WLAN DAL context * @pEventData: pointer to the event information structure * * @return Result of the function call */ WDI_Status WDI_process_sw_pta_resp(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData); #endif /* FEATURE_WLAN_SW_PTA */ #endif /*WLAN_QCT_WDI_I_H*/ CORE/WDI/CP/src/wlan_qct_wdi.c +127 −1 Original line number Diff line number Diff line Loading @@ -551,6 +551,10 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = WDI_ProcessBlackListReq, /* WDI_BLACKLIST_REQ*/ WDI_process_low_power_request, /* WDI_SET_LOW_POWER_REQ */ #ifdef FEATURE_WLAN_SW_PTA WDI_process_sw_pta_req, /* WDI_SW_PTA_COEX_PARAMS_REQ */ #endif /*------------------------------------------------------------------------- Indications -------------------------------------------------------------------------*/ Loading Loading @@ -907,6 +911,11 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = WDI_low_power_rsp_callback, /* WDI_SET_LOW_POWER_RSP */ WDI_ProcessBlackListResp, /* WDI_BLACKLIST_RSP */ #ifdef FEATURE_WLAN_SW_PTA WDI_process_sw_pta_resp, /* WDI_SW_PTA_COEX_PARAMS_RESP */ #endif /*--------------------------------------------------------------------- Indications ---------------------------------------------------------------------*/ Loading Loading @@ -1386,6 +1395,9 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) #endif CASE_RETURN_STRING( WDI_FW_ARP_STATS_REQ ); CASE_RETURN_STRING( WDI_FW_GET_ARP_STATS_REQ ); #ifdef FEATURE_WLAN_SW_PTA CASE_RETURN_STRING(WDI_SW_PTA_COEX_PARAMS_REQ); #endif default: return "Unknown WDI MessageId"; Loading Loading @@ -1817,6 +1829,9 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING (WDI_CAPTURE_GET_TSF_TSTAMP_RSP); CASE_RETURN_STRING (WDI_BLACKLIST_RSP); CASE_RETURN_STRING (WDI_SET_LOW_POWER_RSP); #ifdef FEATURE_WLAN_SW_PTA CASE_RETURN_STRING(WDI_SW_PTA_COEX_PARAMS_RSP); #endif default: return "Unknown WDI MessageId"; } Loading Loading @@ -25544,6 +25559,10 @@ WDI_2_HAL_REQ_TYPE return WLAN_HAL_FW_SET_CLEAR_ARP_STATS_REQ; case WDI_FW_GET_ARP_STATS_REQ: return WLAN_HAL_FW_GET_ARP_STATS_REQ; #ifdef FEATURE_WLAN_SW_PTA case WDI_SW_PTA_COEX_PARAMS_REQ: return WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_REQ; #endif default: return WLAN_HAL_MSG_MAX; } Loading Loading @@ -25935,6 +25954,10 @@ case WLAN_HAL_DEL_STA_SELF_RSP: return WDI_FW_GET_ARP_STATS_RSP; case WLAN_HAL_POWER_CONTROL_MODE_CHANGE_RSP: return WDI_SET_LOW_POWER_RSP; #ifdef FEATURE_WLAN_SW_PTA case WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_RSP: return WDI_SW_PTA_COEX_PARAMS_RSP; #endif default: return eDRIVER_TYPE_MAX; } Loading Loading @@ -40092,4 +40115,107 @@ wdi_get_tsf_rsp return WDI_STATUS_SUCCESS; } #ifdef FEATURE_WLAN_SW_PTA WDI_Status WDI_sw_pta_req(WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb, struct wdi_sw_pta_req *wdi_sw_pta_req, void *user_data) { WDI_EventInfoType wdiEventData; if (gWDIInitialized == eWLAN_PAL_FALSE) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "WDI API called before module is initialized"); return WDI_STATUS_E_NOT_ALLOWED; } VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s", __func__); wdiEventData.wdiRequest = WDI_SW_PTA_COEX_PARAMS_REQ; wdiEventData.pEventData = (void *)wdi_sw_pta_req; wdiEventData.uEventDataSize = sizeof(*wdi_sw_pta_req); wdiEventData.pUserData = user_data; wdiEventData.pCBfnc = wdi_sw_pta_resp_cb; return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } WDI_Status WDI_process_sw_pta_req(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData) { struct wdi_sw_pta_req *wdi_sw_pta_req; wpt_uint8 *pSendBuffer = NULL; tpHalSwPTAReq hal_sw_pta_req; wpt_uint16 usDataOffset = 0; wpt_uint16 usSendSize = 0; WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, "WDI_process_sw_pta_req"); if (!pEventData) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Invalid parameters", __func__); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } if (WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, WDI_SW_PTA_COEX_PARAMS_REQ, sizeof(*hal_sw_pta_req), &pSendBuffer, &usDataOffset, &usSendSize) || (usSendSize < (usDataOffset + sizeof(*hal_sw_pta_req)))) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get buffer in sw pta request %pK", pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } wdi_sw_pta_req = (struct wdi_sw_pta_req *)pEventData->pEventData; hal_sw_pta_req = (tpHalSwPTAReq) (pSendBuffer + usDataOffset);; hal_sw_pta_req->param_type = wdi_sw_pta_req->param_type; hal_sw_pta_req->length = wdi_sw_pta_req->length; memcpy(hal_sw_pta_req->value, wdi_sw_pta_req->value, wdi_sw_pta_req->length); return WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize, pEventData->pCBfnc, pEventData->pUserData, WDI_SW_PTA_COEX_PARAMS_RSP); } WDI_Status WDI_process_sw_pta_resp(WDI_ControlBlockType *wdi_ctx, WDI_EventInfoType *pEventData) { WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb; uint8_t sw_pta_status; if ((!wdi_ctx) || (!pEventData) || !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; } sw_pta_status = *((uint8_t *)pEventData->pEventData); VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s : Received SW PTA coex params response, status : %d", __func__, sw_pta_status); wdi_sw_pta_resp_cb = (WDI_sw_pta_resp_cb)wdi_ctx->pfncRspCB; if (wdi_sw_pta_resp_cb) { wdi_sw_pta_resp_cb(sw_pta_status, wdi_ctx->pRspCBUserData); } else { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s : wdi_sw_pta_resp_cb is NULL", __func__); return WDI_STATUS_E_FAILURE; } return WDI_STATUS_SUCCESS; } #endif /* FEATURE_WLAN_SW_PTA */ #endif riva/inc/wlan_hal_msg.h +30 −0 Original line number Diff line number Diff line Loading @@ -635,6 +635,8 @@ typedef enum WLAN_HAL_QPOWER_ENABLE_BY_HOST_IND = 361, WLAN_HAL_BLACK_LIST_SSID_REQ = 362, WLAN_HAL_BLACK_LIST_SSID_RSP = 363, WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_REQ = 364, WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_RSP = 365, WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE }tHalHostMsgType; Loading Loading @@ -9771,4 +9773,32 @@ typedef PACKED_PRE struct PACKED_POST #else #endif #ifdef FEATURE_WLAN_SW_PTA /** * enum hal_sw_pta_param_type - Type of sw pta coex param * @WDI_SCO_STATUS: Enable/Disable SCO * @WDI_NUD_STATUS: Enable/Disable NUD * @WDI_BT_STATUS: Enable/Disable BT */ /* Copied from sirApi.h to avoid compile error */ enum hal_sw_pta_param_type { HAL_SW_PTA_SCO_STATUS = 0, HAL_SW_PTA_NUD_STATUS = 1, HAL_SW_PTA_BT_STATUS = 2, HAL_SW_PTA_MAX = WLAN_HAL_MAX_ENUM_SIZE }; #define HAL_SW_PTA_COEX_PARAMS_MAX_LEN 32 /** * hal_sw_pta_req - SW PTA coex params request * @param_type: sw pta coex param type * @length: sw pta coex params value length * @value: sw pta coex params value */ typedef PACKED_PRE struct PACKED_POST { enum hal_sw_pta_param_type param_type; uint8_t length; uint8_t value[HAL_SW_PTA_COEX_PARAMS_MAX_LEN]; } tHalSwPTAReq, *tpHalSwPTAReq; #endif #endif /* _WLAN_HAL_MSG_H_ */ Loading
CORE/WDA/src/wlan_qct_wda.c +111 −0 Original line number Diff line number Diff line Loading @@ -16795,6 +16795,110 @@ wda_get_mdns_stats_req(tWDA_CbContext *wda_handle, } #endif /* MDNS_OFFLOAD */ #ifdef FEATURE_WLAN_SW_PTA /** * WDA_sw_pta_resp_cb() - WDA callback api to get sw pta resp status * @status: SW PTA response status * @user_data: user data * * Retrun: None */ static void WDA_sw_pta_resp_cb(uint8_t status, void *user_data) { tWDA_ReqParams *wda_params = (tWDA_ReqParams *)user_data; vos_msg_t msg; VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "<------ %s", __func__); if (!wda_params) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: wda_params received NULL", __func__); VOS_ASSERT(0); return; } if (!wda_params->wdaMsgParam) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: wda_params->wdaMsgParam is NULL", __func__); VOS_ASSERT(0); vos_mem_free(wda_params->wdaWdiApiMsgParam); vos_mem_free(wda_params); return; } /* VOS message wrapper */ msg.type = eWNI_SME_SW_PTA_RESP; msg.bodyptr = NULL; msg.bodyval = status; if (vos_mq_post_message(VOS_MQ_ID_SME, (vos_msg_t *)&msg) != VOS_STATUS_SUCCESS) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: Failed to post message to SME", __func__); } vos_mem_free(wda_params->wdaWdiApiMsgParam); vos_mem_free(wda_params->wdaMsgParam); vos_mem_free(wda_params); VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "EXIT <------ %s ", __func__); } /* WDA_process_sw_pta_req - Process sw pta request * @wda: wda handle * @sw_pta_req: sw pta coex params request * * Return: VOS_STATUS */ static VOS_STATUS WDA_process_sw_pta_req(tWDA_CbContext *wda, struct sir_sw_pta_req *sw_pta_req) { struct wdi_sw_pta_req *wdi_sw_pta_req; tWDA_ReqParams *wda_params; WDI_Status wdi_status; VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("Enter")); wdi_sw_pta_req = (struct wdi_sw_pta_req *) vos_mem_malloc(sizeof(tWDA_ReqParams)); if (!wdi_sw_pta_req) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); vos_mem_free(sw_pta_req); return VOS_STATUS_E_NOMEM; } wda_params = (tWDA_ReqParams *)vos_mem_malloc(sizeof(tWDA_ReqParams)); if (!wda_params) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, "%s: VOS MEM Alloc Failure", __func__); vos_mem_free(wdi_sw_pta_req); vos_mem_free(sw_pta_req); } memcpy(wdi_sw_pta_req, sw_pta_req, sizeof(*sw_pta_req)); /* Store Params pass it to WDI */ wda_params->wdaWdiApiMsgParam = (void *)wdi_sw_pta_req; wda_params->pWdaContext = wda; /* Store param pointer as passed in by caller */ wda_params->wdaMsgParam = sw_pta_req; wdi_status = WDI_sw_pta_req(WDA_sw_pta_resp_cb, wdi_sw_pta_req, wda_params); if (IS_WDI_STATUS_FAILURE(wdi_status)) { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, FL("Error in WDA sw pta request")); vos_mem_free(wdi_sw_pta_req); vos_mem_free(sw_pta_req); } return CONVERT_WDI2VOS_STATUS(wdi_status); } #endif /* * FUNCTION: WDA_McProcessMsg * Trigger DAL-AL to start CFG download Loading Loading @@ -17870,6 +17974,13 @@ VOS_STATUS WDA_McProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t *pMsg ) WDA_ProcessGetARPStatsReq(pWDA, (getArpStatsParams *)pMsg->bodyptr); break; } #ifdef FEATURE_WLAN_SW_PTA case WDA_SW_PTA_REQ: { WDA_process_sw_pta_req(pWDA, (struct sir_sw_pta_req *)pMsg->bodyptr); break; } #endif default: { VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO,
CORE/WDI/CP/inc/wlan_qct_wdi.h +44 −0 Original line number Diff line number Diff line Loading @@ -6680,6 +6680,34 @@ struct WDI_sap_ofl_enable_params{ wpt_uint32 tsf_hi; } wdi_cap_tsf_rsp_t; #ifdef FEATURE_WLAN_SW_PTA /** * enum wdi_sw_pta_param_type - Type of sw pta coex param * @WDI_SCO_STATUS: Enable/Disable SCO * @WDI_NUD_STATUS: Enable/Disable NUD * @WDI_BT_STATUS: Enable/Disable BT */ /* Copied from sirApi.h to avoid compile error */ enum wdi_sw_pta_param_type { WDI_SCO_STATUS, WDI_NUD_STATUS, WDI_BT_STATUS, }; #define WDI_SW_PTA_COEX_PARAMS_MAX_LEN 32 /** * wdi_sw_pta_req - SW PTA coex params request * @param_type: sw pta coex param type * @length: sw pta coex params value length * @value: sw pta coex params value */ struct wdi_sw_pta_req { enum wdi_sw_pta_param_type param_type; uint8_t length; uint8_t value[WDI_SW_PTA_COEX_PARAMS_MAX_LEN]; }; #endif /*---------------------------------------------------------------------------- * WDI callback types *--------------------------------------------------------------------------*/ Loading Loading @@ -12563,5 +12591,21 @@ wdi_process_get_tsf_req (wdi_cap_tsf_params_t *wdi_get_tsf_req, wdi_tsf_rsp_cb wdi_tsf_rsp_callback, void *user_data); #ifdef FEATURE_WLAN_SW_PTA typedef void (*WDI_sw_pta_resp_cb)(uint8_t status, void *user_data); /** * @WDI_sw_pta_req - SW PTA request * * @wdi_sw_pta_resp_cb: WDI sw pta response callback * @wdi_sw_pta_req: sw pta request params * @user_data: user data * * @Return: WDI_Status */ WDI_Status WDI_sw_pta_req(WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb, struct wdi_sw_pta_req *wdi_sw_pta_req, void *user_data); #endif /* FEATURE_WLAN_SW_PTA */ #endif /* #ifndef WLAN_QCT_WDI_H */
CORE/WDI/CP/inc/wlan_qct_wdi_i.h +36 −0 Original line number Diff line number Diff line Loading @@ -508,6 +508,12 @@ typedef enum /* BLACKLIST Request */ WDI_BLACKLIST_REQ = 127, WDI_SET_LOW_POWER_REQ = 128, #ifdef FEATURE_WLAN_SW_PTA /* SW PTA coex params request */ WDI_SW_PTA_COEX_PARAMS_REQ = 129, #endif WDI_MAX_REQ, /*Send a suspend Indication down to HAL*/ Loading Loading @@ -901,6 +907,10 @@ typedef enum WDI_BLACKLIST_RSP = 126, WDI_SET_LOW_POWER_RSP = 127, #ifdef FEATURE_WLAN_SW_PTA /* SW PTA coex params response */ WDI_SW_PTA_COEX_PARAMS_RSP = 128, #endif /*------------------------------------------------------------------------- Indications !! Keep these last in the enum if possible Loading Loading @@ -6931,5 +6941,31 @@ WDI_ProcessGetArpStatsResp WDI_EventInfoType* pEventData ); #ifdef FEATURE_WLAN_SW_PTA /** * WDI_process_sw_pta_req() - process sw pta coex params request * * @pWDICtx: pointer to the WLAN DAL context * @pEventData: pointer to the event information structure * * @return Result of the function call */ WDI_Status WDI_process_sw_pta_req(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData); /** * WDI_process_sw_pta_resp() - process sw pta coex params response * * @pWDICtx: pointer to the WLAN DAL context * @pEventData: pointer to the event information structure * * @return Result of the function call */ WDI_Status WDI_process_sw_pta_resp(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData); #endif /* FEATURE_WLAN_SW_PTA */ #endif /*WLAN_QCT_WDI_I_H*/
CORE/WDI/CP/src/wlan_qct_wdi.c +127 −1 Original line number Diff line number Diff line Loading @@ -551,6 +551,10 @@ WDI_ReqProcFuncType pfnReqProcTbl[WDI_MAX_UMAC_IND] = WDI_ProcessBlackListReq, /* WDI_BLACKLIST_REQ*/ WDI_process_low_power_request, /* WDI_SET_LOW_POWER_REQ */ #ifdef FEATURE_WLAN_SW_PTA WDI_process_sw_pta_req, /* WDI_SW_PTA_COEX_PARAMS_REQ */ #endif /*------------------------------------------------------------------------- Indications -------------------------------------------------------------------------*/ Loading Loading @@ -907,6 +911,11 @@ WDI_RspProcFuncType pfnRspProcTbl[WDI_MAX_RESP] = WDI_low_power_rsp_callback, /* WDI_SET_LOW_POWER_RSP */ WDI_ProcessBlackListResp, /* WDI_BLACKLIST_RSP */ #ifdef FEATURE_WLAN_SW_PTA WDI_process_sw_pta_resp, /* WDI_SW_PTA_COEX_PARAMS_RESP */ #endif /*--------------------------------------------------------------------- Indications ---------------------------------------------------------------------*/ Loading Loading @@ -1386,6 +1395,9 @@ static char *WDI_getReqMsgString(wpt_uint16 wdiReqMsgId) #endif CASE_RETURN_STRING( WDI_FW_ARP_STATS_REQ ); CASE_RETURN_STRING( WDI_FW_GET_ARP_STATS_REQ ); #ifdef FEATURE_WLAN_SW_PTA CASE_RETURN_STRING(WDI_SW_PTA_COEX_PARAMS_REQ); #endif default: return "Unknown WDI MessageId"; Loading Loading @@ -1817,6 +1829,9 @@ static char *WDI_getRespMsgString(wpt_uint16 wdiRespMsgId) CASE_RETURN_STRING (WDI_CAPTURE_GET_TSF_TSTAMP_RSP); CASE_RETURN_STRING (WDI_BLACKLIST_RSP); CASE_RETURN_STRING (WDI_SET_LOW_POWER_RSP); #ifdef FEATURE_WLAN_SW_PTA CASE_RETURN_STRING(WDI_SW_PTA_COEX_PARAMS_RSP); #endif default: return "Unknown WDI MessageId"; } Loading Loading @@ -25544,6 +25559,10 @@ WDI_2_HAL_REQ_TYPE return WLAN_HAL_FW_SET_CLEAR_ARP_STATS_REQ; case WDI_FW_GET_ARP_STATS_REQ: return WLAN_HAL_FW_GET_ARP_STATS_REQ; #ifdef FEATURE_WLAN_SW_PTA case WDI_SW_PTA_COEX_PARAMS_REQ: return WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_REQ; #endif default: return WLAN_HAL_MSG_MAX; } Loading Loading @@ -25935,6 +25954,10 @@ case WLAN_HAL_DEL_STA_SELF_RSP: return WDI_FW_GET_ARP_STATS_RSP; case WLAN_HAL_POWER_CONTROL_MODE_CHANGE_RSP: return WDI_SET_LOW_POWER_RSP; #ifdef FEATURE_WLAN_SW_PTA case WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_RSP: return WDI_SW_PTA_COEX_PARAMS_RSP; #endif default: return eDRIVER_TYPE_MAX; } Loading Loading @@ -40092,4 +40115,107 @@ wdi_get_tsf_rsp return WDI_STATUS_SUCCESS; } #ifdef FEATURE_WLAN_SW_PTA WDI_Status WDI_sw_pta_req(WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb, struct wdi_sw_pta_req *wdi_sw_pta_req, void *user_data) { WDI_EventInfoType wdiEventData; if (gWDIInitialized == eWLAN_PAL_FALSE) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_ERROR, "WDI API called before module is initialized"); return WDI_STATUS_E_NOT_ALLOWED; } VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s", __func__); wdiEventData.wdiRequest = WDI_SW_PTA_COEX_PARAMS_REQ; wdiEventData.pEventData = (void *)wdi_sw_pta_req; wdiEventData.uEventDataSize = sizeof(*wdi_sw_pta_req); wdiEventData.pUserData = user_data; wdiEventData.pCBfnc = wdi_sw_pta_resp_cb; return WDI_PostMainEvent(&gWDICb, WDI_REQUEST_EVENT, &wdiEventData); } WDI_Status WDI_process_sw_pta_req(WDI_ControlBlockType *pWDICtx, WDI_EventInfoType *pEventData) { struct wdi_sw_pta_req *wdi_sw_pta_req; wpt_uint8 *pSendBuffer = NULL; tpHalSwPTAReq hal_sw_pta_req; wpt_uint16 usDataOffset = 0; wpt_uint16 usSendSize = 0; WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_INFO, "WDI_process_sw_pta_req"); if (!pEventData) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "%s: Invalid parameters", __func__); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } if (WDI_STATUS_SUCCESS != WDI_GetMessageBuffer(pWDICtx, WDI_SW_PTA_COEX_PARAMS_REQ, sizeof(*hal_sw_pta_req), &pSendBuffer, &usDataOffset, &usSendSize) || (usSendSize < (usDataOffset + sizeof(*hal_sw_pta_req)))) { WPAL_TRACE(eWLAN_MODULE_DAL_CTRL, eWLAN_PAL_TRACE_LEVEL_WARN, "Unable to get buffer in sw pta request %pK", pEventData); WDI_ASSERT(0); return WDI_STATUS_E_FAILURE; } wdi_sw_pta_req = (struct wdi_sw_pta_req *)pEventData->pEventData; hal_sw_pta_req = (tpHalSwPTAReq) (pSendBuffer + usDataOffset);; hal_sw_pta_req->param_type = wdi_sw_pta_req->param_type; hal_sw_pta_req->length = wdi_sw_pta_req->length; memcpy(hal_sw_pta_req->value, wdi_sw_pta_req->value, wdi_sw_pta_req->length); return WDI_SendMsg(pWDICtx, pSendBuffer, usSendSize, pEventData->pCBfnc, pEventData->pUserData, WDI_SW_PTA_COEX_PARAMS_RSP); } WDI_Status WDI_process_sw_pta_resp(WDI_ControlBlockType *wdi_ctx, WDI_EventInfoType *pEventData) { WDI_sw_pta_resp_cb wdi_sw_pta_resp_cb; uint8_t sw_pta_status; if ((!wdi_ctx) || (!pEventData) || !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; } sw_pta_status = *((uint8_t *)pEventData->pEventData); VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s : Received SW PTA coex params response, status : %d", __func__, sw_pta_status); wdi_sw_pta_resp_cb = (WDI_sw_pta_resp_cb)wdi_ctx->pfncRspCB; if (wdi_sw_pta_resp_cb) { wdi_sw_pta_resp_cb(sw_pta_status, wdi_ctx->pRspCBUserData); } else { VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_INFO, "%s : wdi_sw_pta_resp_cb is NULL", __func__); return WDI_STATUS_E_FAILURE; } return WDI_STATUS_SUCCESS; } #endif /* FEATURE_WLAN_SW_PTA */ #endif
riva/inc/wlan_hal_msg.h +30 −0 Original line number Diff line number Diff line Loading @@ -635,6 +635,8 @@ typedef enum WLAN_HAL_QPOWER_ENABLE_BY_HOST_IND = 361, WLAN_HAL_BLACK_LIST_SSID_REQ = 362, WLAN_HAL_BLACK_LIST_SSID_RSP = 363, WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_REQ = 364, WLAN_HAL_HOST_SW_PTA_COEX_PARAMS_RSP = 365, WLAN_HAL_MSG_MAX = WLAN_HAL_MSG_TYPE_MAX_ENUM_SIZE }tHalHostMsgType; Loading Loading @@ -9771,4 +9773,32 @@ typedef PACKED_PRE struct PACKED_POST #else #endif #ifdef FEATURE_WLAN_SW_PTA /** * enum hal_sw_pta_param_type - Type of sw pta coex param * @WDI_SCO_STATUS: Enable/Disable SCO * @WDI_NUD_STATUS: Enable/Disable NUD * @WDI_BT_STATUS: Enable/Disable BT */ /* Copied from sirApi.h to avoid compile error */ enum hal_sw_pta_param_type { HAL_SW_PTA_SCO_STATUS = 0, HAL_SW_PTA_NUD_STATUS = 1, HAL_SW_PTA_BT_STATUS = 2, HAL_SW_PTA_MAX = WLAN_HAL_MAX_ENUM_SIZE }; #define HAL_SW_PTA_COEX_PARAMS_MAX_LEN 32 /** * hal_sw_pta_req - SW PTA coex params request * @param_type: sw pta coex param type * @length: sw pta coex params value length * @value: sw pta coex params value */ typedef PACKED_PRE struct PACKED_POST { enum hal_sw_pta_param_type param_type; uint8_t length; uint8_t value[HAL_SW_PTA_COEX_PARAMS_MAX_LEN]; } tHalSwPTAReq, *tpHalSwPTAReq; #endif #endif /* _WLAN_HAL_MSG_H_ */