diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 0688b43746..8ba05ace1d 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -1468,6 +1468,10 @@ struct ol_if_ops { uint8_t vdev_id, struct ol_txrx_hardtart_ctxt *ctxt); #endif +#if defined(IPA_WDS_EASYMESH_FEATURE) && defined(FEATURE_AST) +void (*peer_send_wds_disconnect)(struct cdp_ctrl_objmgr_psoc *psoc, + uint8_t *mac_addr, uint8_t vdev_id); +#endif }; #ifdef DP_PEER_EXTENDED_API diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 8a4c53f0a7..f77b0e17f5 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -935,6 +935,35 @@ static void dp_wds_flush_ast_table_wifi3(struct cdp_soc_t *soc_hdl) dp_peer_mec_flush_entries(soc); } +#if defined(IPA_WDS_EASYMESH_FEATURE) && defined(FEATURE_AST) +/* + * dp_peer_send_wds_disconnect() - Send Disconnect event to IPA for each peer + * @soc: Datapath SOC + * @peer: Datapath peer + * + * Return: None + */ +static void +dp_peer_send_wds_disconnect(struct dp_soc *soc, struct dp_peer *peer) +{ + struct dp_ast_entry *ase = NULL; + struct dp_ast_entry *temp_ase; + + DP_PEER_ITERATE_ASE_LIST(peer, ase, temp_ase) { + if (ase->type == CDP_TXRX_AST_TYPE_WDS) { + soc->cdp_soc.ol_ops->peer_send_wds_disconnect(soc->ctrl_psoc, + ase->mac_addr.raw, + ase->vdev_id); + } + } +} +#elif defined(FEATURE_AST) +static void +dp_peer_send_wds_disconnect(struct dp_soc *soc, struct dp_peer *peer) +{ +} +#endif + /** * dp_peer_get_ast_info_by_soc_wifi3() - search the soc AST hash table * and return ast entry information @@ -12485,6 +12514,7 @@ dp_peer_teardown_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id, dp_peer_update_state(soc, peer, DP_PEER_STATE_LOGICAL_DELETE); qdf_spin_lock_bh(&soc->ast_lock); + dp_peer_send_wds_disconnect(soc, peer); dp_peer_delete_ast_entries(soc, peer); qdf_spin_unlock_bh(&soc->ast_lock);