diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index 882402d0ec..406217a32d 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -1717,6 +1717,25 @@ static inline void cdp_txrx_intr_detach(ol_txrx_soc_handle soc) soc->ops->cmn_drv_ops->txrx_intr_detach(soc); } +/** + * cdp_txrx_ppeds_stop(): function to stop ppeds + * @soc: soc handle + */ +static inline void cdp_txrx_ppeds_stop(ol_txrx_soc_handle soc) +{ + if (!soc || !soc->ops) { + dp_cdp_debug("Invalid Instance:"); + QDF_BUG(0); + return; + } + + if (!soc->ops->cmn_drv_ops || + !soc->ops->cmn_drv_ops->txrx_ppeds_stop) + return; + + soc->ops->cmn_drv_ops->txrx_ppeds_stop(soc); +} + /** * cdp_txrx_umac_reset_deinit(): De-initialize UMAC HW reset module * @soc: soc handle diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index c1efcb3bf6..6109eb911b 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -531,6 +531,7 @@ struct cdp_cmn_ops { QDF_STATUS (*txrx_intr_attach)(struct cdp_soc_t *soc_handle); void (*txrx_intr_detach)(struct cdp_soc_t *soc_handle); + void (*txrx_ppeds_stop)(struct cdp_soc_t *soc_handle); QDF_STATUS (*set_pn_check)(struct cdp_soc_t *soc_handle, uint8_t vdev_id, uint8_t *peermac, enum cdp_sec_type sec_type, diff --git a/dp/wifi3.0/be/dp_be.h b/dp/wifi3.0/be/dp_be.h index beb5476cb0..faa0e7e03d 100644 --- a/dp/wifi3.0/be/dp_be.h +++ b/dp/wifi3.0/be/dp_be.h @@ -309,7 +309,8 @@ struct dp_soc_be { struct dp_hw_cookie_conversion_t tx_cc_ctx[MAX_TXDESC_POOLS]; struct dp_hw_cookie_conversion_t rx_cc_ctx[MAX_RXDESC_POOLS]; #ifdef WLAN_SUPPORT_PPEDS - bool ppeds_int_mode_enabled; + uint8_t ppeds_int_mode_enabled:1, + ppeds_stopped:1; struct dp_srng reo2ppe_ring; struct dp_srng ppe2tcl_ring; struct dp_srng ppe_release_ring; diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 94257b02ce..7b15c36a6e 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -3481,6 +3481,20 @@ static inline bool dp_skip_rx_mon_ring_mask_set(struct dp_soc *soc) } #endif +/* + * dp_soc_ppeds_stop() - Stop PPE DS processing + * @txrx_soc: DP SOC handle + * + * Return: none + */ +static void dp_soc_ppeds_stop(struct cdp_soc_t *soc_handle) +{ + struct dp_soc *soc = (struct dp_soc *)soc_handle; + + if (soc->arch_ops.txrx_soc_ppeds_stop) + soc->arch_ops.txrx_soc_ppeds_stop(soc); +} + /* * dp_soc_interrupt_detach() - Deregister any allocations done for interrupts * @txrx_soc: DP SOC handle @@ -13969,6 +13983,7 @@ static struct cdp_cmn_ops dp_ops_cmn = { .display_stats = dp_txrx_dump_stats, .txrx_intr_attach = dp_soc_interrupt_attach_wrapper, .txrx_intr_detach = dp_soc_interrupt_detach, + .txrx_ppeds_stop = dp_soc_ppeds_stop, .set_pn_check = dp_set_pn_check_wifi3, .set_key_sec_type = dp_set_key_sec_type_wifi3, .update_config_parameters = dp_update_config_parameters,