diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index c6bf5322be32..8f151eefa33f 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -341,6 +341,34 @@ QDF_STATUS policy_mgr_get_chnl_select_plcy(struct wlan_objmgr_psoc *psoc, QDF_STATUS policy_mgr_set_ch_select_plcy(struct wlan_objmgr_psoc *psoc, uint32_t ch_select_policy); +/** + * policy_mgr_get_dynamic_mcc_adaptive_sch() - to get dynamic mcc adaptive + * scheduler + * @psoc: pointer to psoc + * @dynamic_mcc_adaptive_sched: value to be filled + * + * This API is used to get dynamic mcc adaptive scheduler + * + * Return: QDF_STATUS_SUCCESS up on success and any other status for failure. + */ +QDF_STATUS policy_mgr_get_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool *dynamic_mcc_adaptive_sched); + +/** + * policy_mgr_set_dynamic_mcc_adaptive_sch() - to set dynamic mcc adaptive + * scheduler + * @psoc: pointer to psoc + * @dynamic_mcc_adaptive_sched: value to be set + * + * This API is used to set dynamic mcc adaptive scheduler + * + * Return: QDF_STATUS_SUCCESS up on success and any other status for failure. + */ +QDF_STATUS policy_mgr_set_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool dynamic_mcc_adaptive_sched); + /** * policy_mgr_get_mcc_adaptive_sch() - to get mcc adaptive scheduler * @psoc: pointer to psoc diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h index 3b7280b5fe99..dd4682377539 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h +++ b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ucfg.h @@ -134,6 +134,34 @@ QDF_STATUS ucfg_policy_mgr_get_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc, uint8_t *enable_mcc_adaptive_sch); +/** + * ucfg_policy_mgr_get_dynamic_mcc_adaptive_sch() - to get dynamic mcc adaptive + * scheduler + * @psoc: pointer to psoc + * @dynamic_mcc_adaptive_sch: value to be filled + * + * This API is used to get dynamic mcc adaptive scheduler + * + * Return: QDF_STATUS_SUCCESS up on success and any other status for failure. + */ +QDF_STATUS +ucfg_policy_mgr_get_dynamic_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc, + bool *dynamic_mcc_adaptive_sch); + +/** + * ucfg_policy_mgr_set_dynamic_mcc_adaptive_sch() - to set dynamic mcc adaptive + * scheduler + * @psoc: pointer to psoc + * @dynamic_mcc_adaptive_sch: value to be set + * + * This API is used to set dynamic mcc adaptive scheduler + * + * Return: QDF_STATUS_SUCCESS up on success and any other status for failure. + */ +QDF_STATUS +ucfg_policy_mgr_set_dynamic_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc, + bool dynamic_mcc_adaptive_sch); + /** * ucfg_policy_mgr_get_sta_cxn_5g_band() - to get STA's connection in 5G config * diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c index c2248c5a674a..ff5ba29943c9 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_get_set_utils.c @@ -340,6 +340,38 @@ QDF_STATUS policy_mgr_set_ch_select_plcy(struct wlan_objmgr_psoc *psoc, return QDF_STATUS_SUCCESS; } +QDF_STATUS policy_mgr_set_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool dynamic_mcc_adaptive_sched) +{ + struct policy_mgr_psoc_priv_obj *pm_ctx; + + pm_ctx = policy_mgr_get_context(psoc); + if (!pm_ctx) { + policy_mgr_err("pm_ctx is NULL"); + return QDF_STATUS_E_FAILURE; + } + pm_ctx->dynamic_mcc_adaptive_sched = dynamic_mcc_adaptive_sched; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS policy_mgr_get_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool *dynamic_mcc_adaptive_sched) +{ + struct policy_mgr_psoc_priv_obj *pm_ctx; + + pm_ctx = policy_mgr_get_context(psoc); + if (!pm_ctx) { + policy_mgr_err("pm_ctx is NULL"); + return QDF_STATUS_E_FAILURE; + } + *dynamic_mcc_adaptive_sched = pm_ctx->dynamic_mcc_adaptive_sched; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS policy_mgr_get_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc, uint8_t *enable_mcc_adaptive_sch) { diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h index 3ccb32f19887..9c1f7f4ad694 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h @@ -332,6 +332,7 @@ struct policy_mgr_cfg { * @mode_change_cb: Mode change callback * @user_config_sap_ch_freq: SAP channel freq configured by user application * @cfg: Policy manager config data + * @dynamic_mcc_adaptive_sched: disable/enable mcc adaptive scheduler feature */ struct policy_mgr_psoc_priv_obj { struct wlan_objmgr_psoc *psoc; @@ -372,6 +373,7 @@ struct policy_mgr_psoc_priv_obj { struct policy_mgr_cfg cfg; uint32_t valid_ch_freq_list[NUM_CHANNELS]; uint32_t valid_ch_freq_list_count; + bool dynamic_mcc_adaptive_sched; }; /** diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c index 2f925972631d..ea6240c69952 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_init_deinit.c @@ -410,6 +410,7 @@ QDF_STATUS policy_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc) { QDF_STATUS status; struct policy_mgr_psoc_priv_obj *pm_ctx; + uint8_t enable_mcc_adaptive_sch = 0; pm_ctx = policy_mgr_get_context(psoc); if (!pm_ctx) { @@ -450,6 +451,8 @@ QDF_STATUS policy_mgr_psoc_enable(struct wlan_objmgr_psoc *psoc) policy_mgr_err("channel_switch_complete_evt init failed"); return status; } + policy_mgr_get_mcc_adaptive_sch(psoc, &enable_mcc_adaptive_sch); + policy_mgr_set_dynamic_mcc_adaptive_sch(psoc, enable_mcc_adaptive_sch); pm_ctx->do_hw_mode_change = false; pm_ctx->hw_mode_change_in_progress = POLICY_MGR_HW_MODE_NOT_IN_PROGRESS; /* reset sap mandatory channels */ diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c index e285d395ef4f..9028f809b112 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ucfg.c @@ -145,6 +145,22 @@ QDF_STATUS ucfg_policy_mgr_get_chnl_select_plcy(struct wlan_objmgr_psoc *psoc, } +QDF_STATUS ucfg_policy_mgr_set_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool dynamic_mcc_adaptive_sch) +{ + return policy_mgr_set_dynamic_mcc_adaptive_sch( + psoc, dynamic_mcc_adaptive_sch); +} + +QDF_STATUS ucfg_policy_mgr_get_dynamic_mcc_adaptive_sch( + struct wlan_objmgr_psoc *psoc, + bool *dynamic_mcc_adaptive_sch) +{ + return policy_mgr_get_dynamic_mcc_adaptive_sch( + psoc, dynamic_mcc_adaptive_sch); +} + QDF_STATUS ucfg_policy_mgr_get_mcc_adaptive_sch(struct wlan_objmgr_psoc *psoc, uint8_t *mcc_adaptive_sch) { diff --git a/core/hdd/src/wlan_hdd_p2p.c b/core/hdd/src/wlan_hdd_p2p.c index a703c5d0565e..cbdbadca383a 100644 --- a/core/hdd/src/wlan_hdd_p2p.c +++ b/core/hdd/src/wlan_hdd_p2p.c @@ -1157,43 +1157,6 @@ int wlan_hdd_set_power_save(struct hdd_adapter *adapter, return qdf_status_to_os_return(status); } -/** - * wlan_hdd_update_mcc_adaptive_scheduler() - Function to update - * MAS value to FW - * @adapter: adapter object data - * @is_enable: 0-Disable, 1-Enable MAS - * - * This function passes down the value of MAS to UMAC - * - * Return: 0 for success else non zero - * - */ -static int32_t wlan_hdd_update_mcc_adaptive_scheduler( - struct hdd_adapter *adapter, bool is_enable) -{ - struct hdd_context *hdd_ctx = WLAN_HDD_GET_CTX(adapter); - uint8_t enable_mcc_adaptive_sch = 0; - - if (!hdd_ctx) { - hdd_err("HDD context is null"); - return -EINVAL; - } - - hdd_info("enable/disable MAS :%d", is_enable); - ucfg_policy_mgr_get_mcc_adaptive_sch(hdd_ctx->psoc, - &enable_mcc_adaptive_sch); - if (enable_mcc_adaptive_sch) { - /* Todo check where to set the MCC apative SCHED for read */ - - if (QDF_STATUS_SUCCESS != sme_set_mas(is_enable)) { - hdd_err("Failed to enable/disable MAS"); - return -EAGAIN; - } - } - - return 0; -} - /** * wlan_hdd_update_mcc_p2p_quota() - Function to Update P2P * quota to FW @@ -1233,20 +1196,32 @@ static void wlan_hdd_update_mcc_p2p_quota(struct hdd_adapter *adapter, int32_t wlan_hdd_set_mas(struct hdd_adapter *adapter, uint8_t mas_value) { - int32_t ret = 0; + struct hdd_context *hdd_ctx; + uint8_t enable_mcc_adaptive_sch = 0; if (!adapter) { hdd_err("Adapter is NULL"); return -EINVAL; } + hdd_ctx = WLAN_HDD_GET_CTX(adapter); + if (!hdd_ctx) { + hdd_err("HDD context is null"); + return -EINVAL; + } + if (mas_value) { hdd_info("Miracast is ON. Disable MAS and configure P2P quota"); - ret = wlan_hdd_update_mcc_adaptive_scheduler( - adapter, false); - if (0 != ret) { - hdd_err("Failed to disable MAS"); - goto done; + ucfg_policy_mgr_get_mcc_adaptive_sch(hdd_ctx->psoc, + &enable_mcc_adaptive_sch); + if (enable_mcc_adaptive_sch) { + ucfg_policy_mgr_set_dynamic_mcc_adaptive_sch( + hdd_ctx->psoc, false); + + if (QDF_STATUS_SUCCESS != sme_set_mas(false)) { + hdd_err("Failed to disable MAS"); + return -EAGAIN; + } } /* Config p2p quota */ @@ -1255,16 +1230,20 @@ int32_t wlan_hdd_set_mas(struct hdd_adapter *adapter, uint8_t mas_value) hdd_info("Miracast is OFF. Enable MAS and reset P2P quota"); wlan_hdd_update_mcc_p2p_quota(adapter, false); - ret = wlan_hdd_update_mcc_adaptive_scheduler( - adapter, true); - if (0 != ret) { - hdd_err("Failed to enable MAS"); - goto done; + ucfg_policy_mgr_get_mcc_adaptive_sch(hdd_ctx->psoc, + &enable_mcc_adaptive_sch); + if (enable_mcc_adaptive_sch) { + ucfg_policy_mgr_set_dynamic_mcc_adaptive_sch( + hdd_ctx->psoc, true); + + if (QDF_STATUS_SUCCESS != sme_set_mas(true)) { + hdd_err("Failed to enable MAS"); + return -EAGAIN; + } } } -done: - return ret; + return 0; } /** diff --git a/core/wma/src/wma_data.c b/core/wma/src/wma_data.c index 93f690d0734e..a0e3c0357f3e 100644 --- a/core/wma/src/wma_data.c +++ b/core/wma/src/wma_data.c @@ -1112,7 +1112,7 @@ QDF_STATUS wma_set_enable_disable_mcc_adaptive_scheduler(uint32_t QDF_STATUS wma_set_mcc_channel_time_latency(tp_wma_handle wma, uint32_t mcc_channel, uint32_t mcc_channel_time_latency) { - uint8_t mcc_adapt_sch = 0; + bool mcc_adapt_sch = false; struct mac_context *mac = NULL; uint32_t channel1 = mcc_channel; uint32_t chan1_freq = cds_chan_to_freq(channel1); @@ -1135,11 +1135,10 @@ QDF_STATUS wma_set_mcc_channel_time_latency(tp_wma_handle wma, return QDF_STATUS_E_FAILURE; } /* Confirm MCC adaptive scheduler feature is disabled */ - if (policy_mgr_get_mcc_adaptive_sch(mac->psoc, - &mcc_adapt_sch) == + if (policy_mgr_get_dynamic_mcc_adaptive_sch(mac->psoc, + &mcc_adapt_sch) == QDF_STATUS_SUCCESS) { - if (mcc_adapt_sch == - cfg_max(CFG_ENABLE_MCC_ADAPTIVE_SCH_ENABLED_NAME)) { + if (mcc_adapt_sch) { WMA_LOGD("%s: Can't set channel latency while MCC ADAPTIVE SCHED is enabled. Exit", __func__); return QDF_STATUS_SUCCESS; @@ -1176,7 +1175,7 @@ QDF_STATUS wma_set_mcc_channel_time_quota(tp_wma_handle wma, uint32_t adapter_1_chan_number, uint32_t adapter_1_quota, uint32_t adapter_2_chan_number) { - uint8_t mcc_adapt_sch = 0; + bool mcc_adapt_sch = false; struct mac_context *mac = NULL; uint32_t chan1_freq = cds_chan_to_freq(adapter_1_chan_number); uint32_t chan2_freq = cds_chan_to_freq(adapter_2_chan_number); @@ -1200,11 +1199,10 @@ QDF_STATUS wma_set_mcc_channel_time_quota(tp_wma_handle wma, } /* Confirm MCC adaptive scheduler feature is disabled */ - if (policy_mgr_get_mcc_adaptive_sch(mac->psoc, - &mcc_adapt_sch) == + if (policy_mgr_get_dynamic_mcc_adaptive_sch(mac->psoc, + &mcc_adapt_sch) == QDF_STATUS_SUCCESS) { - if (mcc_adapt_sch == - cfg_max(CFG_ENABLE_MCC_ADAPTIVE_SCH_ENABLED_NAME)) { + if (mcc_adapt_sch) { WMA_LOGD("%s: Can't set channel quota while MCC_ADAPTIVE_SCHED is enabled. Exit", __func__); return QDF_STATUS_SUCCESS; diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c index 683351507a95..15e393bba688 100644 --- a/core/wma/src/wma_dev_if.c +++ b/core/wma/src/wma_dev_if.c @@ -2447,7 +2447,7 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev) QDF_STATUS status = QDF_STATUS_SUCCESS; struct mac_context *mac = cds_get_context(QDF_MODULE_ID_PE); uint32_t cfg_val; - uint8_t mcc_adapt_sch; + bool mcc_adapt_sch = false; QDF_STATUS ret; struct mlme_ht_capabilities_info *ht_cap_info; u_int8_t vdev_id; @@ -2679,8 +2679,8 @@ QDF_STATUS wma_post_vdev_create_setup(struct wlan_objmgr_vdev *vdev) mac->mlme_cfg->lfr.roam_bmiss_final_bcnt, vdev_id); - if (policy_mgr_get_mcc_adaptive_sch(mac->psoc, - &mcc_adapt_sch) == + if (policy_mgr_get_dynamic_mcc_adaptive_sch(mac->psoc, + &mcc_adapt_sch) == QDF_STATUS_SUCCESS) { WMA_LOGD("%s: setting ini value for WNI_CFG_ENABLE_MCC_ADAPTIVE_SCHED: %d", __func__, mcc_adapt_sch);