qcacmn: enable monitor destination ring interrupt

Enable monitor destination ring interrupt to fix
packet is getting stuck in monitor mode.
Fix and add monitor mode debug count

Change-Id: I74efdcf6a4373dd73e373285c8cd3aa5757cd0b2
This commit is contained in:
Kai Chen 2020-03-06 14:49:39 -08:00 • committed by nshrivas
commit 93d8e4ae42
6 changed files with 20 additions and 4 deletions

View file

@ -223,6 +223,8 @@ enum {
* @mon_rx_bufs_reaped_dest: Rx buffer reap count
* @ppdu_id_mismatch: counter to track ppdu id mismatch in
* mointor status and monitor destination ring
* @ppdu_id_match: counter to track ppdu id match in
* mointor status and monitor destination ring
*/
struct cdp_pdev_mon_stats {
#ifndef REMOVE_MON_DBG_STATS
@ -247,5 +249,6 @@ struct cdp_pdev_mon_stats {
uint32_t mon_rx_bufs_replenished_dest;
uint32_t mon_rx_bufs_reaped_dest;
uint32_t ppdu_id_mismatch;
uint32_t ppdu_id_match;
};
#endif

View file

@ -2003,6 +2003,8 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
ppdu_end_interrupts_mac1 - j;
irq_id_map[num_irq++] =
rxdma2host_monitor_status_ring_mac1 - j;
irq_id_map[num_irq++] =
rxdma2host_monitor_destination_mac1 - j;
}
if (rx_wbm_rel_ring_mask & (1 << j))

View file

@ -330,6 +330,7 @@ dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
rx_mon_stats->status_ppdu_end_mis++;
rx_mon_stats->status_ppdu_state
= CDP_MON_PPDU_START;
ppdu_info->rx_state = HAL_RX_MON_PPDU_RESET;
} else if (ppdu_info->rx_state ==
HAL_RX_MON_PPDU_END) {
rx_mon_stats->status_ppdu_end++;
@ -340,6 +341,7 @@ dp_rx_mon_update_dbg_ppdu_stats(struct hal_rx_ppdu_info *ppdu_info,
rx_mon_stats->status_ppdu_compl++;
rx_mon_stats->status_ppdu_state
= CDP_MON_PPDU_END;
ppdu_info->rx_state = HAL_RX_MON_PPDU_RESET;
}
}

View file

@ -328,6 +328,12 @@ dp_rx_mon_mpdu_pop(struct dp_soc *soc, uint32_t mac_id,
dp_tx_capture_get_user_id(dp_pdev,
rx_desc_tlv);
if (*ppdu_id == msdu_ppdu_id)
dp_pdev->rx_mon_stats.ppdu_id_match++;
else
dp_pdev->rx_mon_stats.ppdu_id_mismatch
++;
dp_pdev->mon_last_linkdesc_paddr =
buf_info.paddr;
}
@ -892,7 +898,6 @@ QDF_STATUS dp_rx_mon_deliver(struct dp_soc *soc, uint32_t mac_id,
DP_STATS_INC(pdev, dropped.mon_radiotap_update_err, 1);
goto mon_deliver_fail;
}
pdev->monitor_vdev->osif_rx_mon(pdev->monitor_vdev->osif_vdev,
mon_mpdu,
&pdev->ppdu_info.rx_status);

View file

@ -5933,12 +5933,14 @@ dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev)
rx_mon_stats->dup_mon_linkdesc_cnt);
DP_PRINT_STATS("dup_mon_buf_cnt = %d",
rx_mon_stats->dup_mon_buf_cnt);
DP_PRINT_STATS("ppdu_id_mismatch = %u",
rx_mon_stats->ppdu_id_mismatch);
DP_PRINT_STATS("mon_rx_buf_reaped = %u",
rx_mon_stats->mon_rx_bufs_reaped_dest);
DP_PRINT_STATS("mon_rx_buf_replenished = %u",
rx_mon_stats->mon_rx_bufs_replenished_dest);
DP_PRINT_STATS("ppdu_id_mismatch = %u",
rx_mon_stats->ppdu_id_mismatch);
DP_PRINT_STATS("mpdu_ppdu_id_match_cnt = %d",
rx_mon_stats->ppdu_id_match);
stat_ring_ppdu_ids =
(uint32_t *)qdf_mem_malloc(sizeof(uint32_t) * MAX_PPDU_ID_HIST);
dest_ring_ppdu_ids =

View file

@ -442,11 +442,13 @@ enum {
/**
* enum
* @HAL_RX_MON_PPDU_START: PPDU start TLV is decoded in HAL
* @HAL_RX_MON_PPDU_END: PPDU end TLV is decided in HAL
* @HAL_RX_MON_PPDU_END: PPDU end TLV is decoded in HAL
* @HAL_RX_MON_PPDU_RESET: Not PPDU start and end TLV
*/
enum {
HAL_RX_MON_PPDU_START = 0,
HAL_RX_MON_PPDU_END,
HAL_RX_MON_PPDU_RESET,
};
/* struct hal_rx_ppdu_common_info - common ppdu info