Jelajahi Sumber

qcacmn: Add field to indicate sw peer filtering

Add a field to indicate if SW peer filtering is needed in
Tx monitor

Change-Id: Id0ed1655dfe51632f0437c4e3e3c2ccd067f75fe
CRs-Fixed: 3333191
Nandha Kishore Easwaran 2 tahun lalu
induk
melakukan
7432a2e275

+ 1 - 0
dp/wifi3.0/monitor/2.0/dp_mon_filter_2.0.c

@@ -3119,6 +3119,7 @@ dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
 	if (!config)
 		return;
 	config->subtype_filtering = false;
+	config->sw_peer_filtering = false;
 
 }
 

+ 6 - 3
dp/wifi3.0/monitor/2.0/dp_tx_mon_2.0.c

@@ -728,8 +728,10 @@ dp_lite_mon_filter_peer(struct dp_lite_mon_tx_config *config,
 {
 	struct dp_lite_mon_peer *peer;
 
-	/* Return here if peer filtering is not required */
-	if (!config->tx_config.peer_count)
+	/* Return here if sw peer filtering is not required or if peer count
+	 * is zero
+	 */
+	if (!config->sw_peer_filtering || !config->tx_config.peer_count)
 		return QDF_STATUS_SUCCESS;
 
 	TAILQ_FOREACH(peer, &config->tx_config.peer_list, peer_list_elem) {
@@ -806,7 +808,8 @@ dp_lite_mon_filter_peer_subtype(struct dp_lite_mon_tx_config *config,
 	QDF_STATUS ret;
 
 	/* Return here if subtype and peer filtering is not required */
-	if (!config->subtype_filtering && !config->tx_config.peer_count)
+	if (!config->subtype_filtering && !config->sw_peer_filtering &&
+	    !config->tx_config.peer_count)
 		return QDF_STATUS_SUCCESS;
 
 	if (dp_tx_mon_nbuf_get_num_frag(buf)) {

+ 6 - 1
wlan_cfg/cfg_dp.h

@@ -1267,6 +1267,10 @@
 	CFG_INI_BOOL("dp_handle_invalid_decap_type_disable", false, \
 		     "Enable/Disable DP TLV out of order WAR")
 
+#define CFG_DP_TXMON_SW_PEER_FILTERING \
+	CFG_INI_BOOL("tx_litemon_sw_peer_filtering", false, \
+		     "Enable SW based tx monitor peer fitlering")
+
 /*
  * <ini>
  * dp_rx_fisa_enable - Control Rx datapath FISA
@@ -1876,5 +1880,6 @@
 		CFG(CFG_DP_NAPI_SCALE_FACTOR) \
 		CFG(CFG_DP_HOST_AST_DB_ENABLE) \
 		CFG_DP_SAWF_STATS_CONFIG \
-		CFG(CFG_DP_HANDLE_INVALID_DECAP_TYPE_DISABLE)
+		CFG(CFG_DP_HANDLE_INVALID_DECAP_TYPE_DISABLE) \
+		CFG(CFG_DP_TXMON_SW_PEER_FILTERING)
 #endif /* _CFG_DP_H_ */

+ 9 - 0
wlan_cfg/wlan_cfg.c

@@ -2946,6 +2946,8 @@ wlan_cfg_soc_attach(struct cdp_ctrl_objmgr_psoc *psoc)
 	wlan_soc_sawf_stats_cfg_attach(psoc, wlan_cfg_ctx);
 	wlan_cfg_ctx->is_handle_invalid_decap_type_disabled =
 			cfg_get(psoc, CFG_DP_HANDLE_INVALID_DECAP_TYPE_DISABLE);
+	wlan_cfg_ctx->txmon_sw_peer_filtering =
+			cfg_get(psoc, CFG_DP_TXMON_SW_PEER_FILTERING);
 	return wlan_cfg_ctx;
 }
 
@@ -4236,3 +4238,10 @@ uint8_t wlan_cfg_get_napi_scale_factor(struct wlan_cfg_dp_soc_ctxt *cfg)
 {
 	return cfg->napi_scale_factor;
 }
+
+bool wlan_cfg_get_txmon_sw_peer_filtering(struct wlan_cfg_dp_soc_ctxt *cfg)
+{
+	return cfg->txmon_sw_peer_filtering;
+}
+
+qdf_export_symbol(wlan_cfg_get_txmon_sw_peer_filtering);

+ 5 - 0
wlan_cfg/wlan_cfg.h

@@ -440,6 +440,7 @@ struct wlan_cfg_dp_soc_ctxt {
 #endif
 	uint8_t num_rxdma_dst_rings_per_pdev;
 	bool txmon_hw_support;
+	bool txmon_sw_peer_filtering;
 	uint8_t num_rxdma_status_rings_per_pdev;
 #ifdef WLAN_TX_PKT_CAPTURE_ENH
 	uint32_t tx_capt_max_mem_allowed;
@@ -2253,6 +2254,10 @@ void wlan_cfg_set_txmon_hw_support(struct wlan_cfg_dp_soc_ctxt *cfg,
  */
 bool wlan_cfg_get_txmon_hw_support(struct wlan_cfg_dp_soc_ctxt *cfg);
 
+void wlan_cfg_set_txmon_sw_peer_filtering(struct wlan_cfg_dp_soc_ctxt *cfg,
+					  bool txmon_sw_peer_filtering);
+bool wlan_cfg_get_txmon_sw_peer_filtering(struct wlan_cfg_dp_soc_ctxt *cfg);
+
 #ifdef WLAN_TX_PKT_CAPTURE_ENH
 /*
  * wlan_cfg_get_tx_capt_max_mem - Get max memory allowed for TX capture feature