diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index b33e8a7b8c..6ffd543357 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -2664,7 +2664,10 @@ cdp_rx_get_pending(ol_txrx_soc_handle soc) !soc->ol_ops->dp_rx_get_pending) return 0; - return soc->ol_ops->dp_rx_get_pending(soc); + if (cdp_cfg_get(soc, cfg_dp_wow_check_rx_pending)) + return soc->ol_ops->dp_rx_get_pending(soc); + else + return 0; } #ifdef QCA_SUPPORT_WDS_EXTENDED diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 1cf1a01241..feaf6ea969 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -2345,6 +2345,7 @@ struct cdp_monitor_filter { * @cfg_dp_ce_classify_enable: get CE classify enable config * @cfg_dp_disable_intra_bss_fwd: get intra bss fwd config * @cfg_dp_pktlog_buffer_size: get packet log buffer size config + * @cfg_dp_wow_check_rx_pending: get wow rx pending frame check config */ enum cdp_dp_cfg { cfg_dp_enable_data_stall, @@ -2366,6 +2367,7 @@ enum cdp_dp_cfg { cfg_dp_ce_classify_enable, cfg_dp_disable_intra_bss_fwd, cfg_dp_pktlog_buffer_size, + cfg_dp_wow_check_rx_pending, }; /** diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index e34b880a89..6058b1668f 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -10637,6 +10637,8 @@ static uint32_t dp_get_cfg(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg) case cfg_dp_pktlog_buffer_size: value = dpsoc->wlan_cfg_ctx->pktlog_buffer_size; break; + case cfg_dp_wow_check_rx_pending: + value = dpsoc->wlan_cfg_ctx->wow_check_rx_pending_enable; default: value = 0; } diff --git a/wlan_cfg/cfg_dp.h b/wlan_cfg/cfg_dp.h index 65801c061a..e5e7dc49d0 100644 --- a/wlan_cfg/cfg_dp.h +++ b/wlan_cfg/cfg_dp.h @@ -1027,6 +1027,24 @@ #define CFG_DP_SWLM_ENABLE \ CFG_INI_BOOL("gEnableSWLM", false, \ "Enable/Disable DP SWLM") +/* + * + * wow_check_rx_pending_enable - control to check RX frames pending in Wow + * @Min: 0 + * @Max: 1 + * @Default: 0 + * + * This ini is used to control DP Software to perform RX pending check + * before entering WoW mode + * + * Usage: Internal + * + * + */ +#define CFG_DP_WOW_CHECK_RX_PENDING \ + CFG_INI_BOOL("wow_check_rx_pending_enable", \ + false, \ + "enable rx frame pending check in WoW mode") #define CFG_DP \ CFG(CFG_DP_HTT_PACKET_TYPE) \ @@ -1117,5 +1135,6 @@ CFG(CFG_DP_RX_FST_IN_CMEM) \ CFG(CFG_DP_RX_RADIO_0_DEFAULT_REO) \ CFG(CFG_DP_RX_RADIO_1_DEFAULT_REO) \ - CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) + CFG(CFG_DP_RX_RADIO_2_DEFAULT_REO) \ + CFG(CFG_DP_WOW_CHECK_RX_PENDING) #endif /* _CFG_DP_H_ */ diff --git a/wlan_cfg/wlan_cfg.c b/wlan_cfg/wlan_cfg.c index ed2da3a113..29f823cdf5 100644 --- a/wlan_cfg/wlan_cfg.c +++ b/wlan_cfg/wlan_cfg.c @@ -630,6 +630,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc) cfg_get(psoc, CFG_DP_RX_RADIO_1_DEFAULT_REO); wlan_cfg_ctx->radio2_rx_default_reo = cfg_get(psoc, CFG_DP_RX_RADIO_2_DEFAULT_REO); + wlan_cfg_ctx->wow_check_rx_pending_enable = + cfg_get(psoc, CFG_DP_WOW_CHECK_RX_PENDING); return wlan_cfg_ctx; } diff --git a/wlan_cfg/wlan_cfg.h b/wlan_cfg/wlan_cfg.h index f369f4e550..76629de1c7 100644 --- a/wlan_cfg/wlan_cfg.h +++ b/wlan_cfg/wlan_cfg.h @@ -191,6 +191,7 @@ struct wlan_srng_cfg { * @rx_pending_low_threshold: threshold of stopping pkt drop * @is_swlm_enabled: flag to enable/disable SWLM * @tx_per_pkt_vdev_id_check: Enable tx perpkt vdev id check + * @wow_check_rx_pending_enable: Enable RX frame pending check in WoW */ struct wlan_cfg_dp_soc_ctxt { int num_int_ctxts; @@ -306,6 +307,7 @@ struct wlan_cfg_dp_soc_ctxt { uint8_t radio0_rx_default_reo; uint8_t radio1_rx_default_reo; uint8_t radio2_rx_default_reo; + bool wow_check_rx_pending_enable; }; /**