qcacmn: Add lite tx monitor filter setup API

Add API to iterate through all modes to set setup tx monitor based
features. Also added filter setup function for tx lite monitor mode.
Made additions to filter print functions and added the fields that
were missed.

Change-Id: I20070f75d800199199195f73b1e2a13b428d5672
CRs-Fixed: 3191619
This commit is contained in:
Nandha Kishore Easwaran
2022-05-06 21:39:51 +05:30
committed by Madan Koyyalamudi
parent 83e349e4ae
commit 7d3cd845de
4 changed files with 614 additions and 108 deletions

View File

@@ -281,14 +281,6 @@ QDF_STATUS dp_mon_buffers_replenish(struct dp_soc *dp_soc,
union dp_mon_desc_list_elem_t **desc_list,
union dp_mon_desc_list_elem_t **tail);
/**
* dp_mon_filter_show_filter_be() - Show the set filters
* @mode: The filter modes
* @tlv_filter: tlv filter
*/
void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter);
/**
* dp_mon_filter_show_tx_filter_be() - Show the set filters
* @mode: The filter modes
@@ -297,6 +289,14 @@ void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter);
/**
* dp_mon_filter_show_rx_filter_be() - Show the set filters
* @mode: The filter modes
* @tlv_filter: tlv filter
*/
void dp_mon_filter_show_rx_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter);
/**
* dp_vdev_set_monitor_mode_buf_rings_tx_2_0() - Add buffers to tx ring
* @pdev: Pointer to dp_pdev object

View File

@@ -470,6 +470,11 @@ htt_tx_tlv_filter_mask_set_in1(uint32_t *msg_word,
MACTX_USER_DESC_COMMON,
tlv->mactx_user_desc_cmn);
if (tlv->mactx_user_desc_per_usr)
htt_tx_monitor_tlv_filter_in1_enable_set(*msg_word,
MACTX_USER_DESC_PER_USER,
tlv->mactx_user_desc_per_usr);
if (tlv->l_sig_a)
htt_tx_monitor_tlv_filter_in1_enable_set(*msg_word,
L_SIG_A,
@@ -1089,9 +1094,8 @@ void dp_mon_filter_setup_enhanced_stats_2_0(struct dp_pdev *pdev)
rx_tlv_filter->tlv_filter.ppdu_start_user_info = 1;
/* Enabled the filter */
rx_tlv_filter->valid = true;
mon_pdev->current_filter_mode = mode;
dp_mon_filter_show_filter(mon_pdev, mode, rx_tlv_filter);
dp_mon_filter_show_rx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1114,7 +1118,6 @@ void dp_mon_filter_reset_enhanced_stats_2_0(struct dp_pdev *pdev)
mon_pdev_be =
dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
#endif /* QCA_ENHANCED_STATS_SUPPORT */
@@ -1151,6 +1154,92 @@ void dp_mon_filter_reset_rx_enh_capture_2_0(struct dp_pdev *pdev)
}
#endif /* WLAN_RX_PKT_CAPTURE_ENH */
void dp_tx_mon_filter_set_downstream_tlvs(struct htt_tx_ring_tlv_filter *filter)
{
filter->dtlvs.tx_fes_setup = 1;
filter->dtlvs.pcu_ppdu_setup_init = 1;
filter->dtlvs.tx_peer_entry = 1;
filter->dtlvs.tx_queue_extension = 1;
filter->dtlvs.fw2s_mon = 1;
}
void dp_tx_mon_filter_set_upstream_tlvs(struct htt_tx_ring_tlv_filter *filter)
{
filter->utlvs.tx_fes_status_end = 1;
filter->utlvs.rx_response_required_info = 1;
filter->utlvs.response_end_status = 1;
filter->utlvs.tx_fes_status_start = 1;
filter->utlvs.tx_fes_status_start_prot = 1;
filter->utlvs.tx_fes_status_prot = 1;
filter->utlvs.tx_fes_status_start_ppdu = 1;
filter->utlvs.tx_fes_status_user_ppdu = 1;
filter->utlvs.coex_tx_status = 1;
filter->utlvs.rx_frame_bitmap_ack = 1;
filter->utlvs.rx_frame_1k_bitmap_ack = 1;
filter->utlvs.he_sig_a_su = 1;
filter->utlvs.he_sig_a_mu_dl = 1;
filter->utlvs.he_sig_b1_mu = 1;
filter->utlvs.he_sig_b2_mu = 1;
filter->utlvs.he_sig_b2_ofdma = 1;
filter->utlvs.l_sig_b = 1;
filter->utlvs.l_sig_a = 1;
filter->utlvs.ht_sig = 1;
filter->utlvs.vht_sig_a = 1;
filter->utlvs.mactx_phy_desc = 1;
filter->utlvs.mactx_user_desc_cmn = 1;
filter->utlvs.mactx_user_desc_per_usr = 1;
}
void dp_tx_mon_filter_set_word_mask(struct htt_tx_ring_tlv_filter *filter)
{
filter->wmask.tx_fes_setup = 1;
filter->wmask.tx_peer_entry = 1;
filter->wmask.tx_queue_ext = 1;
filter->wmask.tx_msdu_start = 1;
filter->wmask.tx_mpdu_start = 1;
filter->wmask.pcu_ppdu_setup_init = 1;
filter->wmask.rxpcu_user_setup = 1;
}
void dp_tx_mon_filter_set_all(struct dp_mon_pdev_be *mon_pdev_be,
struct htt_tx_ring_tlv_filter *filter)
{
qdf_mem_zero(&filter->dtlvs,
sizeof(struct dp_tx_mon_downstream_tlv_config));
qdf_mem_zero(&filter->dtlvs,
sizeof(struct dp_tx_mon_upstream_tlv_config));
qdf_mem_zero(&filter->wmask,
sizeof(struct dp_tx_mon_upstream_tlv_config));
dp_tx_mon_filter_set_downstream_tlvs(filter);
dp_tx_mon_filter_set_upstream_tlvs(filter);
dp_tx_mon_filter_set_word_mask(filter);
filter->mgmt_filter = 0x1;
filter->data_filter = 0x1;
filter->ctrl_filter = 0x1;
filter->mgmt_mpdu_end = 1;
filter->mgmt_msdu_end = 1;
filter->mgmt_msdu_start = 1;
filter->mgmt_mpdu_start = 1;
filter->ctrl_mpdu_end = 1;
filter->ctrl_msdu_end = 1;
filter->ctrl_msdu_start = 1;
filter->ctrl_mpdu_start = 1;
filter->data_mpdu_end = 1;
filter->data_msdu_end = 1;
filter->data_msdu_start = 1;
filter->data_mpdu_start = 1;
filter->mgmt_mpdu_log = 1;
filter->ctrl_mpdu_log = 1;
filter->data_mpdu_log = 1;
filter->mgmt_dma_length = mon_pdev_be->tx_mon_filter_length;
filter->ctrl_dma_length = mon_pdev_be->tx_mon_filter_length;
filter->data_dma_length = mon_pdev_be->tx_mon_filter_length;
}
void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
{
struct dp_mon_filter_be filter = {0};
@@ -1173,9 +1262,9 @@ void dp_mon_filter_setup_tx_mon_mode_2_0(struct dp_pdev *pdev)
return;
}
mon_pdev->current_filter_mode = mode;
filter.tx_valid = !!mon_pdev_be->tx_mon_mode;
dp_tx_mon_filter_set_all(mon_pdev_be, &filter.tx_tlv_filter);
dp_mon_filter_show_tx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1209,7 +1298,6 @@ void dp_mon_filter_reset_tx_mon_mode_2_0(struct dp_pdev *pdev)
mon_soc_be->tx_mon_ring_fill_level = DP_MON_RING_FILL_LEVEL_DEFAULT;
mon_soc_be->rx_mon_ring_fill_level = DP_MON_RING_FILL_LEVEL_DEFAULT;
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1295,9 +1383,8 @@ void dp_mon_filter_setup_rx_mon_mode_2_0(struct dp_pdev *pdev)
rx_tlv_filter->valid = true;
dp_mon_filter_set_mon_2_0(mon_pdev, rx_tlv_filter);
dp_mon_filter_show_filter_be(mode, &filter);
dp_mon_filter_show_rx_filter_be(mode, &filter);
mon_pdev->current_filter_mode = mode;
/* Store the above filter */
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1338,7 +1425,6 @@ void dp_mon_filter_reset_rx_mon_mode_2_0(struct dp_pdev *pdev)
qdf_mem_zero(&(filter), sizeof(struct dp_mon_filter));
/* Store the above filter */
srng_type = DP_MON_FILTER_SRNG_TYPE_RXMON_DEST;
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1441,6 +1527,9 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
DP_MON_FILTER_PRINT("mgmt_mpdu_log: %d", tlv_filter->mgmt_mpdu_log);
DP_MON_FILTER_PRINT("ctrl_mpdu_log: %d", tlv_filter->ctrl_mpdu_log);
DP_MON_FILTER_PRINT("data_mpdu_log: %d", tlv_filter->data_mpdu_log);
/* Downstream TLVs */
DP_MON_FILTER_PRINT("Downstream TLVs");
DP_MON_FILTER_PRINT("tx_fes_setup: %d", tlv_filter->dtlvs.tx_fes_setup);
DP_MON_FILTER_PRINT("tx_peer_entry: %d",
tlv_filter->dtlvs.tx_peer_entry);
@@ -1454,6 +1543,8 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
DP_MON_FILTER_PRINT("fw2s_mon: %d", tlv_filter->dtlvs.fw2s_mon);
DP_MON_FILTER_PRINT("tx_loopback_setup: %d",
tlv_filter->dtlvs.tx_loopback_setup);
DP_MON_FILTER_PRINT("sch_critical_tlv_ref: %d",
tlv_filter->dtlvs.sch_critical_tlv_ref);
DP_MON_FILTER_PRINT("ndp_preamble_done: %d",
tlv_filter->dtlvs.ndp_preamble_done);
DP_MON_FILTER_PRINT("tx_raw_frame_setup: %d",
@@ -1477,6 +1568,9 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
tlv_filter->dtlvs.scheduler_end);
DP_MON_FILTER_PRINT("sch_wait_instr_tx_path: %d",
tlv_filter->dtlvs.sch_wait_instr_tx_path);
/* Upstream TLVs */
DP_MON_FILTER_PRINT("Upstream TLVs");
DP_MON_FILTER_PRINT("rx_response_required_info: %d",
tlv_filter->utlvs.rx_response_required_info);
DP_MON_FILTER_PRINT("response_start_status: %d",
@@ -1534,6 +1628,7 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
tlv_filter->utlvs.mactx_user_desc_cmn);
DP_MON_FILTER_PRINT("mactx_user_desc_per_usr: %d",
tlv_filter->utlvs.mactx_user_desc_per_usr);
DP_MON_FILTER_PRINT("tqm_acked_1k_mpdu: %d",
tlv_filter->utlvs.tqm_acked_1k_mpdu);
DP_MON_FILTER_PRINT("tqm_acked_mpdu: %d",
@@ -1585,6 +1680,63 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
DP_MON_FILTER_PRINT("l_sig_b: %d", tlv_filter->utlvs.l_sig_b);
DP_MON_FILTER_PRINT("l_sig_a: %d", tlv_filter->utlvs.l_sig_a);
DP_MON_FILTER_PRINT("tx_service: %d", tlv_filter->utlvs.tx_service);
DP_MON_FILTER_PRINT("txpcu_buf_status: %d",
tlv_filter->utlvs.txpcu_buf_status);
DP_MON_FILTER_PRINT("txpcu_user_buf_status: %d",
tlv_filter->utlvs.txpcu_user_buf_status);
DP_MON_FILTER_PRINT("txdma_stop_request: %d",
tlv_filter->utlvs.txdma_stop_request);
DP_MON_FILTER_PRINT("expected_response: %d",
tlv_filter->utlvs.expected_response);
DP_MON_FILTER_PRINT("tx_mpdu_count_transfer_end: %d",
tlv_filter->utlvs.tx_mpdu_count_transfer_end);
DP_MON_FILTER_PRINT("rx_trig_info: %d",
tlv_filter->utlvs.rx_trig_info);
DP_MON_FILTER_PRINT("rxpcu_tx_setup_clear: %d",
tlv_filter->utlvs.rxpcu_tx_setup_clear);
DP_MON_FILTER_PRINT("rx_frame_bitmap_req: %d",
tlv_filter->utlvs.rx_frame_bitmap_req);
DP_MON_FILTER_PRINT("rx_phy_sleep: %d",
tlv_filter->utlvs.rx_phy_sleep);
DP_MON_FILTER_PRINT("txpcu_preamble_done: %d",
tlv_filter->utlvs.txpcu_preamble_done);
DP_MON_FILTER_PRINT("txpcu_phytx_debug32: %d",
tlv_filter->utlvs.txpcu_phytx_debug32);
DP_MON_FILTER_PRINT("txpcu_phytx_other_transmit_info32: %d",
tlv_filter->utlvs.txpcu_phytx_other_transmit_info32);
DP_MON_FILTER_PRINT("rx_ppdu_noack_report: %d",
tlv_filter->utlvs.rx_ppdu_noack_report);
DP_MON_FILTER_PRINT("rx_ppdu_ack_report: %d",
tlv_filter->utlvs.rx_ppdu_ack_report);
DP_MON_FILTER_PRINT("coex_rx_status: %d",
tlv_filter->utlvs.coex_rx_status);
DP_MON_FILTER_PRINT("rx_start_param: %d",
tlv_filter->utlvs.rx_start_param);
DP_MON_FILTER_PRINT("tx_cbf_info: %d",
tlv_filter->utlvs.tx_cbf_info);
DP_MON_FILTER_PRINT("rxpcu_early_rx_indication: %d",
tlv_filter->utlvs.rxpcu_early_rx_indication);
DP_MON_FILTER_PRINT("received_response_user_7_0: %d",
tlv_filter->utlvs.received_response_user_7_0);
DP_MON_FILTER_PRINT("received_response_user_15_8: %d",
tlv_filter->utlvs.received_response_user_15_8);
DP_MON_FILTER_PRINT("received_response_user_23_16: %d",
tlv_filter->utlvs.received_response_user_23_16);
DP_MON_FILTER_PRINT("received_response_user_31_24: %d",
tlv_filter->utlvs.received_response_user_31_24);
DP_MON_FILTER_PRINT("received_response_user_36_32: %d",
tlv_filter->utlvs.received_response_user_36_32);
DP_MON_FILTER_PRINT("rx_pm_info: %d",
tlv_filter->utlvs.rx_pm_info);
DP_MON_FILTER_PRINT("rx_preamble: %d",
tlv_filter->utlvs.rx_preamble);
DP_MON_FILTER_PRINT("others: %d",
tlv_filter->utlvs.others);
DP_MON_FILTER_PRINT("mactx_pre_phy_desc: %d",
tlv_filter->utlvs.mactx_pre_phy_desc);
/* Word mask subscription */
DP_MON_FILTER_PRINT("wmask tx_fes_setup: %d",
tlv_filter->wmask.tx_fes_setup);
DP_MON_FILTER_PRINT("wmask tx_peer_entry: %d",
@@ -1601,8 +1753,8 @@ static void dp_tx_mon_filter_show_filter(struct dp_mon_filter_be *filter)
tlv_filter->wmask.rxpcu_user_setup);
}
void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter)
void dp_mon_filter_show_rx_filter_be(enum dp_mon_filter_mode mode,
struct dp_mon_filter_be *filter)
{
DP_MON_FILTER_PRINT("RX MON RING TLV FILTER CONFIG:");
DP_MON_FILTER_PRINT("[Mode %d]: Valid: %d",
@@ -1610,12 +1762,6 @@ void dp_mon_filter_show_filter_be(enum dp_mon_filter_mode mode,
if (filter->rx_tlv_filter.valid)
dp_rx_mon_filter_show_filter(filter);
DP_MON_FILTER_PRINT("TX MON RING TLV FILTER CONFIG:");
DP_MON_FILTER_PRINT("[Mode %d]: Valid: %d", mode, filter->tx_valid);
if (filter->tx_valid)
dp_tx_mon_filter_show_filter(filter);
}
void dp_mon_filter_show_tx_filter_be(enum dp_mon_filter_mode mode,
@@ -1657,8 +1803,7 @@ void dp_mon_filter_setup_rx_pkt_log_full_2_0(struct dp_pdev *pdev)
rx_tlv_filter->msdu_end = 1;
rx_tlv_filter->mpdu_end = 1;
mon_pdev->current_filter_mode = mode;
dp_mon_filter_show_filter_be(mode, &filter);
dp_mon_filter_show_rx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1677,7 +1822,6 @@ void dp_mon_filter_reset_rx_pkt_log_full_2_0(struct dp_pdev *pdev)
return;
}
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1701,8 +1845,7 @@ void dp_mon_filter_setup_rx_pkt_log_lite_2_0(struct dp_pdev *pdev)
dp_mon_filter_set_status_cmn(&mon_pdev_be->mon_pdev,
&filter.rx_tlv_filter);
mon_pdev->current_filter_mode = mode;
dp_mon_filter_show_filter_be(mode, &filter);
dp_mon_filter_show_rx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1721,7 +1864,6 @@ void dp_mon_filter_reset_rx_pkt_log_lite_2_0(struct dp_pdev *pdev)
return;
}
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1741,13 +1883,12 @@ dp_mon_filter_set_reset_rx_pkt_log_cbf_dest_2_0(struct dp_pdev_be *pdev_be,
DP_MON_FILTER_SRNG_TYPE_RXDMA_MON_BUF :
DP_MON_FILTER_SRNG_TYPE_RXDMA_BUF);
mon_pdev->current_filter_mode = mode;
/*set the filter */
if (filter->rx_tlv_filter.valid) {
dp_mon_filter_set_cbf_cmn(&pdev_be->pdev,
&filter->rx_tlv_filter);
dp_mon_filter_show_filter_be(mode, filter);
dp_mon_filter_show_rx_filter_be(mode, filter);
mon_pdev_be->filter_be[mode][srng_type] = *filter;
} else /* reset the filter */
mon_pdev_be->filter_be[mode][srng_type] = *filter;
@@ -1786,9 +1927,8 @@ void dp_mon_filter_setup_rx_pkt_log_cbf_2_0(struct dp_pdev *pdev)
/* Enabled the filter */
filter.rx_tlv_filter.valid = true;
mon_pdev->current_filter_mode = mode;
dp_mon_filter_set_status_cbf(pdev, &filter.rx_tlv_filter);
dp_mon_filter_show_filter_be(mode, &filter);
dp_mon_filter_show_rx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
/* Clear the filter as the same filter will be used to set the
@@ -1830,7 +1970,6 @@ void dp_mon_filter_reset_rx_pktlog_cbf_2_0(struct dp_pdev *pdev)
dp_mon_filter_set_reset_rx_pkt_log_cbf_dest_2_0(pdev_be, &filter);
srng_type = DP_MON_FILTER_SRNG_TYPE_RXMON_DEST;
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1868,8 +2007,7 @@ void dp_mon_filter_setup_pktlog_hybrid_2_0(struct dp_pdev *pdev)
tlv_filter->utlvs.recevied_response_info_p2 = 1;
tlv_filter->utlvs.response_end_status = 1;
mon_pdev->current_filter_mode = mode;
dp_mon_filter_show_filter_be(mode, &filter);
dp_mon_filter_show_tx_filter_be(mode, &filter);
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
@@ -1888,7 +2026,6 @@ void dp_mon_filter_reset_pktlog_hybrid_2_0(struct dp_pdev *pdev)
return;
}
mon_pdev->current_filter_mode = mode;
mon_pdev_be->filter_be[mode][srng_type] = filter;
}
#endif /* WDI_EVENT_ENABLE */
@@ -2111,10 +2248,326 @@ dp_rx_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
tlv_filter->rx_pkt_tlv_offset =
src_tlv_filter->rx_pkt_tlv_offset;
dp_mon_filter_show_filter_be(current_mode, mon_filter);
dp_mon_filter_show_rx_filter_be(current_mode, mon_filter);
}
}
static
void dp_tx_mon_downstream_tlv_set(struct htt_tx_ring_tlv_filter *dst_filter,
struct htt_tx_ring_tlv_filter *src_filter)
{
dst_filter->dtlvs.tx_fes_setup |=
src_filter->dtlvs.tx_fes_setup;
dst_filter->dtlvs.tx_peer_entry |=
src_filter->dtlvs.tx_peer_entry;
dst_filter->dtlvs.tx_queue_extension |=
src_filter->dtlvs.tx_queue_extension;
dst_filter->dtlvs.tx_last_mpdu_end |=
src_filter->dtlvs.tx_last_mpdu_end;
dst_filter->dtlvs.tx_last_mpdu_fetched |=
src_filter->dtlvs.tx_last_mpdu_fetched;
dst_filter->dtlvs.tx_data_sync |=
src_filter->dtlvs.tx_data_sync;
dst_filter->dtlvs.pcu_ppdu_setup_init |=
src_filter->dtlvs.pcu_ppdu_setup_init;
dst_filter->dtlvs.fw2s_mon |=
src_filter->dtlvs.fw2s_mon;
dst_filter->dtlvs.tx_loopback_setup |=
src_filter->dtlvs.tx_loopback_setup;
dst_filter->dtlvs.sch_critical_tlv_ref |=
src_filter->dtlvs.sch_critical_tlv_ref;
dst_filter->dtlvs.ndp_preamble_done |=
src_filter->dtlvs.ndp_preamble_done;
dst_filter->dtlvs.tx_raw_frame_setup |=
src_filter->dtlvs.tx_raw_frame_setup;
dst_filter->dtlvs.txpcu_user_setup |=
src_filter->dtlvs.txpcu_user_setup;
dst_filter->dtlvs.rxpcu_setup |=
src_filter->dtlvs.rxpcu_setup;
dst_filter->dtlvs.rxpcu_setup_complete |=
src_filter->dtlvs.rxpcu_setup_complete;
dst_filter->dtlvs.coex_tx_req |=
src_filter->dtlvs.coex_tx_req;
dst_filter->dtlvs.rxpcu_user_setup |=
src_filter->dtlvs.rxpcu_user_setup;
dst_filter->dtlvs.rxpcu_user_setup_ext |=
src_filter->dtlvs.rxpcu_user_setup_ext;
dst_filter->dtlvs.wur_data |= src_filter->dtlvs.wur_data;
dst_filter->dtlvs.tqm_mpdu_global_start |=
src_filter->dtlvs.tqm_mpdu_global_start;
dst_filter->dtlvs.tx_fes_setup_complete |=
src_filter->dtlvs.tx_fes_setup_complete;
dst_filter->dtlvs.scheduler_end |= src_filter->dtlvs.scheduler_end;
dst_filter->dtlvs.sch_wait_instr_tx_path |=
src_filter->dtlvs.sch_wait_instr_tx_path;
}
static
void dp_tx_mon_upstream_tlv_set(struct htt_tx_ring_tlv_filter *dst_filter,
struct htt_tx_ring_tlv_filter *src_filter)
{
dst_filter->utlvs.rx_response_required_info |=
src_filter->utlvs.rx_response_required_info;
dst_filter->utlvs.response_start_status |=
src_filter->utlvs.response_start_status;
dst_filter->utlvs.response_end_status |=
src_filter->utlvs.response_end_status;
dst_filter->utlvs.tx_fes_status_start |=
src_filter->utlvs.tx_fes_status_start;
dst_filter->utlvs.tx_fes_status_end |=
src_filter->utlvs.tx_fes_status_end;
dst_filter->utlvs.tx_fes_status_start_ppdu |=
src_filter->utlvs.tx_fes_status_start_ppdu;
dst_filter->utlvs.tx_fes_status_user_ppdu |=
src_filter->utlvs.tx_fes_status_user_ppdu;
dst_filter->utlvs.tx_fes_status_ack_or_ba |=
src_filter->utlvs.tx_fes_status_ack_or_ba;
dst_filter->utlvs.tx_fes_status_1k_ba |=
src_filter->utlvs.tx_fes_status_1k_ba;
dst_filter->utlvs.tx_fes_status_start_prot |=
src_filter->utlvs.tx_fes_status_start_prot;
dst_filter->utlvs.tx_fes_status_prot |=
src_filter->utlvs.tx_fes_status_prot;
dst_filter->utlvs.tx_fes_status_user_response |=
src_filter->utlvs.tx_fes_status_user_response;
dst_filter->utlvs.rx_frame_bitmap_ack |=
src_filter->utlvs.rx_frame_bitmap_ack;
dst_filter->utlvs.rx_frame_1k_bitmap_ack |=
src_filter->utlvs.rx_frame_1k_bitmap_ack;
dst_filter->utlvs.coex_tx_status |=
src_filter->utlvs.coex_tx_status;
dst_filter->utlvs.recevied_response_info |=
src_filter->utlvs.recevied_response_info;
dst_filter->utlvs.recevied_response_info_p2 |=
src_filter->utlvs.recevied_response_info_p2;
dst_filter->utlvs.ofdma_trigger_details |=
src_filter->utlvs.ofdma_trigger_details;
dst_filter->utlvs.recevied_trigger_info |=
src_filter->utlvs.recevied_trigger_info;
dst_filter->utlvs.pdg_tx_request |=
src_filter->utlvs.pdg_tx_request;
dst_filter->utlvs.pdg_response |=
src_filter->utlvs.pdg_response;
dst_filter->utlvs.pdg_trig_response |=
src_filter->utlvs.pdg_trig_response;
dst_filter->utlvs.trigger_response_tx_done |=
src_filter->utlvs.trigger_response_tx_done;
dst_filter->utlvs.prot_tx_end |=
src_filter->utlvs.prot_tx_end;
dst_filter->utlvs.ppdu_tx_end |=
src_filter->utlvs.ppdu_tx_end;
dst_filter->utlvs.r2r_status_end |=
src_filter->utlvs.r2r_status_end;
dst_filter->utlvs.flush_req |=
src_filter->utlvs.flush_req;
dst_filter->utlvs.mactx_phy_desc |=
src_filter->utlvs.mactx_phy_desc;
dst_filter->utlvs.mactx_user_desc_cmn |=
src_filter->utlvs.mactx_user_desc_cmn;
dst_filter->utlvs.mactx_user_desc_per_usr |=
src_filter->utlvs.mactx_user_desc_per_usr;
dst_filter->utlvs.tqm_acked_1k_mpdu |=
src_filter->utlvs.tqm_acked_1k_mpdu;
dst_filter->utlvs.tqm_acked_mpdu |=
src_filter->utlvs.tqm_acked_mpdu;
dst_filter->utlvs.tqm_update_tx_mpdu_count |=
src_filter->utlvs.tqm_update_tx_mpdu_count;
dst_filter->utlvs.phytx_ppdu_header_info_request |=
src_filter->utlvs.phytx_ppdu_header_info_request;
dst_filter->utlvs.u_sig_eht_su_mu |=
src_filter->utlvs.u_sig_eht_su_mu;
dst_filter->utlvs.u_sig_eht_su |=
src_filter->utlvs.u_sig_eht_su;
dst_filter->utlvs.u_sig_eht_tb |=
src_filter->utlvs.u_sig_eht_tb;
dst_filter->utlvs.eht_sig_usr_su |=
src_filter->utlvs.eht_sig_usr_su;
dst_filter->utlvs.eht_sig_usr_mu_mimo |=
src_filter->utlvs.eht_sig_usr_mu_mimo;
dst_filter->utlvs.eht_sig_usr_ofdma |=
src_filter->utlvs.eht_sig_usr_ofdma;
dst_filter->utlvs.he_sig_a_su |=
src_filter->utlvs.he_sig_a_su;
dst_filter->utlvs.he_sig_a_mu_dl |=
src_filter->utlvs.he_sig_a_mu_dl;
dst_filter->utlvs.he_sig_a_mu_ul |=
src_filter->utlvs.he_sig_a_mu_ul;
dst_filter->utlvs.he_sig_b1_mu |=
src_filter->utlvs.he_sig_b1_mu;
dst_filter->utlvs.he_sig_b2_mu |=
src_filter->utlvs.he_sig_b2_mu;
dst_filter->utlvs.he_sig_b2_ofdma |=
src_filter->utlvs.he_sig_b2_ofdma;
dst_filter->utlvs.vht_sig_b_mu160 |=
src_filter->utlvs.vht_sig_b_mu160;
dst_filter->utlvs.vht_sig_b_mu80 |=
src_filter->utlvs.vht_sig_b_mu80;
dst_filter->utlvs.vht_sig_b_mu40 |=
src_filter->utlvs.vht_sig_b_mu40;
dst_filter->utlvs.vht_sig_b_mu20 |=
src_filter->utlvs.vht_sig_b_mu20;
dst_filter->utlvs.vht_sig_b_su160 |=
src_filter->utlvs.vht_sig_b_su160;
dst_filter->utlvs.vht_sig_b_su80 |=
src_filter->utlvs.vht_sig_b_su80;
dst_filter->utlvs.vht_sig_b_su40 |=
src_filter->utlvs.vht_sig_b_su40;
dst_filter->utlvs.vht_sig_b_su20 |=
src_filter->utlvs.vht_sig_b_su20;
dst_filter->utlvs.vht_sig_a |=
src_filter->utlvs.vht_sig_a;
dst_filter->utlvs.ht_sig |=
src_filter->utlvs.ht_sig;
dst_filter->utlvs.l_sig_b |=
src_filter->utlvs.l_sig_b;
dst_filter->utlvs.l_sig_a |=
src_filter->utlvs.l_sig_a;
dst_filter->utlvs.tx_service |=
src_filter->utlvs.tx_service;
dst_filter->utlvs.txpcu_buf_status |=
src_filter->utlvs.txpcu_buf_status;
dst_filter->utlvs.txpcu_user_buf_status |=
src_filter->utlvs.txpcu_user_buf_status;
dst_filter->utlvs.txdma_stop_request |=
src_filter->utlvs.txdma_stop_request;
dst_filter->utlvs.expected_response |=
src_filter->utlvs.expected_response;
dst_filter->utlvs.tx_mpdu_count_transfer_end |=
src_filter->utlvs.tx_mpdu_count_transfer_end;
dst_filter->utlvs.rx_trig_info |=
src_filter->utlvs.rx_trig_info;
dst_filter->utlvs.rxpcu_tx_setup_clear |=
src_filter->utlvs.rxpcu_tx_setup_clear;
dst_filter->utlvs.rx_frame_bitmap_req |=
src_filter->utlvs.rx_frame_bitmap_req;
dst_filter->utlvs.rx_phy_sleep |=
src_filter->utlvs.rx_phy_sleep;
dst_filter->utlvs.txpcu_preamble_done |=
src_filter->utlvs.txpcu_preamble_done;
dst_filter->utlvs.txpcu_phytx_debug32 |=
src_filter->utlvs.txpcu_phytx_debug32;
dst_filter->utlvs.txpcu_phytx_other_transmit_info32 |=
src_filter->utlvs.txpcu_phytx_other_transmit_info32;
dst_filter->utlvs.rx_ppdu_noack_report |=
src_filter->utlvs.rx_ppdu_noack_report;
dst_filter->utlvs.rx_ppdu_ack_report |=
src_filter->utlvs.rx_ppdu_ack_report;
dst_filter->utlvs.coex_rx_status |=
src_filter->utlvs.coex_rx_status;
dst_filter->utlvs.rx_start_param |=
src_filter->utlvs.rx_start_param;
dst_filter->utlvs.tx_cbf_info |=
src_filter->utlvs.tx_cbf_info;
dst_filter->utlvs.rxpcu_early_rx_indication |=
src_filter->utlvs.rxpcu_early_rx_indication;
dst_filter->utlvs.received_response_user_7_0 |=
src_filter->utlvs.received_response_user_7_0;
dst_filter->utlvs.received_response_user_15_8 |=
src_filter->utlvs.received_response_user_15_8;
dst_filter->utlvs.received_response_user_23_16 |=
src_filter->utlvs.received_response_user_23_16;
dst_filter->utlvs.received_response_user_31_24 |=
src_filter->utlvs.received_response_user_31_24;
dst_filter->utlvs.received_response_user_36_32 |=
src_filter->utlvs.received_response_user_36_32;
dst_filter->utlvs.rx_pm_info |=
src_filter->utlvs.rx_pm_info;
dst_filter->utlvs.rx_preamble |=
src_filter->utlvs.rx_preamble;
dst_filter->utlvs.others |=
src_filter->utlvs.others;
dst_filter->utlvs.mactx_pre_phy_desc |=
src_filter->utlvs.mactx_pre_phy_desc;
}
static
void dp_tx_mon_wordmask_config_set(struct htt_tx_ring_tlv_filter *dst_filter,
struct htt_tx_ring_tlv_filter *src_filter)
{
dst_filter->wmask.tx_fes_setup |=
src_filter->wmask.tx_fes_setup;
dst_filter->wmask.tx_peer_entry |=
src_filter->wmask.tx_peer_entry;
dst_filter->wmask.tx_queue_ext |=
src_filter->wmask.tx_queue_ext;
dst_filter->wmask.tx_msdu_start |=
src_filter->wmask.tx_msdu_start;
dst_filter->wmask.tx_mpdu_start |=
src_filter->wmask.tx_mpdu_start;
dst_filter->wmask.pcu_ppdu_setup_init |=
src_filter->wmask.pcu_ppdu_setup_init;
dst_filter->wmask.rxpcu_user_setup |=
src_filter->wmask.rxpcu_user_setup;
}
/**
* dp_tx_mon_filter_h2t_setup() - Setup the filter
* @soc: DP soc handle
* @pdev: DP pdev handle
* @srng_type: The srng type for which filter wll be set
* @tlv_filter: tlv filter
*/
static
void dp_tx_mon_filter_h2t_setup(struct dp_soc *soc, struct dp_pdev *pdev,
enum dp_mon_filter_srng_type srng_type,
struct dp_mon_filter_be *filter)
{
int32_t current_mode = 0;
struct htt_tx_ring_tlv_filter *dst_filter = &filter->tx_tlv_filter;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_pdev_be *mon_pdev_be =
dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
/*
* Loop through all the modes.
*/
for (current_mode = 0; current_mode < DP_MON_FILTER_MAX_MODE;
current_mode++) {
struct dp_mon_filter_be *mon_filter =
&mon_pdev_be->filter_be[current_mode][srng_type];
struct htt_tx_ring_tlv_filter *src_filter =
&mon_filter->tx_tlv_filter;
/*
* Check if the correct mode is enabled or not.
*/
if (!mon_filter->tx_valid)
continue;
dst_filter->enable = 1;
dp_tx_mon_downstream_tlv_set(dst_filter, src_filter);
dp_tx_mon_upstream_tlv_set(dst_filter, src_filter);
dp_tx_mon_wordmask_config_set(dst_filter, src_filter);
dst_filter->mgmt_filter |= src_filter->mgmt_filter;
dst_filter->data_filter |= src_filter->data_filter;
dst_filter->ctrl_filter |= src_filter->ctrl_filter;
dst_filter->mgmt_dma_length |= src_filter->mgmt_dma_length;
dst_filter->ctrl_dma_length |= src_filter->ctrl_dma_length;
dst_filter->data_dma_length |= src_filter->data_dma_length;
dst_filter->mgmt_mpdu_end |= src_filter->mgmt_mpdu_end;
dst_filter->mgmt_msdu_end |= src_filter->mgmt_msdu_end;
dst_filter->mgmt_msdu_start |= src_filter->mgmt_msdu_start;
dst_filter->mgmt_mpdu_start |= src_filter->mgmt_mpdu_start;
dst_filter->ctrl_mpdu_end |= src_filter->mgmt_mpdu_end;
dst_filter->ctrl_msdu_end |= src_filter->mgmt_msdu_end;
dst_filter->ctrl_msdu_start |= src_filter->mgmt_msdu_start;
dst_filter->ctrl_mpdu_start |= src_filter->mgmt_mpdu_start;
dst_filter->data_mpdu_end |= src_filter->mgmt_mpdu_end;
dst_filter->data_msdu_end |= src_filter->mgmt_msdu_end;
dst_filter->data_msdu_start |= src_filter->mgmt_msdu_start;
dst_filter->data_mpdu_start |= src_filter->mgmt_mpdu_start;
dst_filter->mgmt_mpdu_log |= src_filter->mgmt_mpdu_log;
dst_filter->ctrl_mpdu_log |= src_filter->ctrl_mpdu_log;
dst_filter->data_mpdu_log |= src_filter->data_mpdu_log;
}
DP_MON_FILTER_PRINT("TXMON FINAL FILTER CONFIG:");
dp_tx_mon_filter_show_filter(filter);
}
static QDF_STATUS
dp_tx_mon_ht2_ring_cfg(struct dp_soc *soc,
struct dp_pdev *pdev,
@@ -2153,49 +2606,12 @@ dp_tx_mon_ht2_ring_cfg(struct dp_soc *soc,
return status;
}
static inline
void dp_tx_mon_filter_set_all(struct htt_tx_ring_tlv_filter *filter)
{
qdf_mem_set(&filter->dtlvs,
sizeof(struct dp_tx_mon_downstream_tlv_config), 0xFF);
qdf_mem_set(&filter->utlvs,
sizeof(struct dp_tx_mon_upstream_tlv_config), 0xFF);
qdf_mem_set(&filter->wmask,
sizeof(struct dp_tx_mon_wordmask_config), 0xFF);
filter->mgmt_filter = 0x1;
filter->data_filter = 0x1;
filter->ctrl_filter = 0x1;
filter->mgmt_mpdu_end = 1;
filter->mgmt_msdu_end = 1;
filter->mgmt_msdu_start = 1;
filter->mgmt_mpdu_start = 1;
filter->ctrl_mpdu_end = 1;
filter->ctrl_msdu_end = 1;
filter->ctrl_msdu_start = 1;
filter->ctrl_mpdu_start = 1;
filter->data_mpdu_end = 1;
filter->data_msdu_end = 1;
filter->data_msdu_start = 1;
filter->data_mpdu_start = 1;
filter->mgmt_mpdu_log = 1;
filter->ctrl_mpdu_log = 1;
filter->data_mpdu_log = 1;
}
QDF_STATUS dp_tx_mon_filter_update_2_0(struct dp_pdev *pdev)
{
struct dp_soc *soc;
struct dp_mon_filter_be *filter_ptr;
struct htt_tx_ring_tlv_filter *tx_tlv_filter;
enum dp_mon_filter_mode mode = DP_MON_FILTER_MONITOR_MODE;
struct dp_mon_filter_be filter = {0};
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_TXMON_DEST;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
struct dp_mon_pdev_be *mon_pdev_be =
dp_get_be_mon_pdev_from_dp_mon_pdev(mon_pdev);
uint8_t config_dma_length = DMA_LENGTH_64B;
if (!pdev) {
dp_mon_filter_err("pdev Context is null");
@@ -2208,29 +2624,9 @@ QDF_STATUS dp_tx_mon_filter_update_2_0(struct dp_pdev *pdev)
return QDF_STATUS_E_FAILURE;
}
filter_ptr = &mon_pdev_be->filter_be[mode][srng_type];
if (!filter_ptr) {
dp_mon_filter_err("Filter not allocated");
return QDF_STATUS_E_FAILURE;
}
if (mon_pdev_be->tx_mon_filter_length > config_dma_length)
config_dma_length = mon_pdev_be->tx_mon_filter_length;
if (filter_ptr->tx_valid) {
tx_tlv_filter = &filter_ptr->tx_tlv_filter;
dp_tx_mon_filter_set_all(tx_tlv_filter);
tx_tlv_filter->mgmt_dma_length = config_dma_length;
tx_tlv_filter->ctrl_dma_length = config_dma_length;
tx_tlv_filter->data_dma_length = config_dma_length;
tx_tlv_filter->enable = 1;
} else {
qdf_mem_zero(filter_ptr, sizeof(struct dp_mon_filter_be));
}
dp_mon_filter_show_tx_filter_be(mode, filter_ptr);
dp_tx_mon_filter_h2t_setup(soc, pdev, srng_type, &filter);
dp_tx_mon_ht2_ring_cfg(soc, pdev, srng_type,
&filter_ptr->tx_tlv_filter);
&filter.tx_tlv_filter);
return QDF_STATUS_SUCCESS;
}
@@ -2240,17 +2636,14 @@ QDF_STATUS dp_rx_mon_filter_update_2_0(struct dp_pdev *pdev)
struct dp_soc *soc = pdev->soc;
struct dp_mon_filter_be filter = {0};
struct htt_rx_ring_tlv_filter *rx_tlv_filter;
enum dp_mon_filter_mode mode;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXMON_DEST;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
if (!pdev) {
dp_mon_filter_err("pdev Context is null");
return QDF_STATUS_E_FAILURE;
}
mode = mon_pdev->current_filter_mode;
rx_tlv_filter = &filter.rx_tlv_filter.tlv_filter;
dp_rx_mon_filter_h2t_setup(soc, pdev, srng_type, &filter.rx_tlv_filter);
if (filter.rx_tlv_filter.valid)
@@ -2260,8 +2653,6 @@ QDF_STATUS dp_rx_mon_filter_update_2_0(struct dp_pdev *pdev)
dp_mon_ht2_rx_ring_cfg(soc, pdev, srng_type,
&filter.rx_tlv_filter.tlv_filter);
dp_mon_filter_show_filter_be(mode,
&filter);
return QDF_STATUS_SUCCESS;
}
@@ -2275,7 +2666,6 @@ dp_mon_filter_reset_rx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_RXMON_DEST;
be_mon_pdev->mon_pdev.current_filter_mode = filter_mode;
be_mon_pdev->filter_be[filter_mode][srng_type] = filter;
}
@@ -2406,7 +2796,103 @@ dp_mon_filter_setup_rx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
rx_tlv_filter->tlv_filter.ppdu_end_status_done = 1;
rx_tlv_filter->tlv_filter.ppdu_start_user_info = 1;
be_mon_pdev->mon_pdev.current_filter_mode = filter_mode;
dp_mon_filter_show_rx_filter_be(filter_mode, &filter);
be_mon_pdev->filter_be[filter_mode][srng_type] = filter;
}
uint8_t tx_lite_mon_set_len(uint16_t len)
{
switch (len) {
case CDP_LITE_MON_LEN_64B:
return DMA_LENGTH_64B;
case CDP_LITE_MON_LEN_128B:
return DMA_LENGTH_128B;
case CDP_LITE_MON_LEN_256B:
return DMA_LENGTH_256B;
case CDP_LITE_MON_LEN_FULL:
return DEFAULT_DMA_LENGTH;
default:
dp_mon_filter_err("Invalid length %d, Using minimal length of 64B",
len);
return DMA_LENGTH_64B;
}
}
void
dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
{
struct dp_mon_filter_be filter = {0};
enum dp_mon_filter_mode filter_mode =
DP_MON_FILTER_LITE_MON_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_TXMON_DEST;
be_mon_pdev->filter_be[filter_mode][srng_type] = filter;
}
void
dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev)
{
struct dp_mon_filter_be filter = {0};
enum dp_mon_filter_mode mode = DP_MON_FILTER_LITE_MON_MODE;
enum dp_mon_filter_srng_type srng_type =
DP_MON_FILTER_SRNG_TYPE_TXMON_DEST;
struct htt_tx_ring_tlv_filter *tx_tlv_filter = &filter.tx_tlv_filter;
struct dp_lite_mon_tx_config *config = NULL;
config = be_mon_pdev->lite_mon_tx_config;
if (!config)
return;
/* tx monitor supports only filter pass mode */
if (config->tx_config.md_enabled || config->tx_config.mo_enabled ||
config->tx_config.fpmo_enabled) {
dp_mon_filter_err("md mo and fpmo are invalid filter configuration for Tx");
return;
}
/* Enable tx monitor filter */
filter.tx_valid = true;
tx_tlv_filter->enable = 1;
/* Set dtlvs utlvs and wmask to 0xFF */
qdf_mem_set(&tx_tlv_filter->dtlvs,
sizeof(struct dp_tx_mon_downstream_tlv_config), 0xFF);
qdf_mem_set(&tx_tlv_filter->utlvs,
sizeof(struct dp_tx_mon_upstream_tlv_config), 0xFF);
qdf_mem_set(&tx_tlv_filter->wmask,
sizeof(struct dp_tx_mon_wordmask_config), 0xFF);
/* configure mgmt filters */
if (config->tx_config.mgmt_filter[DP_MON_FRM_FILTER_MODE_FP]) {
tx_tlv_filter->mgmt_filter = 1;
tx_tlv_filter->mgmt_dma_length =
tx_lite_mon_set_len(config->tx_config.len[WLAN_FC0_TYPE_MGMT]);
if ((config->tx_config.level == CDP_LITE_MON_LEVEL_MPDU) ||
(config->tx_config.level == CDP_LITE_MON_LEVEL_PPDU))
tx_tlv_filter->mgmt_mpdu_log = 1;
}
/* configure ctrl filters */
if (config->tx_config.ctrl_filter[DP_MON_FRM_FILTER_MODE_FP]) {
tx_tlv_filter->ctrl_filter = 1;
tx_tlv_filter->ctrl_dma_length =
tx_lite_mon_set_len(config->tx_config.len[WLAN_FC0_TYPE_CTRL]);
if ((config->tx_config.level == CDP_LITE_MON_LEVEL_MPDU) ||
(config->tx_config.level == CDP_LITE_MON_LEVEL_PPDU))
tx_tlv_filter->ctrl_mpdu_log = 1;
}
/* configure data filters */
if (config->tx_config.data_filter[DP_MON_FRM_FILTER_MODE_FP]) {
tx_tlv_filter->data_filter = 1;
tx_tlv_filter->data_dma_length =
tx_lite_mon_set_len(config->tx_config.len[WLAN_FC0_TYPE_DATA]);
if ((config->tx_config.level == CDP_LITE_MON_LEVEL_MPDU) ||
(config->tx_config.level == CDP_LITE_MON_LEVEL_PPDU))
tx_tlv_filter->data_mpdu_log = 1;
}
dp_mon_filter_show_tx_filter_be(mode, &filter);
be_mon_pdev->filter_be[mode][srng_type] = filter;
}
#endif /* QCA_SUPPORT_LITE_MONITOR */

View File

@@ -335,5 +335,21 @@ QDF_STATUS dp_mon_filter_alloc_2_0(struct dp_pdev *pdev);
void dp_mon_filter_reset_rx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
void dp_mon_filter_setup_rx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
/**
* dp_mon_filter_reset_tx_lite_mon() - Reset tx lite monitor filter
* @be_mon_pdev: physical mon device handle
*
* Return: Null
*/
void dp_mon_filter_reset_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
/**
* dp_mon_filter_setup_tx_lite_mon() - Setup tx lite monitor filter
* @be_mon_pdev: physical mon device handle
*
* Return: Null
*/
void dp_mon_filter_setup_tx_lite_mon(struct dp_mon_pdev_be *be_mon_pdev);
#endif
#endif /* _DP_MON_FILTER_2_0_H_ */

View File

@@ -1066,7 +1066,6 @@ struct dp_mon_pdev {
bool reset_scan_spcl_vap_stats_enable;
#endif
bool is_tlv_hdr_64_bit;
enum dp_mon_filter_mode current_filter_mode;
/* Invalid monitor peer to account for stats in mcopy mode */
struct dp_mon_peer *invalid_mon_peer;
@@ -4015,6 +4014,11 @@ dp_lite_mon_disable_rx(struct dp_pdev *pdev)
{
}
static inline void
dp_lite_mon_disable_tx(struct dp_pdev *pdev)
{
}
static inline int
dp_lite_mon_is_level_msdu(struct dp_mon_pdev *mon_pdev)
{