From 748c7274d3adec77e079b7604fd667d13f7bc4ff Mon Sep 17 00:00:00 2001 From: gaurank kathpalia Date: Wed, 24 Oct 2018 22:05:15 +0530 Subject: [PATCH] qcacld-3.0: Send vdev nss params to fw Infra to send vdev nss chain user params to the fw. Change-Id: I907ffe0906712b328e276527412530225c23b68e CRs-Fixed: 2347499 --- core/sme/src/common/sme_api.c | 20 ++++++++++++++++++-- core/wma/inc/wma.h | 14 ++++++++++++++ core/wma/src/wma_main.c | 16 ++++++++++++++++ 3 files changed, 48 insertions(+), 2 deletions(-) diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index d033b7867183..eb03cff77537 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -31,6 +31,7 @@ #include "csr_internal.h" #include "wma_types.h" #include "wma_if.h" +#include "wma.h" #include "wma_fips_api.h" #include "qdf_trace.h" #include "sme_trace.h" @@ -5063,11 +5064,26 @@ sme_nss_chains_update(mac_handle_t mac_handle, sme_err("Got NULL vdev obj, returning"); return QDF_STATUS_E_FAILURE; } + status = sme_acquire_global_lock(&mac_ctx->sme); + if (QDF_IS_STATUS_ERROR(status)) + goto release_ref; + status = sme_validate_nss_chains_config(vdev, user_cfg); if (QDF_IS_STATUS_ERROR(status)) - goto end; + goto release_lock; + sme_debug("User params verified, sending to fw vdev id %d", vdev_id); -end: + status = wma_vdev_nss_chain_params_send(vdev->vdev_objmgr.vdev_id, + user_cfg); + if (QDF_IS_STATUS_ERROR(status)) { + sme_err("params sent failed to fw vdev id %d", vdev_id); + goto release_lock; + } + +release_lock: + sme_release_global_lock(&mac_ctx->sme); + +release_ref: wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID); return status; } diff --git a/core/wma/inc/wma.h b/core/wma/inc/wma.h index 613ca0bb657c..6045c5bc8a06 100644 --- a/core/wma/inc/wma.h +++ b/core/wma/inc/wma.h @@ -1290,6 +1290,20 @@ typedef struct { } t_wma_handle, *tp_wma_handle; extern void cds_wma_complete_cback(void); + +/** + * wma_vdev_nss_chain_params_send() - send vdev nss chain params to fw. + * @vdev_id: vdev_id + * @user_cfg: pointer to the params structure + * + * This function sends nss chain params to the fw + * + * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_FAILURE on error + */ +QDF_STATUS +wma_vdev_nss_chain_params_send(uint8_t vdev_id, + struct wlan_mlme_nss_chains *user_cfg); + extern void wma_send_regdomain_info_to_fw(uint32_t reg_dmn, uint16_t regdmn2G, uint16_t regdmn5G, uint8_t ctl2G, uint8_t ctl5G); diff --git a/core/wma/src/wma_main.c b/core/wma/src/wma_main.c index ec3f34be49ba..421173d0fca7 100644 --- a/core/wma/src/wma_main.c +++ b/core/wma/src/wma_main.c @@ -1701,6 +1701,22 @@ static void wma_discard_fw_event(struct scheduler_msg *msg) msg->type = 0; } +QDF_STATUS +wma_vdev_nss_chain_params_send(uint8_t vdev_id, + struct wlan_mlme_nss_chains *user_cfg) +{ + tp_wma_handle wma_handle = cds_get_context(QDF_MODULE_ID_WMA); + + if (!wma_handle) { + WMA_LOGE("%s: wma_handle is NULL", __func__); + return QDF_STATUS_E_FAILURE; + } + + return wmi_unified_vdev_nss_chain_params_send(wma_handle->wmi_handle, + vdev_id, + user_cfg); +} + /** * wma_process_fw_event_handler() - common event handler to serialize * event processing through mc_thread