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:
@@ -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
|
||||||
|
@@ -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))
|
||||||
|
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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);
|
||||||
|
@@ -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 =
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user