diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index c77e44446ca9..391e07e4dc4f 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -4442,6 +4442,8 @@ static int dp_vdev_set_monitor_mode(struct cdp_vdev *vdev_handle, pdev->mo_mgmt_filter, pdev->mo_ctrl_filter, pdev->mo_data_filter); + qdf_mem_set(&(htt_tlv_filter), sizeof(htt_tlv_filter), 0x0); + htt_tlv_filter.mpdu_start = 1; htt_tlv_filter.msdu_start = 1; htt_tlv_filter.packet = 1; @@ -4475,33 +4477,35 @@ static int dp_vdev_set_monitor_mode(struct cdp_vdev *vdev_handle, RXDMA_MONITOR_BUF, RX_BUFFER_SIZE, &htt_tlv_filter); } + qdf_mem_set(&(htt_tlv_filter), sizeof(htt_tlv_filter), 0x0); + htt_tlv_filter.mpdu_start = 1; - htt_tlv_filter.msdu_start = 1; + htt_tlv_filter.msdu_start = 0; htt_tlv_filter.packet = 0; - htt_tlv_filter.msdu_end = 1; - htt_tlv_filter.mpdu_end = 1; - htt_tlv_filter.packet_header = 1; - htt_tlv_filter.attention = 1; + htt_tlv_filter.msdu_end = 0; + htt_tlv_filter.mpdu_end = 0; + htt_tlv_filter.attention = 0; htt_tlv_filter.ppdu_start = 1; htt_tlv_filter.ppdu_end = 1; htt_tlv_filter.ppdu_end_user_stats = 1; htt_tlv_filter.ppdu_end_user_stats_ext = 1; htt_tlv_filter.ppdu_end_status_done = 1; - htt_tlv_filter.header_per_msdu = 0; - htt_tlv_filter.enable_fp = - (pdev->mon_filter_mode & MON_FILTER_PASS) ? 1 : 0; + htt_tlv_filter.enable_fp = 1; htt_tlv_filter.enable_md = 0; - htt_tlv_filter.enable_mo = - (pdev->mon_filter_mode & MON_FILTER_OTHER) ? 1 : 0; - htt_tlv_filter.fp_mgmt_filter = pdev->fp_mgmt_filter; - htt_tlv_filter.fp_ctrl_filter = pdev->fp_ctrl_filter; - htt_tlv_filter.fp_data_filter = pdev->fp_data_filter; - htt_tlv_filter.mo_mgmt_filter = pdev->mo_mgmt_filter; - htt_tlv_filter.mo_ctrl_filter = pdev->mo_ctrl_filter; - htt_tlv_filter.mo_data_filter = pdev->mo_data_filter; + htt_tlv_filter.enable_mo = 1; + if (pdev->mcopy_mode) { + htt_tlv_filter.packet_header = 1; + } + htt_tlv_filter.fp_mgmt_filter = FILTER_MGMT_ALL; + htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_ALL; + htt_tlv_filter.fp_data_filter = FILTER_DATA_ALL; + htt_tlv_filter.mo_mgmt_filter = FILTER_MGMT_ALL; + htt_tlv_filter.mo_ctrl_filter = FILTER_CTRL_ALL; + htt_tlv_filter.mo_data_filter = FILTER_DATA_ALL; for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) { - int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id); + int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, + pdev->pdev_id); htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev, pdev->rxdma_mon_status_ring[mac_id].hal_srng, @@ -4607,33 +4611,35 @@ static int dp_pdev_set_advance_monitor_filter(struct cdp_pdev *pdev_handle, RXDMA_MONITOR_BUF, RX_BUFFER_SIZE, &htt_tlv_filter); } + qdf_mem_set(&(htt_tlv_filter), sizeof(htt_tlv_filter), 0x0); + htt_tlv_filter.mpdu_start = 1; - htt_tlv_filter.msdu_start = 1; + htt_tlv_filter.msdu_start = 0; htt_tlv_filter.packet = 0; - htt_tlv_filter.msdu_end = 1; - htt_tlv_filter.mpdu_end = 1; - htt_tlv_filter.packet_header = 1; - htt_tlv_filter.attention = 1; + htt_tlv_filter.msdu_end = 0; + htt_tlv_filter.mpdu_end = 0; + htt_tlv_filter.attention = 0; htt_tlv_filter.ppdu_start = 1; htt_tlv_filter.ppdu_end = 1; htt_tlv_filter.ppdu_end_user_stats = 1; htt_tlv_filter.ppdu_end_user_stats_ext = 1; htt_tlv_filter.ppdu_end_status_done = 1; - htt_tlv_filter.header_per_msdu = 0; - htt_tlv_filter.enable_fp = - (pdev->mon_filter_mode & MON_FILTER_PASS) ? 1 : 0; + htt_tlv_filter.enable_fp = 1; htt_tlv_filter.enable_md = 0; - htt_tlv_filter.enable_mo = - (pdev->mon_filter_mode & MON_FILTER_OTHER) ? 1 : 0; - htt_tlv_filter.fp_mgmt_filter = pdev->fp_mgmt_filter; - htt_tlv_filter.fp_ctrl_filter = pdev->fp_ctrl_filter; - htt_tlv_filter.fp_data_filter = pdev->fp_data_filter; - htt_tlv_filter.mo_mgmt_filter = pdev->mo_mgmt_filter; - htt_tlv_filter.mo_ctrl_filter = pdev->mo_ctrl_filter; - htt_tlv_filter.mo_data_filter = pdev->mo_data_filter; + htt_tlv_filter.enable_mo = 1; + if (pdev->mcopy_mode) { + htt_tlv_filter.packet_header = 1; + } + htt_tlv_filter.fp_mgmt_filter = FILTER_MGMT_ALL; + htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_ALL; + htt_tlv_filter.fp_data_filter = FILTER_DATA_ALL; + htt_tlv_filter.mo_mgmt_filter = FILTER_MGMT_ALL; + htt_tlv_filter.mo_ctrl_filter = FILTER_CTRL_ALL; + htt_tlv_filter.mo_data_filter = FILTER_DATA_ALL; for (mac_id = 0; mac_id < NUM_RXDMA_RINGS_PER_PDEV; mac_id++) { - int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, pdev_id); + int mac_for_pdev = dp_get_mac_id_for_pdev(mac_id, + pdev->pdev_id); htt_h2t_rx_ring_cfg(soc->htt_handle, mac_for_pdev, pdev->rxdma_mon_status_ring[mac_id].hal_srng, @@ -5819,8 +5825,7 @@ dp_ppdu_ring_cfg(struct dp_pdev *pdev) htt_tlv_filter.packet = 0; htt_tlv_filter.msdu_end = 0; htt_tlv_filter.mpdu_end = 0; - htt_tlv_filter.packet_header = 1; - htt_tlv_filter.attention = 1; + htt_tlv_filter.attention = 0; htt_tlv_filter.ppdu_start = 1; htt_tlv_filter.ppdu_end = 1; htt_tlv_filter.ppdu_end_user_stats = 1; @@ -5828,8 +5833,10 @@ dp_ppdu_ring_cfg(struct dp_pdev *pdev) htt_tlv_filter.ppdu_end_status_done = 1; htt_tlv_filter.enable_fp = 1; htt_tlv_filter.enable_md = 0; - if (pdev->mcopy_mode) + if (pdev->mcopy_mode) { + htt_tlv_filter.packet_header = 1; htt_tlv_filter.enable_mo = 1; + } htt_tlv_filter.fp_mgmt_filter = FILTER_MGMT_ALL; htt_tlv_filter.fp_ctrl_filter = FILTER_CTRL_ALL; htt_tlv_filter.fp_data_filter = FILTER_DATA_ALL; diff --git a/dp/wifi3.0/dp_rx_mon_dest.c b/dp/wifi3.0/dp_rx_mon_dest.c index ef7f839baa84..bfb57eb50cfc 100644 --- a/dp/wifi3.0/dp_rx_mon_dest.c +++ b/dp/wifi3.0/dp_rx_mon_dest.c @@ -141,14 +141,12 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, void *p_last_buf_addr_info; uint32_t rx_bufs_used = 0; uint32_t msdu_ppdu_id, msdu_cnt, last_ppdu_id; - uint32_t msdu_len; uint8_t *data; uint32_t i; uint32_t total_frag_len = 0, frag_len = 0; bool is_frag, is_first_msdu; bool check_ppdu_id = true; - msdu_len = 0; msdu = 0; last_ppdu_id = dp_pdev->ppdu_info.com_info.last_ppdu_id; @@ -259,7 +257,6 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, "%s total_len %u frag_len %u flags %u", __func__, total_frag_len, frag_len, msdu_list.msdu_info[i].msdu_flags); - msdu_len += frag_len; rx_pkt_offset = HAL_RX_MON_HW_RX_DESC_SIZE(); /* @@ -331,8 +328,6 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id, *tail_msdu = msdu; - dp_pdev->ppdu_info.rx_status.ppdu_len += msdu_len; - return rx_bufs_used; } @@ -789,6 +784,8 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota) if (ppdu_id != pdev->ppdu_info.com_info.ppdu_id) { pdev->mon_ppdu_status = DP_PPDU_STATUS_START; + qdf_mem_zero(&(pdev->ppdu_info.rx_status), + sizeof(pdev->ppdu_info.rx_status)); pdev->ppdu_info.com_info.last_ppdu_id = pdev->ppdu_info.com_info.ppdu_id; QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG, @@ -809,7 +806,6 @@ void dp_rx_mon_dest_process(struct dp_soc *soc, uint32_t mac_id, uint32_t quota) rxdma_dst_ring_desc = hal_srng_dst_get_next(hal_soc, mon_dst_srng); } - hal_srng_access_end(hal_soc, mon_dst_srng); qdf_spin_unlock_bh(&pdev->mon_lock); diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index 03ab9e922b6e..4eb0dbcb8539 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -374,18 +374,15 @@ dp_rx_mon_status_process_tlv(struct dp_soc *soc, uint32_t mac_id, } if (tlv_status == HAL_TLV_STATUS_PPDU_DONE) { - pdev->mon_ppdu_status = DP_PPDU_STATUS_DONE; - dp_rx_mon_dest_process(soc, mac_id, quota); if (pdev->enhanced_stats_en || pdev->mcopy_mode) dp_rx_handle_ppdu_stats(soc, pdev, ppdu_info); + pdev->mon_ppdu_status = DP_PPDU_STATUS_DONE; + dp_rx_mon_dest_process(soc, mac_id, quota); pdev->mon_ppdu_status = DP_PPDU_STATUS_START; pdev->ppdu_info.com_info.last_ppdu_id = pdev->ppdu_info.com_info.ppdu_id; - - qdf_mem_zero(&(pdev->ppdu_info.rx_status), - sizeof(pdev->ppdu_info.rx_status)); } } return;