Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 240d85ee authored by Yeshwanth Sriram Guntuka's avatar Yeshwanth Sriram Guntuka Committed by Madan Koyyalamudi
Browse files

qcacmn: Register API to flush frags in dp peer ops

Register dp_peer_flush_frags API in dp peer ops
for flushing fragments for a particular peer.

Change-Id: Ia179d3160bdc306ec965c465134042c66a0c40a6
CRs-Fixed: 2874366
parent 256ded39
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -2728,4 +2728,15 @@ static inline QDF_STATUS dp_runtime_init(struct dp_soc *soc)
}
#endif

/**
 * dp_peer_flush_frags() - Flush all fragments for a particular
 *  peer
 * @soc_hdl - data path soc handle
 * @vdev_id - vdev id
 * @peer_addr - peer mac address
 *
 * Return: None
 */
void dp_peer_flush_frags(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
			 uint8_t *peer_mac);
#endif /* #ifndef _DP_INTERNAL_H_ */
+1 −0
Original line number Diff line number Diff line
@@ -12073,6 +12073,7 @@ static struct cdp_peer_ops dp_ops_peer = {
	.get_vdev_by_peer_addr = dp_get_vdev_by_peer_addr,
	.peer_get_peer_mac_addr = dp_peer_get_peer_mac_addr,
	.get_peer_state = dp_get_peer_state,
	.peer_flush_frags = dp_peer_flush_frags,
};
#endif

+27 −0
Original line number Diff line number Diff line
@@ -4503,3 +4503,30 @@ void dp_get_rx_reo_queue_info(
		dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_GENERIC_STATS);
}
#endif /* DUMP_REO_QUEUE_INFO_IN_DDR */

void dp_peer_flush_frags(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
			 uint8_t *peer_mac)
{
	struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
	struct dp_peer *peer = dp_peer_find_hash_find(soc, peer_mac, 0,
						      vdev_id, DP_MOD_ID_CDP);
	struct dp_rx_tid *rx_tid;
	uint8_t tid;

	if (!peer)
		return;

	dp_info("Flushing fragments for peer " QDF_MAC_ADDR_FMT,
		QDF_MAC_ADDR_REF(peer->mac_addr.raw));

	for (tid = 0; tid < DP_MAX_TIDS; tid++) {
		rx_tid = &peer->rx_tid[tid];

		qdf_spin_lock_bh(&rx_tid->tid_lock);
		dp_rx_defrag_waitlist_remove(peer, tid);
		dp_rx_reorder_flush_frag(peer, tid);
		qdf_spin_unlock_bh(&rx_tid->tid_lock);
	}

	dp_peer_unref_delete(peer, DP_MOD_ID_CDP);
}