From 16fd4201f926cd4c3c78c4d13c033c4070bcc571 Mon Sep 17 00:00:00 2001 From: Ashish Kumar Dhanotiya Date: Wed, 13 Mar 2019 21:12:31 +0530 Subject: [PATCH] qcacld-3.0: Add support to configure ito repeat count Currently there is no support to configure ito repeat count when driver enters into wow mode. Add support to configure ito repeat count with ini gItoRepeatCount when driver enters into wow mode. CRs-fixed: 2419137 Change-Id: I62d7e7df12342e9743c26e0147851347214a9ce7 --- components/pmo/core/src/wlan_pmo_main.c | 1 + .../pmo/core/src/wlan_pmo_suspend_resume.c | 21 +++++++++++++++++++ .../inc/wlan_pmo_common_public_struct.h | 4 ++++ .../pmo/src/target_if_pmo_suspend_resume.c | 3 +++ 4 files changed, 29 insertions(+) diff --git a/components/pmo/core/src/wlan_pmo_main.c b/components/pmo/core/src/wlan_pmo_main.c index fdf56824db98..b9304b28700a 100644 --- a/components/pmo/core/src/wlan_pmo_main.c +++ b/components/pmo/core/src/wlan_pmo_main.c @@ -209,6 +209,7 @@ static void wlan_pmo_init_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_ACTIVE_UC_APF_MODE); psoc_cfg->active_mc_bc_apf_mode = cfg_get(psoc, CFG_ACTIVE_MC_BC_APF_MODE); + psoc_cfg->ito_repeat_count = cfg_get(psoc, CFG_ITO_REPEAT_COUNT); wlan_pmo_ra_filtering_init_cfg(psoc, psoc_cfg); } diff --git a/components/pmo/core/src/wlan_pmo_suspend_resume.c b/components/pmo/core/src/wlan_pmo_suspend_resume.c index 1173183b65b4..4307a8d0cce2 100644 --- a/components/pmo/core/src/wlan_pmo_suspend_resume.c +++ b/components/pmo/core/src/wlan_pmo_suspend_resume.c @@ -170,6 +170,8 @@ static void pmo_configure_vdev_suspend_params( uint8_t vdev_id; enum QDF_OPMODE opmode = pmo_core_get_vdev_op_mode(vdev); struct pmo_psoc_cfg *psoc_cfg = &vdev_ctx->pmo_psoc_ctx->psoc_cfg; + uint8_t ito_repeat_count_value = 0; + uint32_t non_wow_inactivity_time, wow_inactivity_time; pmo_enter(); @@ -185,6 +187,25 @@ static void pmo_configure_vdev_suspend_params( vdev_id); } + non_wow_inactivity_time = psoc_cfg->ps_data_inactivity_timeout; + wow_inactivity_time = psoc_cfg->wow_data_inactivity_timeout; + /* + * To keep ito repeat count same in wow mode as in non wow mode, + * modulating ito repeat count value. + */ + ito_repeat_count_value = (non_wow_inactivity_time / + wow_inactivity_time) * + psoc_cfg->ito_repeat_count; + if (ito_repeat_count_value) + ret = pmo_tgt_vdev_update_param_req( + vdev, + pmo_vdev_param_ito_repeat_count, + psoc_cfg->wow_data_inactivity_timeout); + if (QDF_IS_STATUS_ERROR(ret)) { + pmo_err("Failed to Set ito repeat count vdevId %d", + vdev_id); + } + pmo_exit(); } diff --git a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h index b6c8863e30cd..9b65543e6255 100644 --- a/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h +++ b/components/pmo/dispatcher/inc/wlan_pmo_common_public_struct.h @@ -64,11 +64,13 @@ * @pmo_vdev_param_dtim_policy: vdev param dtim policy * @pmo_vdev_max_param: Max vdev param id * @pmo_vdev_param_inactivity_time: inactivity time value + * @pmo_vdev_param_ito_repeat_count: Indicates ito repeated count */ enum pmo_vdev_param_id { pmo_vdev_param_listen_interval = 0, pmo_vdev_param_dtim_policy, pmo_vdev_param_inactivity_time, + pmo_vdev_param_ito_repeat_count, pmo_vdev_max_param }; @@ -347,6 +349,7 @@ enum active_apf_mode { * mode for uc packets * @active_mc_bc_apf_mode: Setting that determines how APF is applied in * active mode for MC/BC packets + * @ito_repeat_count: Indicates ito repeated count */ struct pmo_psoc_cfg { bool ptrn_match_enable_all_vdev; @@ -408,6 +411,7 @@ struct pmo_psoc_cfg { uint8_t ps_data_inactivity_timeout; enum active_apf_mode active_uc_apf_mode; enum active_apf_mode active_mc_bc_apf_mode; + uint8_t ito_repeat_count; }; /** diff --git a/components/target_if/pmo/src/target_if_pmo_suspend_resume.c b/components/target_if/pmo/src/target_if_pmo_suspend_resume.c index e784b8abbf0c..e2c573be74d0 100644 --- a/components/target_if/pmo/src/target_if_pmo_suspend_resume.c +++ b/components/target_if/pmo/src/target_if_pmo_suspend_resume.c @@ -60,6 +60,9 @@ QDF_STATUS target_if_pmo_send_vdev_update_param_req( case pmo_vdev_param_inactivity_time: param_id = WMI_STA_PS_PARAM_INACTIVITY_TIME; break; + case pmo_vdev_param_ito_repeat_count: + param_id = WMI_STA_PS_PARAM_MAX_RESET_ITO_COUNT_ON_TIM_NO_TXRX; + break; default: target_if_err("invalid vdev param id %d", param_id); return QDF_STATUS_E_INVAL;