qcacmn: Enable monitor mac filter for special vap

Add change to enable mac based filter for monitor special vap.

Change-Id: Ib189071443d5a98a84d160e7043e9bc4faf189c5
CRs-Fixed: 3317599
This commit is contained in:
Santosh Anbu
2022-11-07 21:43:33 +05:30
committed by Madan Koyyalamudi
parent 99baf5de6d
commit c6fd7ded28
9 changed files with 66 additions and 3 deletions

View File

@@ -1086,6 +1086,7 @@ int htt_h2t_rx_ring_cfg(struct htt_soc *htt_soc, int pdev_id,
dp_mon_rx_packet_length_set(soc->dp_soc, msg_word, htt_tlv_filter); dp_mon_rx_packet_length_set(soc->dp_soc, msg_word, htt_tlv_filter);
dp_mon_rx_hdr_length_set(soc->dp_soc, msg_word, htt_tlv_filter); dp_mon_rx_hdr_length_set(soc->dp_soc, msg_word, htt_tlv_filter);
dp_mon_rx_mac_filter_set(soc->dp_soc, msg_word, htt_tlv_filter);
/* word 2 */ /* word 2 */
msg_word++; msg_word++;

View File

@@ -947,6 +947,12 @@ dp_mon_rx_wmask_subscribe(struct dp_soc *soc, uint32_t *msg_word,
{ {
} }
static inline void
dp_mon_rx_mac_filter_set(struct dp_soc *soc, uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter)
{
}
#ifdef WLAN_TELEMETRY_STATS_SUPPORT #ifdef WLAN_TELEMETRY_STATS_SUPPORT
static inline static inline
void dp_monitor_peer_telemetry_stats(struct dp_peer *peer, void dp_monitor_peer_telemetry_stats(struct dp_peer *peer,

View File

@@ -1223,6 +1223,7 @@ dp_mon_register_feature_ops_1_0(struct dp_soc *soc)
dp_mon_filter_reset_undecoded_metadata_capture_1_0; dp_mon_filter_reset_undecoded_metadata_capture_1_0;
#endif #endif
mon_ops->mon_rx_print_advanced_stats = NULL; mon_ops->mon_rx_print_advanced_stats = NULL;
mon_ops->mon_mac_filter_set = dp_mon_mac_filter_set;
} }
struct dp_mon_ops monitor_ops_1_0 = { struct dp_mon_ops monitor_ops_1_0 = {

View File

@@ -1059,6 +1059,20 @@ QDF_STATUS dp_mon_filter_update_1_0(struct dp_pdev *pdev)
return status; return status;
} }
#ifdef QCA_MAC_FILTER_FW_SUPPORT
void dp_mon_mac_filter_set(uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter)
{
if (!msg_word || !tlv_filter)
return;
if (tlv_filter->enable_mon_mac_filter > 0)
HTT_RX_RING_SELECTION_CFG_RXPCU_FILTER_SET(*msg_word, 1);
else
HTT_RX_RING_SELECTION_CFG_RXPCU_FILTER_SET(*msg_word, 0);
}
#endif
#if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE) #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
/* /*
* dp_cfr_filter_1_0() - Configure HOST RX monitor status ring for CFR * dp_cfr_filter_1_0() - Configure HOST RX monitor status ring for CFR

View File

@@ -216,4 +216,20 @@ static inline void dp_mon_filter_reset_rx_pktlog_cbf_1_0(struct dp_pdev *pdev)
QDF_STATUS dp_mon_filter_update_1_0(struct dp_pdev *pdev); QDF_STATUS dp_mon_filter_update_1_0(struct dp_pdev *pdev);
#ifdef QCA_MAC_FILTER_FW_SUPPORT
/**
* dp_mon_mac_filter_set() - Setup rx monitor mac filter feature
* @msg_word: msg word
* @htt_tlv_filter: rx ring filter configuration
*/
void dp_mon_mac_filter_set(uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter);
#else
static inline
void dp_mon_mac_filter_set(uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter)
{
}
#endif
#endif /* _DP_MON_FILTER_1_0_H_ */ #endif /* _DP_MON_FILTER_1_0_H_ */

View File

@@ -1438,6 +1438,7 @@ dp_mon_register_feature_ops_2_0(struct dp_soc *soc)
mon_ops->rx_enable_fpmo = dp_rx_mon_enable_fpmo; mon_ops->rx_enable_fpmo = dp_rx_mon_enable_fpmo;
mon_ops->mon_rx_print_advanced_stats = mon_ops->mon_rx_print_advanced_stats =
dp_mon_rx_print_advanced_stats_2_0; dp_mon_rx_print_advanced_stats_2_0;
mon_ops->mon_mac_filter_set = NULL;
} }
struct dp_mon_ops monitor_ops_2_0 = { struct dp_mon_ops monitor_ops_2_0 = {

View File

@@ -5976,8 +5976,6 @@ void dp_mon_cdp_ops_register(struct dp_soc *soc)
if (target_type == TARGET_TYPE_QCN9000) if (target_type == TARGET_TYPE_QCN9000)
ops->ctrl_ops->txrx_update_mon_mac_filter = ops->ctrl_ops->txrx_update_mon_mac_filter =
dp_update_mon_mac_filter; dp_update_mon_mac_filter;
else
ops->ctrl_ops->txrx_update_mon_mac_filter = NULL;
break; break;
case TARGET_TYPE_QCN9224: case TARGET_TYPE_QCN9224:
case TARGET_TYPE_QCA5332: case TARGET_TYPE_QCA5332:
@@ -5997,7 +5995,6 @@ void dp_mon_cdp_ops_register(struct dp_soc *soc)
dp_cfr_filter_register_2_0(ops); dp_cfr_filter_register_2_0(ops);
#endif #endif
#endif /* QCA_MONITOR_2_0_SUPPORT */ #endif /* QCA_MONITOR_2_0_SUPPORT */
ops->ctrl_ops->txrx_update_mon_mac_filter = NULL;
break; break;
default: default:
dp_mon_err("%s: Unknown tgt type %d", __func__, target_type); dp_mon_err("%s: Unknown tgt type %d", __func__, target_type);

View File

@@ -827,6 +827,8 @@ struct dp_mon_ops {
(struct dp_soc *soc, struct dp_pdev *pdev); (struct dp_soc *soc, struct dp_pdev *pdev);
QDF_STATUS (*mon_rx_ppdu_info_cache_create)(struct dp_pdev *pdev); QDF_STATUS (*mon_rx_ppdu_info_cache_create)(struct dp_pdev *pdev);
void (*mon_rx_ppdu_info_cache_destroy)(struct dp_pdev *pdev); void (*mon_rx_ppdu_info_cache_destroy)(struct dp_pdev *pdev);
void (*mon_mac_filter_set)(uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter);
}; };
/** /**
@@ -3881,6 +3883,27 @@ dp_rx_mon_enable(struct dp_soc *soc, uint32_t *msg_word,
monitor_ops->rx_mon_enable(msg_word, tlv_filter); monitor_ops->rx_mon_enable(msg_word, tlv_filter);
} }
static inline void
dp_mon_rx_mac_filter_set(struct dp_soc *soc, uint32_t *msg_word,
struct htt_rx_ring_tlv_filter *tlv_filter)
{
struct dp_mon_soc *mon_soc = soc->monitor_soc;
struct dp_mon_ops *monitor_ops;
if (!mon_soc) {
dp_mon_debug("mon soc is NULL");
return;
}
monitor_ops = mon_soc->mon_ops;
if (!monitor_ops || !monitor_ops->mon_mac_filter_set) {
dp_mon_debug("callback not registered");
return;
}
monitor_ops->mon_mac_filter_set(msg_word, tlv_filter);
}
#ifdef QCA_ENHANCED_STATS_SUPPORT #ifdef QCA_ENHANCED_STATS_SUPPORT
QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev, QDF_STATUS dp_peer_qos_stats_notify(struct dp_pdev *dp_pdev,
struct cdp_rx_stats_ppdu_user *ppdu_user); struct cdp_rx_stats_ppdu_user *ppdu_user);

View File

@@ -104,6 +104,8 @@ void dp_mon_filter_show_filter(struct dp_mon_pdev *mon_pdev,
DP_MON_FILTER_PRINT("phy_err_mask_cont: 0x%x", DP_MON_FILTER_PRINT("phy_err_mask_cont: 0x%x",
tlv_filter->phy_err_mask_cont); tlv_filter->phy_err_mask_cont);
#endif #endif
DP_MON_FILTER_PRINT("mon_mac_filter: %d",
tlv_filter->enable_mon_mac_filter);
} }
#ifdef QCA_UNDECODED_METADATA_SUPPORT #ifdef QCA_UNDECODED_METADATA_SUPPORT
@@ -260,6 +262,8 @@ void dp_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
DP_MON_FILTER_SET(tlv_filter, FILTER_MD_CTRL, dst_filter); DP_MON_FILTER_SET(tlv_filter, FILTER_MD_CTRL, dst_filter);
dp_mon_set_fp_phy_err_filter(tlv_filter, mon_filter); dp_mon_set_fp_phy_err_filter(tlv_filter, mon_filter);
tlv_filter->enable_mon_mac_filter =
mon_filter->tlv_filter.enable_mon_mac_filter;
} }
dp_mon_filter_show_filter(mon_pdev, 0, filter); dp_mon_filter_show_filter(mon_pdev, 0, filter);