|
@@ -3663,6 +3663,36 @@ static void ol_txrx_peer_unmap_sync_cb_set(
|
|
|
pdev->peer_unmap_sync_cb = peer_unmap_sync;
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * ol_txrx_peer_flush_frags() - Flush fragments for a particular peer
|
|
|
+ * @soc_hdl - datapath soc handle
|
|
|
+ * @vdev_id - virtual device id
|
|
|
+ * @peer_mac - peer mac address
|
|
|
+ *
|
|
|
+ * Return: None
|
|
|
+ */
|
|
|
+static void
|
|
|
+ol_txrx_peer_flush_frags(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
|
|
|
+ uint8_t *peer_mac)
|
|
|
+{
|
|
|
+ struct ol_txrx_peer_t *peer;
|
|
|
+ struct ol_txrx_soc_t *soc = cdp_soc_t_to_ol_txrx_soc_t(soc_hdl);
|
|
|
+ struct ol_txrx_pdev_t *pdev =
|
|
|
+ ol_txrx_get_pdev_from_pdev_id(soc, OL_TXRX_PDEV_ID);
|
|
|
+
|
|
|
+ if (!pdev)
|
|
|
+ return;
|
|
|
+
|
|
|
+ peer = ol_txrx_peer_find_hash_find_get_ref(pdev, peer_mac, 0, 1,
|
|
|
+ PEER_DEBUG_ID_OL_INTERNAL);
|
|
|
+ if (!peer)
|
|
|
+ return;
|
|
|
+
|
|
|
+ ol_rx_reorder_peer_cleanup(peer->vdev, peer);
|
|
|
+
|
|
|
+ ol_txrx_peer_release_ref(peer, PEER_DEBUG_ID_OL_INTERNAL);
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* ol_txrx_dump_tx_desc() - dump tx desc total and free count
|
|
|
* @txrx_pdev: Pointer to txrx pdev
|
|
@@ -6278,6 +6308,7 @@ static struct cdp_peer_ops ol_ops_peer = {
|
|
|
.set_peer_as_tdls_peer = ol_txrx_set_peer_as_tdls_peer,
|
|
|
#endif /* CONFIG_HL_SUPPORT */
|
|
|
.peer_detach_force_delete = ol_txrx_peer_detach_force_delete,
|
|
|
+ .peer_flush_frags = ol_txrx_peer_flush_frags,
|
|
|
};
|
|
|
|
|
|
static struct cdp_tx_delay_ops ol_ops_delay = {
|