diff options
author | Yeshwanth Sriram Guntuka <ysriramg@codeaurora.org> | 2021-02-05 13:52:26 +0530 |
---|---|---|
committer | Hsiu-Chang Chen <hsiuchangchen@google.com> | 2021-07-15 10:38:10 +0800 |
commit | 2db50aebbbf63edc863b1ccb86b5b45266d3d2fa (patch) | |
tree | 51742acd43a83f9c14c9534c6105dfe8e86a0244 | |
parent | 1618e6be50c5f06c928f9a9d454bb4ebb1002004 (diff) | |
download | qca-wfi-host-cmn-2db50aebbbf63edc863b1ccb86b5b45266d3d2fa.tar.gz |
qcacmn: Register API to flush frags in dp peer opsandroid-s-beta-5_r0.5android-12.0.0_r0.6android-12.0.0_r0.14android-msm-redbull-4.19-s-beta-5android-msm-redbull-4.19-android12
Register dp_peer_flush_frags API in dp peer ops
for flushing fragments for a particular peer.
Bug: 175626671
Test: Regression test
Change-Id: Ia179d3160bdc306ec965c465134042c66a0c40a6
CRs-Fixed: 2874366
Signed-off-by: Hsiu-Chang Chen <hsiuchangchen@google.com>
-rw-r--r-- | dp/wifi3.0/dp_internal.h | 13 | ||||
-rw-r--r-- | dp/wifi3.0/dp_main.c | 3 | ||||
-rw-r--r-- | dp/wifi3.0/dp_peer.c | 30 |
3 files changed, 44 insertions, 2 deletions
diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 495fb647e..f484908d3 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2019, 2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -1395,4 +1395,15 @@ dp_get_vdev_from_soc_vdev_id_wifi3(struct dp_soc *soc, } +/** + * dp_peer_flush_frags() - Flush all fragments for a particular + * peer + * @pdev - dp pdev handle + * @vdev_id - vdev id + * @peer_addr - peer mac address + * + * Return: None + */ +void dp_peer_flush_frags(struct cdp_pdev *pdev, uint8_t vdev_id, + uint8_t *peer_mac); #endif /* #ifndef _DP_INTERNAL_H_ */ diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 12041016a..17d4f44a3 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 The Linux Foundation. All rights reserved. + * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -9975,6 +9975,7 @@ static struct cdp_peer_ops dp_ops_peer = { .peer_get_peer_mac_addr = dp_peer_get_peer_mac_addr, .get_vdev_for_peer = dp_get_vdev_for_peer, .get_peer_state = dp_get_peer_state, + .peer_flush_frags = dp_peer_flush_frags, }; #endif diff --git a/dp/wifi3.0/dp_peer.c b/dp/wifi3.0/dp_peer.c index b332621f7..e59200ff8 100644 --- a/dp/wifi3.0/dp_peer.c +++ b/dp/wifi3.0/dp_peer.c @@ -3586,3 +3586,33 @@ bool dp_peer_find_by_id_valid(struct dp_soc *soc, uint16_t peer_id) return false; } + +void dp_peer_flush_frags(struct cdp_pdev *pdev, uint8_t vdev_id, + uint8_t *peer_mac) +{ + struct dp_pdev *dp_pdev = (struct dp_pdev *)pdev; + struct dp_peer *peer; + struct dp_rx_tid *rx_tid; + uint8_t tid; + + if (!dp_pdev || !dp_pdev->soc) + return; + + peer = dp_peer_find_hash_find(dp_pdev->soc, peer_mac, 0, vdev_id); + if (!peer) + return; + + dp_info("Flushing fragments for peer " QDF_MAC_ADDR_STR, + QDF_MAC_ADDR_ARRAY(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); +} |