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;