|
@@ -935,6 +935,35 @@ static void dp_wds_flush_ast_table_wifi3(struct cdp_soc_t *soc_hdl)
|
|
dp_peer_mec_flush_entries(soc);
|
|
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
|
|
* dp_peer_get_ast_info_by_soc_wifi3() - search the soc AST hash table
|
|
* and return ast entry information
|
|
* 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);
|
|
dp_peer_update_state(soc, peer, DP_PEER_STATE_LOGICAL_DELETE);
|
|
|
|
|
|
qdf_spin_lock_bh(&soc->ast_lock);
|
|
qdf_spin_lock_bh(&soc->ast_lock);
|
|
|
|
+ dp_peer_send_wds_disconnect(soc, peer);
|
|
dp_peer_delete_ast_entries(soc, peer);
|
|
dp_peer_delete_ast_entries(soc, peer);
|
|
qdf_spin_unlock_bh(&soc->ast_lock);
|
|
qdf_spin_unlock_bh(&soc->ast_lock);
|
|
|
|
|