diff --git a/mlme/core/src/wlan_mlme_main.c b/mlme/core/src/wlan_mlme_main.c index b9a30f2ccd..91729344a4 100644 --- a/mlme/core/src/wlan_mlme_main.c +++ b/mlme/core/src/wlan_mlme_main.c @@ -585,6 +585,8 @@ static void mlme_init_timeout_cfg(struct wlan_objmgr_psoc *psoc, cfg_get(psoc, CFG_AP_LINK_MONITOR_TIMEOUT); timeouts->ps_data_inactivity_timeout = cfg_get(psoc, CFG_PS_DATA_INACTIVITY_TIMEOUT); + timeouts->wmi_wq_watchdog_timeout = + cfg_get(psoc, CFG_WMI_WQ_WATCHDOG); } static void mlme_init_ht_cap_in_cfg(struct wlan_objmgr_psoc *psoc, diff --git a/mlme/dispatcher/inc/cfg_mlme_timeout.h b/mlme/dispatcher/inc/cfg_mlme_timeout.h index 7caed90aa9..0c23fe3575 100644 --- a/mlme/dispatcher/inc/cfg_mlme_timeout.h +++ b/mlme/dispatcher/inc/cfg_mlme_timeout.h @@ -285,6 +285,32 @@ CFG_VALUE_OR_DEFAULT, \ "PS data inactivity timeout") +/* + * + * wmi_wq_watchdog - Sets timeout period for wmi watchdog bite. + * @Min: 0 + * @Max: 30 + * @Default: 20 + * + * This ini is used to set timeout period for wmi watchdog bite. If it is + * 0 then wmi watchdog bite is disabled. + * + * Related: None + * + * Supported Feature: STA + * + * Usage: External + * + * + */ +#define CFG_WMI_WQ_WATCHDOG CFG_INI_UINT( \ + "wmi_wq_watchdog", \ + 0, \ + 30, \ + 20, \ + CFG_VALUE_OR_DEFAULT, \ + "timeout period for wmi watchdog bite") + #define CFG_TIMEOUT_ALL \ CFG(CFG_JOIN_FAILURE_TIMEOUT) \ CFG(CFG_AUTH_FAILURE_TIMEOUT) \ @@ -297,6 +323,7 @@ CFG(CFG_HEART_BEAT_THRESHOLD) \ CFG(CFG_AP_KEEP_ALIVE_TIMEOUT) \ CFG(CFG_AP_LINK_MONITOR_TIMEOUT) \ + CFG(CFG_WMI_WQ_WATCHDOG) \ CFG(CFG_PS_DATA_INACTIVITY_TIMEOUT) #endif /* __CFG_MLME_TIMEOUT_H */ diff --git a/mlme/dispatcher/inc/wlan_mlme_public_struct.h b/mlme/dispatcher/inc/wlan_mlme_public_struct.h index e3cb559f26..09a9abb1e7 100644 --- a/mlme/dispatcher/inc/wlan_mlme_public_struct.h +++ b/mlme/dispatcher/inc/wlan_mlme_public_struct.h @@ -1568,6 +1568,7 @@ struct wlan_mlme_power { * @ap_keep_alive_timeout: AP keep alive timeout value * @ap_link_monitor_timeout: AP link monitor timeout value * @ps_data_inactivity_timeout: PS data inactivity timeout + * @wmi_wq_watchdog_timeout: timeout period for wmi watchdog bite */ struct wlan_mlme_timeout { uint32_t join_failure_timeout; @@ -1582,6 +1583,7 @@ struct wlan_mlme_timeout { uint32_t ap_keep_alive_timeout; uint32_t ap_link_monitor_timeout; uint32_t ps_data_inactivity_timeout; + uint32_t wmi_wq_watchdog_timeout; }; /** diff --git a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h index 7041c01c0b..5a388432ac 100644 --- a/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h +++ b/mlme/dispatcher/inc/wlan_mlme_ucfg_api.h @@ -1203,6 +1203,28 @@ QDF_STATUS ucfg_mlme_set_fast_roam_in_concurrency_enabled(struct wlan_objmgr_psoc *psoc, bool val); +/** + * ucfg_mlme_get_wmi_wq_watchdog_timeout() - Get timeout for wmi watchdog bite + * @psoc: pointer to psoc object + * @wmi_wq_watchdog_timeout: buffer to hold value + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_get_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc, + uint32_t *wmi_wq_watchdog_timeout); + +/** + * ucfg_mlme_set_wmi_wq_watchdog_timeout() - Set timeout for wmi watchdog bite + * @psoc: pointer to psoc object + * @wmi_wq_watchdog_timeout: value to be set + * + * Return: QDF Status + */ +QDF_STATUS +ucfg_mlme_set_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc, + uint32_t wmi_wq_watchdog_timeout); + /** * ucfg_mlme_get_ps_data_inactivity_timeout() - Get data inactivity timeout * @psoc: pointer to psoc object diff --git a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c index abe96955e6..268c68fdec 100644 --- a/mlme/dispatcher/src/wlan_mlme_ucfg_api.c +++ b/mlme/dispatcher/src/wlan_mlme_ucfg_api.c @@ -1118,6 +1118,49 @@ ucfg_mlme_get_current_mcs_set(struct wlan_objmgr_psoc *psoc, len); } +QDF_STATUS +ucfg_mlme_get_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc, + uint32_t *wmi_wq_watchdog_timeout) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + *wmi_wq_watchdog_timeout = cfg_default(CFG_WMI_WQ_WATCHDOG); + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + *wmi_wq_watchdog_timeout = + mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout; + + return QDF_STATUS_SUCCESS; +} + +QDF_STATUS +ucfg_mlme_set_wmi_wq_watchdog_timeout(struct wlan_objmgr_psoc *psoc, + uint32_t wmi_wq_watchdog_timeout) +{ + struct wlan_mlme_psoc_obj *mlme_obj; + + mlme_obj = mlme_get_psoc_obj(psoc); + if (!mlme_obj) { + mlme_err("mlme obj null"); + return QDF_STATUS_E_INVAL; + } + + if (!cfg_in_range(CFG_WMI_WQ_WATCHDOG, wmi_wq_watchdog_timeout)) { + mlme_err("wmi watchdog bite timeout is invalid %d", + wmi_wq_watchdog_timeout); + return QDF_STATUS_E_INVAL; + } + + mlme_obj->cfg.timeouts.wmi_wq_watchdog_timeout = + wmi_wq_watchdog_timeout; + + return QDF_STATUS_SUCCESS; +} + QDF_STATUS ucfg_mlme_get_ps_data_inactivity_timeout(struct wlan_objmgr_psoc *psoc, uint32_t *inactivity_timeout)