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
parent 91be4be6de
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 * @mon_rx_bufs_reaped_dest: Rx buffer reap count
* @ppdu_id_mismatch: counter to track ppdu id mismatch in * @ppdu_id_mismatch: counter to track ppdu id mismatch in
* mointor status and monitor destination ring * 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 { struct cdp_pdev_mon_stats {
#ifndef REMOVE_MON_DBG_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_replenished_dest;
uint32_t mon_rx_bufs_reaped_dest; uint32_t mon_rx_bufs_reaped_dest;
uint32_t ppdu_id_mismatch; uint32_t ppdu_id_mismatch;
uint32_t ppdu_id_match;
}; };
#endif #endif

View File

@@ -2003,6 +2003,8 @@ static void dp_soc_interrupt_map_calculate_integrated(struct dp_soc *soc,
ppdu_end_interrupts_mac1 - j; ppdu_end_interrupts_mac1 - j;
irq_id_map[num_irq++] = irq_id_map[num_irq++] =
rxdma2host_monitor_status_ring_mac1 - j; rxdma2host_monitor_status_ring_mac1 - j;
irq_id_map[num_irq++] =
rxdma2host_monitor_destination_mac1 - j;
} }
if (rx_wbm_rel_ring_mask & (1 << 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_end_mis++;
rx_mon_stats->status_ppdu_state rx_mon_stats->status_ppdu_state
= CDP_MON_PPDU_START; = CDP_MON_PPDU_START;
ppdu_info->rx_state = HAL_RX_MON_PPDU_RESET;
} else if (ppdu_info->rx_state == } else if (ppdu_info->rx_state ==
HAL_RX_MON_PPDU_END) { HAL_RX_MON_PPDU_END) {
rx_mon_stats->status_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_compl++;
rx_mon_stats->status_ppdu_state rx_mon_stats->status_ppdu_state
= CDP_MON_PPDU_END; = 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, dp_tx_capture_get_user_id(dp_pdev,
rx_desc_tlv); 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 = dp_pdev->mon_last_linkdesc_paddr =
buf_info.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); DP_STATS_INC(pdev, dropped.mon_radiotap_update_err, 1);
goto mon_deliver_fail; goto mon_deliver_fail;
} }
pdev->monitor_vdev->osif_rx_mon(pdev->monitor_vdev->osif_vdev, pdev->monitor_vdev->osif_rx_mon(pdev->monitor_vdev->osif_vdev,
mon_mpdu, mon_mpdu,
&pdev->ppdu_info.rx_status); &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); rx_mon_stats->dup_mon_linkdesc_cnt);
DP_PRINT_STATS("dup_mon_buf_cnt = %d", DP_PRINT_STATS("dup_mon_buf_cnt = %d",
rx_mon_stats->dup_mon_buf_cnt); 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", DP_PRINT_STATS("mon_rx_buf_reaped = %u",
rx_mon_stats->mon_rx_bufs_reaped_dest); rx_mon_stats->mon_rx_bufs_reaped_dest);
DP_PRINT_STATS("mon_rx_buf_replenished = %u", DP_PRINT_STATS("mon_rx_buf_replenished = %u",
rx_mon_stats->mon_rx_bufs_replenished_dest); 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 = stat_ring_ppdu_ids =
(uint32_t *)qdf_mem_malloc(sizeof(uint32_t) * MAX_PPDU_ID_HIST); (uint32_t *)qdf_mem_malloc(sizeof(uint32_t) * MAX_PPDU_ID_HIST);
dest_ring_ppdu_ids = dest_ring_ppdu_ids =

View File

@@ -442,11 +442,13 @@ enum {
/** /**
* enum * enum
* @HAL_RX_MON_PPDU_START: PPDU start TLV is decoded in HAL * @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 { enum {
HAL_RX_MON_PPDU_START = 0, HAL_RX_MON_PPDU_START = 0,
HAL_RX_MON_PPDU_END, HAL_RX_MON_PPDU_END,
HAL_RX_MON_PPDU_RESET,
}; };
/* struct hal_rx_ppdu_common_info - common ppdu info /* struct hal_rx_ppdu_common_info - common ppdu info