فهرست منبع

qcacmn: Fix bkp on monitor dest ring when disable undecoded capture

During undecoded mode capture reset expected to reset
only phy error filter flags. But disabled monitor mode
capture filters as well. This resulted a backpressure
in monitor mode destination ring.
Added an appropriate check to disable only phy error
filter without disturbing monitor mode filter setting.

Change-Id: If3ef8e9f41f32dff30773aeb939256920c515800
CRs-Fixed: 3137636
Basamma Yakkanahalli 3 سال پیش
والد
کامیت
bfde0ca01b
3فایلهای تغییر یافته به همراه16 افزوده شده و 14 حذف شده
  1. 12 6
      dp/wifi3.0/monitor/1.0/dp_mon_filter_1.0.c
  2. 0 1
      dp/wifi3.0/monitor/dp_mon.c
  3. 4 7
      dp/wifi3.0/monitor/dp_mon_filter.c

+ 12 - 6
dp/wifi3.0/monitor/1.0/dp_mon_filter_1.0.c

@@ -200,10 +200,16 @@ void dp_mon_filter_setup_undecoded_metadata_capture_1_0(struct dp_pdev *pdev)
 	}
 
 	/* Enabled the filter */
-	filter.valid = true;
-
 	mon_pdev = pdev->monitor_pdev;
-	dp_mon_filter_set_status_cmn(mon_pdev, &filter);
+	if (mon_pdev->monitor_configured ||
+	    mon_pdev->scan_spcl_vap_configured) {
+		filter = mon_pdev->filter[DP_MON_FILTER_MONITOR_MODE][srng_type];
+	} else if (mon_pdev->neighbour_peers_added) {
+		filter = mon_pdev->filter[DP_MON_FILTER_SMART_MONITOR_MODE][srng_type];
+	} else {
+		dp_mon_filter_set_status_cmn(mon_pdev, &filter);
+		filter.valid = true;
+	}
 
 	/* Setup the filter to subscribe to FP PHY status tlv */
 	filter.tlv_filter.fp_phy_err = 1;
@@ -238,9 +244,9 @@ void dp_mon_filter_reset_undecoded_metadata_capture_1_0(struct dp_pdev *pdev)
 	}
 	mon_pdev = pdev->monitor_pdev;
 
-	/* Enabled filter to reset to default values */
-	filter.valid = true;
-	/* Reset the filter and phy error mask */
+	filter = mon_pdev->filter[mode][srng_type];
+
+	/* Reset the phy error and phy error mask */
 	filter.tlv_filter.fp_phy_err = 0;
 	filter.tlv_filter.fp_phy_err_buf_src = NO_BUFFER_RING;
 	filter.tlv_filter.fp_phy_err_buf_dest = RXDMA_RELEASING_RING;

+ 0 - 1
dp/wifi3.0/monitor/dp_mon.c

@@ -147,7 +147,6 @@ dp_reset_undecoded_metadata_capture(struct dp_pdev *pdev)
 			QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
 				  FL("Undecoded capture filter reset failed"));
 		}
-		mon_pdev->monitor_configured = false;
 	}
 	mon_pdev->undecoded_metadata_capture = 0;
 	return status;

+ 4 - 7
dp/wifi3.0/monitor/dp_mon_filter.c

@@ -107,10 +107,9 @@ void dp_mon_filter_show_filter(struct dp_mon_pdev *mon_pdev,
 #ifdef QCA_UNDECODED_METADATA_SUPPORT
 static inline void
 dp_mon_set_fp_phy_err_filter(struct htt_rx_ring_tlv_filter *tlv_filter,
-			     struct dp_mon_filter *mon_filter,
-			     int32_t current_mode)
+			     struct dp_mon_filter *mon_filter)
 {
-	if (current_mode == DP_MON_FILTER_UNDECODED_METADATA_CAPTURE_MODE) {
+	if (mon_filter->tlv_filter.phy_err_filter_valid) {
 		tlv_filter->fp_phy_err =
 			mon_filter->tlv_filter.fp_phy_err;
 		tlv_filter->fp_phy_err_buf_src =
@@ -128,8 +127,7 @@ dp_mon_set_fp_phy_err_filter(struct htt_rx_ring_tlv_filter *tlv_filter,
 #else
 static inline void
 dp_mon_set_fp_phy_err_filter(struct htt_rx_ring_tlv_filter *tlv_filter,
-			     struct dp_mon_filter *mon_filter,
-			     int32_t current_mode)
+			     struct dp_mon_filter *mon_filter)
 {
 }
 #endif
@@ -259,8 +257,7 @@ void dp_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
 		dst_filter |= src_filter;
 		DP_MON_FILTER_SET(tlv_filter, FILTER_MD_CTRL, dst_filter);
 
-		dp_mon_set_fp_phy_err_filter(tlv_filter, mon_filter,
-					     current_mode);
+		dp_mon_set_fp_phy_err_filter(tlv_filter, mon_filter);
 	}
 
 	dp_mon_filter_show_filter(mon_pdev, 0, filter);