From 76ab3fc618fe7e48dd46d69e543d563ac3e4d5c2 Mon Sep 17 00:00:00 2001 From: Amir Date: Sat, 25 Apr 2020 12:55:19 +0530 Subject: [PATCH] qcacmn: Change monitor ring reap sequence for qcn9000 For qcn9000 in case of monitor mode, reap monitor destination ring first and status ring later to avoid backpressure on monitor destination ring Change-Id: I4e1931afe0453221f1326ca7bdb7f0273cc7363d CRs-Fixed: 2670656 --- dp/wifi3.0/dp_rx_mon.h | 13 +++++++++++++ dp/wifi3.0/dp_rx_mon_status.c | 9 +++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/dp/wifi3.0/dp_rx_mon.h b/dp/wifi3.0/dp_rx_mon.h index 6db09469a31b..4faec924cac0 100644 --- a/dp/wifi3.0/dp_rx_mon.h +++ b/dp/wifi3.0/dp_rx_mon.h @@ -19,6 +19,19 @@ #ifndef _DP_RX_MON_H_ #define _DP_RX_MON_H_ +/* + * dp_rx_mon_status_process() - Process monitor status ring and + *>.....TLV in status ring. + * + * @soc: core txrx main context + * @mac_id: mac_id which is one of 3 mac_ids + * @quota: No. of ring entry that can be serviced in one shot. + + * Return: uint32_t: No. of ring entry that is processed. + */ +uint32_t +dp_rx_mon_status_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota); + /** * dp_rx_mon_dest_process() - Brain of the Rx processing functionality * Called from the bottom half (tasklet/NET_RX_SOFTIRQ) diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index bedc5e6d19e4..ca7c49479c8d 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -1618,9 +1618,7 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id, pdev->mon_chan_freq; } - if (qdf_unlikely(soc->full_mon_mode)) - dp_rx_mon_process(soc, mac_id, quota); - else + if (!soc->full_mon_mode) dp_rx_mon_dest_process(soc, mac_id, quota); pdev->mon_ppdu_status = DP_PPDU_STATUS_START; @@ -1831,7 +1829,7 @@ done: * Return: uint32_t: No. of ring entry that is processed. */ -static inline uint32_t +uint32_t dp_rx_mon_status_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota) { uint32_t work_done; @@ -1854,6 +1852,9 @@ dp_rx_mon_status_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota) { */ uint32_t dp_mon_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota) { + if (qdf_unlikely(soc->full_mon_mode)) + return dp_rx_mon_process(soc, mac_id, quota); + return dp_rx_mon_status_process(soc, mac_id, quota); }