diff --git a/fw_offload/core/inc/wlan_fw_offload_main.h b/fw_offload/core/inc/wlan_fw_offload_main.h index 84bc8eba7e..824afa37ca 100644 --- a/fw_offload/core/inc/wlan_fw_offload_main.h +++ b/fw_offload/core/inc/wlan_fw_offload_main.h @@ -158,6 +158,7 @@ struct wlan_fwol_neighbor_report_cfg { * @enable_fw_module_log_level_num: enablefw module log level num * @is_rate_limit_enabled: Enable/disable RA rate limited * @tsf_gpio_pin: TSF GPIO Pin config + * @tsf_irq_host_gpio_pin: TSF GPIO Pin config * @tsf_ptp_options: TSF Plus feature options config * @lprx_enable: LPRx feature enable config * @sae_enable: SAE feature enable config @@ -196,6 +197,9 @@ struct wlan_fwol_cfg { uint32_t tsf_gpio_pin; #ifdef WLAN_FEATURE_TSF_PLUS uint32_t tsf_ptp_options; +#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ + uint32_t tsf_irq_host_gpio_pin; +#endif #endif #endif bool lprx_enable; diff --git a/fw_offload/core/src/wlan_fw_offload_main.c b/fw_offload/core/src/wlan_fw_offload_main.c index 860789eef3..4a1305fc84 100644 --- a/fw_offload/core/src/wlan_fw_offload_main.c +++ b/fw_offload/core/src/wlan_fw_offload_main.c @@ -356,6 +356,32 @@ static void ucfg_fwol_init_tsf_ptp_options(struct wlan_objmgr_psoc *psoc, } #endif +#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ +/** + * ucfg_fwol_fetch_tsf_irq_host_gpio_pin: Populate the + * tsf_irq_host_gpio_pin from cfg + * @psoc: The global psoc handler + * @fwol_cfg: The cfg structure + * + * This function is used to populate the cfg value of host platform + * gpio pin configured to receive tsf interrupt from fw. + * + * Return: none + */ +static void +ucfg_fwol_fetch_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_cfg *fwol_cfg) +{ + fwol_cfg->tsf_irq_host_gpio_pin = + cfg_get(psoc, CFG_SET_TSF_IRQ_HOST_GPIO_PIN); +} +#else +static void +ucfg_fwol_fetch_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc, + struct wlan_fwol_cfg *fwol_cfg) +{ +} +#endif /** * ucfg_fwol_init_sae_cfg: Populate the sae control config from cfg * @psoc: The global psoc handler @@ -448,6 +474,7 @@ QDF_STATUS fwol_cfg_on_psoc_enable(struct wlan_objmgr_psoc *psoc) fwol_init_adapt_dwelltime_in_cfg(psoc, &fwol_cfg->dwelltime_params); ucfg_fwol_fetch_ra_filter(psoc, fwol_cfg); ucfg_fwol_fetch_tsf_gpio_pin(psoc, fwol_cfg); + ucfg_fwol_fetch_tsf_irq_host_gpio_pin(psoc, fwol_cfg); ucfg_fwol_fetch_dhcp_server_settings(psoc, fwol_cfg); return status; diff --git a/fw_offload/dispatcher/inc/cfg_fwol_generic.h b/fw_offload/dispatcher/inc/cfg_fwol_generic.h index b37bf19ac3..d090008d14 100644 --- a/fw_offload/dispatcher/inc/cfg_fwol_generic.h +++ b/fw_offload/dispatcher/inc/cfg_fwol_generic.h @@ -434,6 +434,34 @@ CFG_VALUE_OR_DEFAULT, \ "GPIO pin to toggle when capture tsf") +#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ +/* + * gtsf_irq_host_gpio_pin + * @Min: 0 + * @Max: 254 + * @Default: 255 + * + * TSF irq GPIO pin of host platform + * + * Related: None + * + * Usage: Internal + * + * + */ +#define CFG_SET_TSF_IRQ_HOST_GPIO_PIN CFG_INI_INT( \ + "gtsf_irq_host_gpio_pin", \ + 0, \ + 254, \ + 255, \ + CFG_VALUE_OR_DEFAULT, \ + "TSF irq GPIO pin of host platform") + +#define __CFG_SET_TSF_IRQ_HOST_GPIO_PIN CFG(CFG_SET_TSF_IRQ_HOST_GPIO_PIN) +#else +#define __CFG_SET_TSF_IRQ_HOST_GPIO_PIN +#endif + #if defined(WLAN_FEATURE_TSF) && defined(WLAN_FEATURE_TSF_PLUS) /* * gtsf_ptp_options: TSF Plus feature options @@ -464,6 +492,7 @@ 0xf, \ CFG_VALUE_OR_DEFAULT, \ "TSF Plus feature options") + #define __CFG_SET_TSF_PTP_OPT CFG(CFG_SET_TSF_PTP_OPT) #else #define __CFG_SET_TSF_PTP_OPT @@ -655,6 +684,7 @@ CFG(CFG_ENABLE_FW_MODULE_LOG_LEVEL) \ CFG(CFG_RA_FILTER_ENABLE) \ CFG(CFG_SET_TSF_GPIO_PIN) \ + __CFG_SET_TSF_IRQ_HOST_GPIO_PIN \ __CFG_SET_TSF_PTP_OPT \ CFG(CFG_LPRX) \ __CFG_IS_SAE_ENABLED \ diff --git a/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h b/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h index a29a1615bc..32b14db4e7 100644 --- a/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h +++ b/fw_offload/dispatcher/inc/wlan_fwol_ucfg_api.h @@ -304,6 +304,19 @@ QDF_STATUS ucfg_fwol_get_is_rate_limit_enabled(struct wlan_objmgr_psoc *psoc, QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc, uint32_t *tsf_gpio_pin); +#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ +/** + * ucfg_fwol_get_tsf_irq_host_gpio_pin() - Assigns tsf_irq_host_gpio_pin value + * @psoc: pointer to the psoc object + * + * Return: QDF Status + */ + +QDF_STATUS +ucfg_fwol_get_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc, + uint32_t *tsf_irq_host_gpio_pin); +#endif + #ifdef DHCP_SERVER_OFFLOAD /** * ucfg_fwol_get_enable_dhcp_server_offload()-Assign enable_dhcp_server_offload diff --git a/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c b/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c index ed270b684f..fc7f59ab05 100644 --- a/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c +++ b/fw_offload/dispatcher/src/wlan_fwol_ucfg_api.c @@ -558,6 +558,27 @@ QDF_STATUS ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc *psoc, *tsf_ptp_options = fwol_obj->cfg.tsf_ptp_options; return QDF_STATUS_SUCCESS; } + +#ifdef WLAN_FEATURE_TSF_PLUS_EXT_GPIO_IRQ +QDF_STATUS +ucfg_fwol_get_tsf_irq_host_gpio_pin(struct wlan_objmgr_psoc *psoc, + uint32_t *tsf_irq_host_gpio_pin) +{ + struct wlan_fwol_psoc_obj *fwol_obj; + + fwol_obj = fwol_get_psoc_obj(psoc); + if (!fwol_obj) { + fwol_err("Failed to get FWOL obj"); + *tsf_irq_host_gpio_pin = + cfg_default(CFG_SET_TSF_IRQ_HOST_GPIO_PIN); + return QDF_STATUS_E_FAILURE; + } + + *tsf_irq_host_gpio_pin = fwol_obj->cfg.tsf_irq_host_gpio_pin; + return QDF_STATUS_SUCCESS; +} + +#endif #endif #else QDF_STATUS ucfg_fwol_get_tsf_gpio_pin(struct wlan_objmgr_psoc *psoc, @@ -571,6 +592,7 @@ QDF_STATUS ucfg_fwol_get_tsf_ptp_options(struct wlan_objmgr_psoc *psoc, { return QDF_STATUS_E_NOSUPPORT; } + #endif QDF_STATUS ucfg_fwol_get_lprx_enable(struct wlan_objmgr_psoc *psoc, @@ -594,6 +616,7 @@ bool ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc *psoc) { return cfg_get(psoc, CFG_IS_SAE_ENABLED); } + #else bool ucfg_fwol_get_sae_enable(struct wlan_objmgr_psoc *psoc) {