qcacmn: Add support for undecoded frame error stats

Display phyrx aborted undecoded frame count and the aborted
reason statistics as part of pdev rx mon stats.

Change-Id: Ia86074e62af3179855734b47801715abd1899fe1
CRs-Fixed: 3123540
This commit is contained in:
Basamma Yakkanahalli
2022-02-17 13:42:00 +05:30
committed by Madan Koyyalamudi
szülő 7908fb906c
commit 70f4513196
3 fájl változott, egészen pontosan 133 új sor hozzáadva és 1 régi sor törölve

Fájl megtekintése

@@ -214,6 +214,80 @@ enum {
CDP_MON_PPDU_END, CDP_MON_PPDU_END,
}; };
#ifdef QCA_UNDECODED_METADATA_SUPPORT
/**
* enum cdp_mon_phyrx_abort_reason_code: Phy err code to store the reason
* why PHY generated an abort request.
*/
enum cdp_mon_phyrx_abort_reason_code {
CDP_PHYRX_ERR_PHY_OFF = 0,
CDP_PHYRX_ERR_SYNTH_OFF,
CDP_PHYRX_ERR_OFDMA_TIMING,
CDP_PHYRX_ERR_OFDMA_SIGNAL_PARITY,
CDP_PHYRX_ERR_OFDMA_RATE_ILLEGAL,
CDP_PHYRX_ERR_OFDMA_LENGTH_ILLEGAL,
CDP_PHYRX_ERR_OFDMA_RESTART,
CDP_PHYRX_ERR_OFDMA_SERVICE,
CDP_PHYRX_ERR_PPDU_OFDMA_POWER_DROP,
CDP_PHYRX_ERR_CCK_BLOKKER,
CDP_PHYRX_ERR_CCK_TIMING = 10,
CDP_PHYRX_ERR_CCK_HEADER_CRC,
CDP_PHYRX_ERR_CCK_RATE_ILLEGAL,
CDP_PHYRX_ERR_CCK_LENGTH_ILLEGAL,
CDP_PHYRX_ERR_CCK_RESTART,
CDP_PHYRX_ERR_CCK_SERVICE,
CDP_PHYRX_ERR_CCK_POWER_DROP,
CDP_PHYRX_ERR_HT_CRC_ERR,
CDP_PHYRX_ERR_HT_LENGTH_ILLEGAL,
CDP_PHYRX_ERR_HT_RATE_ILLEGAL,
CDP_PHYRX_ERR_HT_ZLF = 20,
CDP_PHYRX_ERR_FALSE_RADAR_EXT,
CDP_PHYRX_ERR_GREEN_FIELD,
CDP_PHYRX_ERR_BW_GT_DYN_BW,
CDP_PHYRX_ERR_HT_LSIG_RATE_MISMATCH,
CDP_PHYRX_ERR_VHT_CRC_ERROR,
CDP_PHYRX_ERR_VHT_SIGA_UNSUPPORTED,
CDP_PHYRX_ERR_VHT_LSIG_LEN_INVALID,
CDP_PHYRX_ERR_VHT_NDP_OR_ZLF,
CDP_PHYRX_ERR_VHT_NSYM_LT_ZERO,
CDP_PHYRX_ERR_VHT_RX_EXTRA_SYMBOL_MISMATCH = 30,
CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID0,
CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID1TO62,
CDP_PHYRX_ERR_VHT_RX_SKIP_GROUP_ID63,
CDP_PHYRX_ERR_OFDM_LDPC_DECODER_DISABLED,
CDP_PHYRX_ERR_DEFER_NAP,
CDP_PHYRX_ERR_FDOMAIN_TIMEOUT,
CDP_PHYRX_ERR_LSIG_REL_CHECK,
CDP_PHYRX_ERR_BT_COLLISION,
CDP_PHYRX_ERR_UNSUPPORTED_MU_FEEDBACK,
CDP_PHYRX_ERR_PPDU_TX_INTERRUPT_RX = 40,
CDP_PHYRX_ERR_UNSUPPORTED_CBF,
CDP_PHYRX_ERR_OTHER,
CDP_PHYRX_ERR_HE_SIGA_UNSUPPORTED,
CDP_PHYRX_ERR_HE_SIGA_CRC_ERROR,
CDP_PHYRX_ERR_HE_SIGB_UNSUPPORTED,
CDP_PHYRX_ERR_HE_SIGB_CRC_ERROR,
CDP_PHYRX_ERR_HE_MU_MODE_UNSUPPORTED,
CDP_PHYRX_ERR_HE_NDP_OR_ZLF,
CDP_PHYRX_ERR_HE_NSYM_LT_ZERO,
CDP_PHYRX_ERR_HE_RU_PARAMS_UNSUPPORTED = 50,
CDP_PHYRX_ERR_HE_NUM_USERS_UNSUPPORTED,
CDP_PHYRX_ERR_HE_SOUNDING_PARAMS_UNSUPPORTED,
CDP_PHYRX_ERR_HE_EXT_SU_UNSUPPORTED,
CDP_PHYRX_ERR_HE_TRIG_UNSUPPORTED,
CDP_PHYRX_ERR_HE_LSIG_LEN_INVALID = 55,
CDP_PHYRX_ERR_HE_LSIG_RATE_MISMATCH,
CDP_PHYRX_ERR_OFDMA_SIGNAL_RELIABILITY,
CDP_PHYRX_ERR_HT_NSYM_LT_ZERO,
CDP_PHYRX_ERR_VHT_LSIG_RATE_MISMATCH,
CDP_PHYRX_ERR_VHT_PAID_GID_MISMATCH = 60,
CDP_PHYRX_ERR_VHT_UNSUPPORTED_BW,
CDP_PHYRX_ERR_VHT_GI_DISAM_MISMATCH,
CDP_PHYRX_ERR_RX_WDG_TIMEOUT = 63,
CDP_PHYRX_ERR_MAX
};
#endif
#define MAX_PPDU_ID_HIST 128 #define MAX_PPDU_ID_HIST 128
/** /**
@@ -242,6 +316,8 @@ enum {
* @dest_ppdu_drop: Number of ppdu dropped from monitor destination ring * @dest_ppdu_drop: Number of ppdu dropped from monitor destination ring
* @mon_link_desc_invalid: msdu link desc invalid count * @mon_link_desc_invalid: msdu link desc invalid count
* @mon_rx_desc_invalid: rx_desc invalid count * @mon_rx_desc_invalid: rx_desc invalid count
* @rx_undecoded_count: Received undecoded frame count
* @rx_undecoded_error: Rx undecoded errors
*/ */
struct cdp_pdev_mon_stats { struct cdp_pdev_mon_stats {
#ifndef REMOVE_MON_DBG_STATS #ifndef REMOVE_MON_DBG_STATS
@@ -273,5 +349,9 @@ struct cdp_pdev_mon_stats {
uint32_t mon_link_desc_invalid; uint32_t mon_link_desc_invalid;
uint32_t mon_rx_desc_invalid; uint32_t mon_rx_desc_invalid;
uint32_t mon_nbuf_sanity_err; uint32_t mon_nbuf_sanity_err;
#ifdef QCA_UNDECODED_METADATA_SUPPORT
uint32_t rx_undecoded_count;
uint32_t rx_undecoded_error[CDP_PHYRX_ERR_MAX];
#endif
}; };
#endif #endif

Fájl megtekintése

@@ -42,6 +42,11 @@
#include "dp_rx_mon_feature.h" #include "dp_rx_mon_feature.h"
#endif /* WLAN_RX_PKT_CAPTURE_ENH */ #endif /* WLAN_RX_PKT_CAPTURE_ENH */
#ifdef QCA_UNDECODED_METADATA_SUPPORT
#define MAX_STRING_LEN_PER_FIELD 6
#define DP_UNDECODED_ERR_LENGTH (MAX_STRING_LEN_PER_FIELD * CDP_PHYRX_ERR_MAX)
#endif
#ifdef QCA_MCOPY_SUPPORT #ifdef QCA_MCOPY_SUPPORT
static inline void static inline void
dp_pdev_disable_mcopy_code(struct dp_pdev *pdev) dp_pdev_disable_mcopy_code(struct dp_pdev *pdev)
@@ -767,6 +772,40 @@ QDF_STATUS dp_pdev_get_rx_mon_stats(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
return QDF_STATUS_SUCCESS; return QDF_STATUS_SUCCESS;
} }
#ifdef QCA_UNDECODED_METADATA_SUPPORT
/**
* dp_pdev_get_undecoded_capture_stats() - Get undecoded metadata captured
* monitor pdev stats
* @mon_pdev: Monitor PDEV handle
* @rx_mon_stats: Monitor pdev status/destination ring stats
*
* Return: None
*/
static inline void
dp_pdev_get_undecoded_capture_stats(struct dp_mon_pdev *mon_pdev,
struct cdp_pdev_mon_stats *rx_mon_stats)
{
char undecoded_error[DP_UNDECODED_ERR_LENGTH];
uint8_t index = 0, i;
DP_PRINT_STATS("Rx Undecoded Frame count:%d",
rx_mon_stats->rx_undecoded_count);
index = 0;
for (i = 0; i < (CDP_PHYRX_ERR_MAX); i++) {
index += qdf_snprint(&undecoded_error[index],
DP_UNDECODED_ERR_LENGTH - index,
" %d", rx_mon_stats->rx_undecoded_error[i]);
}
DP_PRINT_STATS("Undecoded Error (0-63):%s", undecoded_error);
}
#else
static inline void
dp_pdev_get_undecoded_capture_stats(struct dp_mon_pdev *mon_pdev,
struct cdp_pdev_mon_stats *rx_mon_stats)
{
}
#endif
void void
dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev) dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev)
{ {
@@ -848,6 +887,8 @@ dp_print_pdev_rx_mon_stats(struct dp_pdev *pdev)
qdf_mem_free(dest_ring_ppdu_ids); qdf_mem_free(dest_ring_ppdu_ids);
DP_PRINT_STATS("mon_rx_dest_stuck = %d", DP_PRINT_STATS("mon_rx_dest_stuck = %d",
rx_mon_stats->mon_rx_dest_stuck); rx_mon_stats->mon_rx_dest_stuck);
dp_pdev_get_undecoded_capture_stats(mon_pdev, rx_mon_stats);
} }
#ifdef QCA_SUPPORT_BPR #ifdef QCA_SUPPORT_BPR

Fájl megtekintése

@@ -1222,6 +1222,8 @@ dp_rx_handle_ppdu_undecoded_metadata(struct dp_soc *soc, struct dp_pdev *pdev,
{ {
qdf_nbuf_t ppdu_nbuf; qdf_nbuf_t ppdu_nbuf;
struct cdp_rx_indication_ppdu *cdp_rx_ppdu; struct cdp_rx_indication_ppdu *cdp_rx_ppdu;
uint8_t abort_reason = 0;
struct dp_mon_pdev *mon_pdev = pdev->monitor_pdev;
/* Return if RX_ABORT not set */ /* Return if RX_ABORT not set */
if (ppdu_info->rx_status.phyrx_abort == 0) if (ppdu_info->rx_status.phyrx_abort == 0)
@@ -1240,8 +1242,17 @@ dp_rx_handle_ppdu_undecoded_metadata(struct dp_soc *soc, struct dp_pdev *pdev,
ppdu_info, cdp_rx_ppdu); ppdu_info, cdp_rx_ppdu);
if (!qdf_nbuf_put_tail(ppdu_nbuf, if (!qdf_nbuf_put_tail(ppdu_nbuf,
sizeof(struct cdp_rx_indication_ppdu))) sizeof(struct cdp_rx_indication_ppdu))) {
return; return;
}
mon_pdev->rx_mon_stats.rx_undecoded_count++;
abort_reason = cdp_rx_ppdu->phyrx_abort_reason;
if (abort_reason < CDP_PHYRX_ERR_MAX) {
mon_pdev->rx_mon_stats.rx_undecoded_error[abort_reason] += 1;
} else {
mon_pdev->rx_mon_stats.rx_undecoded_error[CDP_PHYRX_ERR_OTHER] += 1;
}
dp_wdi_event_handler(WDI_EVENT_RX_PPDU_DESC_UNDECODED_METADATA, dp_wdi_event_handler(WDI_EVENT_RX_PPDU_DESC_UNDECODED_METADATA,
soc, ppdu_nbuf, HTT_INVALID_PEER, soc, ppdu_nbuf, HTT_INVALID_PEER,