|
@@ -127,13 +127,9 @@ bool is_dp_verbose_debug_enabled;
|
|
|
#define DP_WDS_AST_AGING_TIMER_CNT \
|
|
|
((DP_WDS_AST_AGING_TIMER_DEFAULT_MS / DP_AST_AGING_TIMER_DEFAULT_MS) - 1)
|
|
|
#define DP_MCS_LENGTH (6*MAX_MCS)
|
|
|
-#define DP_NSS_LENGTH (6*SS_COUNT)
|
|
|
-#define DP_MU_GROUP_SHOW 16
|
|
|
-#define DP_MU_GROUP_LENGTH (6 * DP_MU_GROUP_SHOW)
|
|
|
|
|
|
#define DP_RXDMA_ERR_LENGTH (6*HAL_RXDMA_ERR_MAX)
|
|
|
#define DP_REO_ERR_LENGTH (6*HAL_REO_ERR_MAX)
|
|
|
-#define DP_MAX_MCS_STRING_LEN 30
|
|
|
#define DP_CURR_FW_STATS_AVAIL 19
|
|
|
#define DP_HTT_DBG_EXT_STATS_MAX 256
|
|
|
#define DP_MAX_SLEEP_TIME 100
|
|
@@ -199,98 +195,6 @@ static uint8_t default_dscp_tid_map[DSCP_TID_MAP_MAX] = {
|
|
|
static uint8_t default_pcp_tid_map[PCP_TID_MAP_MAX] = {
|
|
|
0, 1, 2, 3, 4, 5, 6, 7,
|
|
|
};
|
|
|
-/*
|
|
|
- * struct dp_rate_debug
|
|
|
- *
|
|
|
- * @mcs_type: print string for a given mcs
|
|
|
- * @valid: valid mcs rate?
|
|
|
- */
|
|
|
-struct dp_rate_debug {
|
|
|
- char mcs_type[DP_MAX_MCS_STRING_LEN];
|
|
|
- uint8_t valid;
|
|
|
-};
|
|
|
-
|
|
|
-#define MCS_VALID 1
|
|
|
-#define MCS_INVALID 0
|
|
|
-
|
|
|
-static const struct dp_rate_debug dp_rate_string[DOT11_MAX][MAX_MCS] = {
|
|
|
-
|
|
|
- {
|
|
|
- {"OFDM 48 Mbps", MCS_VALID},
|
|
|
- {"OFDM 24 Mbps", MCS_VALID},
|
|
|
- {"OFDM 12 Mbps", MCS_VALID},
|
|
|
- {"OFDM 6 Mbps ", MCS_VALID},
|
|
|
- {"OFDM 54 Mbps", MCS_VALID},
|
|
|
- {"OFDM 36 Mbps", MCS_VALID},
|
|
|
- {"OFDM 18 Mbps", MCS_VALID},
|
|
|
- {"OFDM 9 Mbps ", MCS_VALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_VALID},
|
|
|
- },
|
|
|
- {
|
|
|
- {"CCK 11 Mbps Long ", MCS_VALID},
|
|
|
- {"CCK 5.5 Mbps Long ", MCS_VALID},
|
|
|
- {"CCK 2 Mbps Long ", MCS_VALID},
|
|
|
- {"CCK 1 Mbps Long ", MCS_VALID},
|
|
|
- {"CCK 11 Mbps Short ", MCS_VALID},
|
|
|
- {"CCK 5.5 Mbps Short", MCS_VALID},
|
|
|
- {"CCK 2 Mbps Short ", MCS_VALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_VALID},
|
|
|
- },
|
|
|
- {
|
|
|
- {"HT MCS 0 (BPSK 1/2) ", MCS_VALID},
|
|
|
- {"HT MCS 1 (QPSK 1/2) ", MCS_VALID},
|
|
|
- {"HT MCS 2 (QPSK 3/4) ", MCS_VALID},
|
|
|
- {"HT MCS 3 (16-QAM 1/2)", MCS_VALID},
|
|
|
- {"HT MCS 4 (16-QAM 3/4)", MCS_VALID},
|
|
|
- {"HT MCS 5 (64-QAM 2/3)", MCS_VALID},
|
|
|
- {"HT MCS 6 (64-QAM 3/4)", MCS_VALID},
|
|
|
- {"HT MCS 7 (64-QAM 5/6)", MCS_VALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_INVALID},
|
|
|
- {"INVALID ", MCS_VALID},
|
|
|
- },
|
|
|
- {
|
|
|
- {"VHT MCS 0 (BPSK 1/2) ", MCS_VALID},
|
|
|
- {"VHT MCS 1 (QPSK 1/2) ", MCS_VALID},
|
|
|
- {"VHT MCS 2 (QPSK 3/4) ", MCS_VALID},
|
|
|
- {"VHT MCS 3 (16-QAM 1/2) ", MCS_VALID},
|
|
|
- {"VHT MCS 4 (16-QAM 3/4) ", MCS_VALID},
|
|
|
- {"VHT MCS 5 (64-QAM 2/3) ", MCS_VALID},
|
|
|
- {"VHT MCS 6 (64-QAM 3/4) ", MCS_VALID},
|
|
|
- {"VHT MCS 7 (64-QAM 5/6) ", MCS_VALID},
|
|
|
- {"VHT MCS 8 (256-QAM 3/4) ", MCS_VALID},
|
|
|
- {"VHT MCS 9 (256-QAM 5/6) ", MCS_VALID},
|
|
|
- {"VHT MCS 10 (1024-QAM 3/4)", MCS_VALID},
|
|
|
- {"VHT MCS 11 (1024-QAM 5/6)", MCS_VALID},
|
|
|
- {"INVALID ", MCS_VALID},
|
|
|
- },
|
|
|
- {
|
|
|
- {"HE MCS 0 (BPSK 1/2) ", MCS_VALID},
|
|
|
- {"HE MCS 1 (QPSK 1/2) ", MCS_VALID},
|
|
|
- {"HE MCS 2 (QPSK 3/4) ", MCS_VALID},
|
|
|
- {"HE MCS 3 (16-QAM 1/2) ", MCS_VALID},
|
|
|
- {"HE MCS 4 (16-QAM 3/4) ", MCS_VALID},
|
|
|
- {"HE MCS 5 (64-QAM 2/3) ", MCS_VALID},
|
|
|
- {"HE MCS 6 (64-QAM 3/4) ", MCS_VALID},
|
|
|
- {"HE MCS 7 (64-QAM 5/6) ", MCS_VALID},
|
|
|
- {"HE MCS 8 (256-QAM 3/4) ", MCS_VALID},
|
|
|
- {"HE MCS 9 (256-QAM 5/6) ", MCS_VALID},
|
|
|
- {"HE MCS 10 (1024-QAM 3/4)", MCS_VALID},
|
|
|
- {"HE MCS 11 (1024-QAM 5/6)", MCS_VALID},
|
|
|
- {"INVALID ", MCS_VALID},
|
|
|
- }
|
|
|
-};
|
|
|
|
|
|
/**
|
|
|
* @brief Cpu to tx ring map
|
|
@@ -6553,13 +6457,7 @@ void dp_aggregate_vdev_stats(struct dp_vdev *vdev,
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * dp_aggregate_pdev_stats(): Consolidate stats at PDEV level
|
|
|
- * @pdev: DP PDEV handle
|
|
|
- *
|
|
|
- * return: void
|
|
|
- */
|
|
|
-static inline void dp_aggregate_pdev_stats(struct dp_pdev *pdev)
|
|
|
+void dp_aggregate_pdev_stats(struct dp_pdev *pdev)
|
|
|
{
|
|
|
struct dp_vdev *vdev = NULL;
|
|
|
struct dp_soc *soc;
|
|
@@ -7177,374 +7075,6 @@ dp_txrx_host_stats_clr(struct dp_vdev *vdev)
|
|
|
#endif
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * dp_print_common_rates_info(): Print common rate for tx or rx
|
|
|
- * @pkt_type_array: rate type array contains rate info
|
|
|
- *
|
|
|
- * Return:void
|
|
|
- */
|
|
|
-static inline void
|
|
|
-dp_print_common_rates_info(struct cdp_pkt_type *pkt_type_array)
|
|
|
-{
|
|
|
- uint8_t mcs, pkt_type;
|
|
|
-
|
|
|
- for (pkt_type = 0; pkt_type < DOT11_MAX; pkt_type++) {
|
|
|
- for (mcs = 0; mcs < MAX_MCS; mcs++) {
|
|
|
- if (!dp_rate_string[pkt_type][mcs].valid)
|
|
|
- continue;
|
|
|
-
|
|
|
- DP_PRINT_STATS(" %s = %d",
|
|
|
- dp_rate_string[pkt_type][mcs].mcs_type,
|
|
|
- pkt_type_array[pkt_type].mcs_count[mcs]);
|
|
|
- }
|
|
|
-
|
|
|
- DP_PRINT_STATS("\n");
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * dp_print_rx_rates(): Print Rx rate stats
|
|
|
- * @vdev: DP_VDEV handle
|
|
|
- *
|
|
|
- * Return:void
|
|
|
- */
|
|
|
-static inline void
|
|
|
-dp_print_rx_rates(struct dp_vdev *vdev)
|
|
|
-{
|
|
|
- struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
|
|
|
- uint8_t i;
|
|
|
- uint8_t index = 0;
|
|
|
- char nss[DP_NSS_LENGTH];
|
|
|
-
|
|
|
- DP_PRINT_STATS("Rx Rate Info:\n");
|
|
|
- dp_print_common_rates_info(pdev->stats.rx.pkt_type);
|
|
|
-
|
|
|
-
|
|
|
- index = 0;
|
|
|
- for (i = 0; i < SS_COUNT; i++) {
|
|
|
- index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
|
|
|
- " %d", pdev->stats.rx.nss[i]);
|
|
|
- }
|
|
|
- DP_PRINT_STATS("NSS(1-8) = %s",
|
|
|
- nss);
|
|
|
-
|
|
|
- DP_PRINT_STATS("SGI ="
|
|
|
- " 0.8us %d,"
|
|
|
- " 0.4us %d,"
|
|
|
- " 1.6us %d,"
|
|
|
- " 3.2us %d,",
|
|
|
- pdev->stats.rx.sgi_count[0],
|
|
|
- pdev->stats.rx.sgi_count[1],
|
|
|
- pdev->stats.rx.sgi_count[2],
|
|
|
- pdev->stats.rx.sgi_count[3]);
|
|
|
- DP_PRINT_STATS("BW Counts = 20MHZ %d, 40MHZ %d, 80MHZ %d, 160MHZ %d",
|
|
|
- pdev->stats.rx.bw[0], pdev->stats.rx.bw[1],
|
|
|
- pdev->stats.rx.bw[2], pdev->stats.rx.bw[3]);
|
|
|
- DP_PRINT_STATS("Reception Type ="
|
|
|
- " SU: %d,"
|
|
|
- " MU_MIMO:%d,"
|
|
|
- " MU_OFDMA:%d,"
|
|
|
- " MU_OFDMA_MIMO:%d\n",
|
|
|
- pdev->stats.rx.reception_type[0],
|
|
|
- pdev->stats.rx.reception_type[1],
|
|
|
- pdev->stats.rx.reception_type[2],
|
|
|
- pdev->stats.rx.reception_type[3]);
|
|
|
- DP_PRINT_STATS("Aggregation:\n");
|
|
|
- DP_PRINT_STATS("Number of Msdu's Part of Ampdus = %d",
|
|
|
- pdev->stats.rx.ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's With No Mpdu Level Aggregation : %d",
|
|
|
- pdev->stats.rx.non_ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's Part of Amsdu: %d",
|
|
|
- pdev->stats.rx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's With No Msdu Level Aggregation: %d",
|
|
|
- pdev->stats.rx.non_amsdu_cnt);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * dp_print_tx_rates(): Print tx rates
|
|
|
- * @vdev: DP_VDEV handle
|
|
|
- *
|
|
|
- * Return:void
|
|
|
- */
|
|
|
-static inline void
|
|
|
-dp_print_tx_rates(struct dp_vdev *vdev)
|
|
|
-{
|
|
|
- struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev;
|
|
|
-
|
|
|
- DP_PRINT_STATS("Tx Rate Info:\n");
|
|
|
- dp_print_common_rates_info(pdev->stats.tx.pkt_type);
|
|
|
-
|
|
|
- DP_PRINT_STATS("SGI ="
|
|
|
- " 0.8us %d"
|
|
|
- " 0.4us %d"
|
|
|
- " 1.6us %d"
|
|
|
- " 3.2us %d",
|
|
|
- pdev->stats.tx.sgi_count[0],
|
|
|
- pdev->stats.tx.sgi_count[1],
|
|
|
- pdev->stats.tx.sgi_count[2],
|
|
|
- pdev->stats.tx.sgi_count[3]);
|
|
|
-
|
|
|
- DP_PRINT_STATS("BW Counts = 20MHZ %d, 40MHZ %d, 80MHZ %d, 160MHZ %d",
|
|
|
- pdev->stats.tx.bw[0], pdev->stats.tx.bw[1],
|
|
|
- pdev->stats.tx.bw[2], pdev->stats.tx.bw[3]);
|
|
|
-
|
|
|
- DP_PRINT_STATS("OFDMA = %d", pdev->stats.tx.ofdma);
|
|
|
- DP_PRINT_STATS("STBC = %d", pdev->stats.tx.stbc);
|
|
|
- DP_PRINT_STATS("LDPC = %d", pdev->stats.tx.ldpc);
|
|
|
- DP_PRINT_STATS("Retries = %d", pdev->stats.tx.retries);
|
|
|
- DP_PRINT_STATS("Last ack rssi = %d\n", pdev->stats.tx.last_ack_rssi);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Aggregation:\n");
|
|
|
- DP_PRINT_STATS("Number of Msdu's Part of Ampdus = %d",
|
|
|
- pdev->stats.tx.ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's With No Mpdu Level Aggregation : %d",
|
|
|
- pdev->stats.tx.non_ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's Part of Amsdu = %d",
|
|
|
- pdev->stats.tx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS("Number of Msdu's With No Msdu Level Aggregation = %d",
|
|
|
- pdev->stats.tx.non_amsdu_cnt);
|
|
|
-}
|
|
|
-
|
|
|
-/**
|
|
|
- * dp_print_peer_stats():print peer stats
|
|
|
- * @peer: DP_PEER handle
|
|
|
- *
|
|
|
- * return void
|
|
|
- */
|
|
|
-static inline void dp_print_peer_stats(struct dp_peer *peer)
|
|
|
-{
|
|
|
- uint8_t i;
|
|
|
- uint32_t index;
|
|
|
- uint32_t j;
|
|
|
- char nss[DP_NSS_LENGTH];
|
|
|
- char mu_group_id[DP_MU_GROUP_LENGTH];
|
|
|
-
|
|
|
- DP_PRINT_STATS("Node Tx Stats:\n");
|
|
|
- DP_PRINT_STATS("Total Packet Completions = %d",
|
|
|
- peer->stats.tx.comp_pkt.num);
|
|
|
- DP_PRINT_STATS("Total Bytes Completions = %llu",
|
|
|
- peer->stats.tx.comp_pkt.bytes);
|
|
|
- DP_PRINT_STATS("Success Packets = %d",
|
|
|
- peer->stats.tx.tx_success.num);
|
|
|
- DP_PRINT_STATS("Success Bytes = %llu",
|
|
|
- peer->stats.tx.tx_success.bytes);
|
|
|
- DP_PRINT_STATS("Unicast Success Packets = %d",
|
|
|
- peer->stats.tx.ucast.num);
|
|
|
- DP_PRINT_STATS("Unicast Success Bytes = %llu",
|
|
|
- peer->stats.tx.ucast.bytes);
|
|
|
- DP_PRINT_STATS("Multicast Success Packets = %d",
|
|
|
- peer->stats.tx.mcast.num);
|
|
|
- DP_PRINT_STATS("Multicast Success Bytes = %llu",
|
|
|
- peer->stats.tx.mcast.bytes);
|
|
|
- DP_PRINT_STATS("Broadcast Success Packets = %d",
|
|
|
- peer->stats.tx.bcast.num);
|
|
|
- DP_PRINT_STATS("Broadcast Success Bytes = %llu",
|
|
|
- peer->stats.tx.bcast.bytes);
|
|
|
- DP_PRINT_STATS("Packets Failed = %d",
|
|
|
- peer->stats.tx.tx_failed);
|
|
|
- DP_PRINT_STATS("Packets In OFDMA = %d",
|
|
|
- peer->stats.tx.ofdma);
|
|
|
- DP_PRINT_STATS("Packets In STBC = %d",
|
|
|
- peer->stats.tx.stbc);
|
|
|
- DP_PRINT_STATS("Packets In LDPC = %d",
|
|
|
- peer->stats.tx.ldpc);
|
|
|
- DP_PRINT_STATS("Packet Retries = %d",
|
|
|
- peer->stats.tx.retries);
|
|
|
- DP_PRINT_STATS("MSDU's Part of AMSDU = %d",
|
|
|
- peer->stats.tx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS("Msdu's As Part of Ampdu = %d",
|
|
|
- peer->stats.tx.non_ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Msdu's As Ampdu = %d",
|
|
|
- peer->stats.tx.ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Last Packet RSSI = %d",
|
|
|
- peer->stats.tx.last_ack_rssi);
|
|
|
- DP_PRINT_STATS("Dropped At FW: Removed Pkts = %u",
|
|
|
- peer->stats.tx.dropped.fw_rem.num);
|
|
|
- DP_PRINT_STATS("Dropped At FW: Removed bytes = %llu",
|
|
|
- peer->stats.tx.dropped.fw_rem.bytes);
|
|
|
- DP_PRINT_STATS("Dropped At FW: Removed transmitted = %d",
|
|
|
- peer->stats.tx.dropped.fw_rem_tx);
|
|
|
- DP_PRINT_STATS("Dropped At FW: Removed Untransmitted = %d",
|
|
|
- peer->stats.tx.dropped.fw_rem_notx);
|
|
|
- DP_PRINT_STATS("Dropped : Age Out = %d",
|
|
|
- peer->stats.tx.dropped.age_out);
|
|
|
- DP_PRINT_STATS("NAWDS : ");
|
|
|
- DP_PRINT_STATS(" Nawds multicast Drop Tx Packet = %d",
|
|
|
- peer->stats.tx.nawds_mcast_drop);
|
|
|
- DP_PRINT_STATS(" Nawds multicast Tx Packet Count = %d",
|
|
|
- peer->stats.tx.nawds_mcast.num);
|
|
|
- DP_PRINT_STATS(" Nawds multicast Tx Packet Bytes = %llu",
|
|
|
- peer->stats.tx.nawds_mcast.bytes);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Rate Info:");
|
|
|
- dp_print_common_rates_info(peer->stats.tx.pkt_type);
|
|
|
-
|
|
|
-
|
|
|
- DP_PRINT_STATS("SGI = "
|
|
|
- " 0.8us %d"
|
|
|
- " 0.4us %d"
|
|
|
- " 1.6us %d"
|
|
|
- " 3.2us %d",
|
|
|
- peer->stats.tx.sgi_count[0],
|
|
|
- peer->stats.tx.sgi_count[1],
|
|
|
- peer->stats.tx.sgi_count[2],
|
|
|
- peer->stats.tx.sgi_count[3]);
|
|
|
- DP_PRINT_STATS("Excess Retries per AC ");
|
|
|
- DP_PRINT_STATS(" Best effort = %d",
|
|
|
- peer->stats.tx.excess_retries_per_ac[0]);
|
|
|
- DP_PRINT_STATS(" Background= %d",
|
|
|
- peer->stats.tx.excess_retries_per_ac[1]);
|
|
|
- DP_PRINT_STATS(" Video = %d",
|
|
|
- peer->stats.tx.excess_retries_per_ac[2]);
|
|
|
- DP_PRINT_STATS(" Voice = %d",
|
|
|
- peer->stats.tx.excess_retries_per_ac[3]);
|
|
|
- DP_PRINT_STATS("BW Counts = 20MHZ %d 40MHZ %d 80MHZ %d 160MHZ %d\n",
|
|
|
- peer->stats.tx.bw[0], peer->stats.tx.bw[1],
|
|
|
- peer->stats.tx.bw[2], peer->stats.tx.bw[3]);
|
|
|
-
|
|
|
- index = 0;
|
|
|
- for (i = 0; i < SS_COUNT; i++) {
|
|
|
- index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
|
|
|
- " %d", peer->stats.tx.nss[i]);
|
|
|
- }
|
|
|
- DP_PRINT_STATS("NSS(1-8) = %s", nss);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Transmit Type :");
|
|
|
- DP_PRINT_STATS("SU %d, MU_MIMO %d, MU_OFDMA %d, MU_MIMO_OFDMA %d",
|
|
|
- peer->stats.tx.transmit_type[0],
|
|
|
- peer->stats.tx.transmit_type[1],
|
|
|
- peer->stats.tx.transmit_type[2],
|
|
|
- peer->stats.tx.transmit_type[3]);
|
|
|
-
|
|
|
- for (i = 0; i < MAX_MU_GROUP_ID;) {
|
|
|
- index = 0;
|
|
|
- for (j = 0; j < DP_MU_GROUP_SHOW && i < MAX_MU_GROUP_ID;
|
|
|
- j++) {
|
|
|
- index += qdf_snprint(&mu_group_id[index],
|
|
|
- DP_MU_GROUP_LENGTH - index,
|
|
|
- " %d",
|
|
|
- peer->stats.tx.mu_group_id[i]);
|
|
|
- i++;
|
|
|
- }
|
|
|
-
|
|
|
- DP_PRINT_STATS("User position list for GID %02d->%d: [%s]",
|
|
|
- i - DP_MU_GROUP_SHOW, i - 1, mu_group_id);
|
|
|
- }
|
|
|
-
|
|
|
- DP_PRINT_STATS("Last Packet RU index [%d], Size [%d]",
|
|
|
- peer->stats.tx.ru_start, peer->stats.tx.ru_tones);
|
|
|
- DP_PRINT_STATS("RU Locations RU[26 52 106 242 484 996]:");
|
|
|
- DP_PRINT_STATS("RU_26: %d", peer->stats.tx.ru_loc[0]);
|
|
|
- DP_PRINT_STATS("RU 52: %d", peer->stats.tx.ru_loc[1]);
|
|
|
- DP_PRINT_STATS("RU 106: %d", peer->stats.tx.ru_loc[2]);
|
|
|
- DP_PRINT_STATS("RU 242: %d", peer->stats.tx.ru_loc[3]);
|
|
|
- DP_PRINT_STATS("RU 484: %d", peer->stats.tx.ru_loc[4]);
|
|
|
- DP_PRINT_STATS("RU 996: %d", peer->stats.tx.ru_loc[5]);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Aggregation:");
|
|
|
- DP_PRINT_STATS(" Number of Msdu's Part of Amsdu = %d",
|
|
|
- peer->stats.tx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS(" Number of Msdu's With No Msdu Level Aggregation = %d\n",
|
|
|
- peer->stats.tx.non_amsdu_cnt);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Bytes and Packets transmitted in last one sec:");
|
|
|
- DP_PRINT_STATS(" Bytes transmitted in last sec: %d",
|
|
|
- peer->stats.tx.tx_byte_rate);
|
|
|
- DP_PRINT_STATS(" Data transmitted in last sec: %d",
|
|
|
- peer->stats.tx.tx_data_rate);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Node Rx Stats:");
|
|
|
- DP_PRINT_STATS("Packets Sent To Stack = %d",
|
|
|
- peer->stats.rx.to_stack.num);
|
|
|
- DP_PRINT_STATS("Bytes Sent To Stack = %llu",
|
|
|
- peer->stats.rx.to_stack.bytes);
|
|
|
- for (i = 0; i < CDP_MAX_RX_RINGS; i++) {
|
|
|
- DP_PRINT_STATS("Ring Id = %d", i);
|
|
|
- DP_PRINT_STATS(" Packets Received = %d",
|
|
|
- peer->stats.rx.rcvd_reo[i].num);
|
|
|
- DP_PRINT_STATS(" Bytes Received = %llu",
|
|
|
- peer->stats.rx.rcvd_reo[i].bytes);
|
|
|
- }
|
|
|
- DP_PRINT_STATS("Multicast Packets Received = %d",
|
|
|
- peer->stats.rx.multicast.num);
|
|
|
- DP_PRINT_STATS("Multicast Bytes Received = %llu",
|
|
|
- peer->stats.rx.multicast.bytes);
|
|
|
- DP_PRINT_STATS("Broadcast Packets Received = %d",
|
|
|
- peer->stats.rx.bcast.num);
|
|
|
- DP_PRINT_STATS("Broadcast Bytes Received = %llu",
|
|
|
- peer->stats.rx.bcast.bytes);
|
|
|
- DP_PRINT_STATS("Intra BSS Packets Received = %d",
|
|
|
- peer->stats.rx.intra_bss.pkts.num);
|
|
|
- DP_PRINT_STATS("Intra BSS Bytes Received = %llu",
|
|
|
- peer->stats.rx.intra_bss.pkts.bytes);
|
|
|
- DP_PRINT_STATS("Raw Packets Received = %d",
|
|
|
- peer->stats.rx.raw.num);
|
|
|
- DP_PRINT_STATS("Raw Bytes Received = %llu",
|
|
|
- peer->stats.rx.raw.bytes);
|
|
|
- DP_PRINT_STATS("Errors: MIC Errors = %d",
|
|
|
- peer->stats.rx.err.mic_err);
|
|
|
- DP_PRINT_STATS("Erros: Decryption Errors = %d",
|
|
|
- peer->stats.rx.err.decrypt_err);
|
|
|
- DP_PRINT_STATS("Msdu's Received As Part of Ampdu = %d",
|
|
|
- peer->stats.rx.non_ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Msdu's Recived As Ampdu = %d",
|
|
|
- peer->stats.rx.ampdu_cnt);
|
|
|
- DP_PRINT_STATS("Msdu's Received Not Part of Amsdu's = %d",
|
|
|
- peer->stats.rx.non_amsdu_cnt);
|
|
|
- DP_PRINT_STATS("MSDUs Received As Part of Amsdu = %d",
|
|
|
- peer->stats.rx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS("NAWDS : ");
|
|
|
- DP_PRINT_STATS(" Nawds multicast Drop Rx Packet = %d",
|
|
|
- peer->stats.rx.nawds_mcast_drop);
|
|
|
- DP_PRINT_STATS("SGI ="
|
|
|
- " 0.8us %d"
|
|
|
- " 0.4us %d"
|
|
|
- " 1.6us %d"
|
|
|
- " 3.2us %d",
|
|
|
- peer->stats.rx.sgi_count[0],
|
|
|
- peer->stats.rx.sgi_count[1],
|
|
|
- peer->stats.rx.sgi_count[2],
|
|
|
- peer->stats.rx.sgi_count[3]);
|
|
|
- DP_PRINT_STATS("BW Counts = 20MHZ %d 40MHZ %d 80MHZ %d 160MHZ %d",
|
|
|
- peer->stats.rx.bw[0], peer->stats.rx.bw[1],
|
|
|
- peer->stats.rx.bw[2], peer->stats.rx.bw[3]);
|
|
|
- DP_PRINT_STATS("Reception Type ="
|
|
|
- " SU %d,"
|
|
|
- " MU_MIMO %d,"
|
|
|
- " MU_OFDMA %d,"
|
|
|
- " MU_OFDMA_MIMO %d",
|
|
|
- peer->stats.rx.reception_type[0],
|
|
|
- peer->stats.rx.reception_type[1],
|
|
|
- peer->stats.rx.reception_type[2],
|
|
|
- peer->stats.rx.reception_type[3]);
|
|
|
-
|
|
|
- dp_print_common_rates_info(peer->stats.rx.pkt_type);
|
|
|
-
|
|
|
- index = 0;
|
|
|
- for (i = 0; i < SS_COUNT; i++) {
|
|
|
- index += qdf_snprint(&nss[index], DP_NSS_LENGTH - index,
|
|
|
- " %d", peer->stats.rx.nss[i]);
|
|
|
- }
|
|
|
- DP_PRINT_STATS("NSS(1-8) = %s",
|
|
|
- nss);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Aggregation:");
|
|
|
- DP_PRINT_STATS(" Msdu's Part of Ampdu = %d",
|
|
|
- peer->stats.rx.ampdu_cnt);
|
|
|
- DP_PRINT_STATS(" Msdu's With No Mpdu Level Aggregation = %d",
|
|
|
- peer->stats.rx.non_ampdu_cnt);
|
|
|
- DP_PRINT_STATS(" Msdu's Part of Amsdu = %d",
|
|
|
- peer->stats.rx.amsdu_cnt);
|
|
|
- DP_PRINT_STATS(" Msdu's With No Msdu Level Aggregation = %d",
|
|
|
- peer->stats.rx.non_amsdu_cnt);
|
|
|
-
|
|
|
- DP_PRINT_STATS("Bytes and Packets received in last one sec:");
|
|
|
- DP_PRINT_STATS(" Bytes received in last sec: %d",
|
|
|
- peer->stats.rx.rx_byte_rate);
|
|
|
- DP_PRINT_STATS(" Data received in last sec: %d",
|
|
|
- peer->stats.rx.rx_data_rate);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* dp_get_host_peer_stats()- function to print peer stats
|
|
|
* @pdev_handle: DP_PDEV handle
|
|
@@ -8598,216 +8128,6 @@ QDF_STATUS dp_txrx_stats_request(struct cdp_vdev *vdev,
|
|
|
return QDF_STATUS_SUCCESS;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * dp_print_per_ring_stats(): Packet count per ring
|
|
|
- * @soc - soc handle
|
|
|
- */
|
|
|
-static void dp_print_per_ring_stats(struct dp_soc *soc)
|
|
|
-{
|
|
|
- uint8_t ring;
|
|
|
- uint16_t core;
|
|
|
- uint64_t total_packets;
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Reo packets per ring:");
|
|
|
- for (ring = 0; ring < MAX_REO_DEST_RINGS; ring++) {
|
|
|
- total_packets = 0;
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "Packets on ring %u:", ring);
|
|
|
- for (core = 0; core < NR_CPUS; core++) {
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "Packets arriving on core %u: %llu",
|
|
|
- core,
|
|
|
- soc->stats.rx.ring_packets[core][ring]);
|
|
|
- total_packets += soc->stats.rx.ring_packets[core][ring];
|
|
|
- }
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "Total packets on ring %u: %llu",
|
|
|
- ring, total_packets);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * dp_txrx_path_stats() - Function to display dump stats
|
|
|
- * @soc - soc handle
|
|
|
- *
|
|
|
- * return: none
|
|
|
- */
|
|
|
-static void dp_txrx_path_stats(struct dp_soc *soc)
|
|
|
-{
|
|
|
- uint8_t error_code;
|
|
|
- uint8_t loop_pdev;
|
|
|
- struct dp_pdev *pdev;
|
|
|
- uint8_t i;
|
|
|
-
|
|
|
- if (!soc) {
|
|
|
- DP_TRACE(ERROR, "%s: Invalid access",
|
|
|
- __func__);
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- for (loop_pdev = 0; loop_pdev < soc->pdev_count; loop_pdev++) {
|
|
|
-
|
|
|
- pdev = soc->pdev_list[loop_pdev];
|
|
|
- dp_aggregate_pdev_stats(pdev);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Tx path Statistics:");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "from stack: %u msdus (%llu bytes)",
|
|
|
- pdev->stats.tx_i.rcvd.num,
|
|
|
- pdev->stats.tx_i.rcvd.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "processed from host: %u msdus (%llu bytes)",
|
|
|
- pdev->stats.tx_i.processed.num,
|
|
|
- pdev->stats.tx_i.processed.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "successfully transmitted: %u msdus (%llu bytes)",
|
|
|
- pdev->stats.tx.tx_success.num,
|
|
|
- pdev->stats.tx.tx_success.bytes);
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Dropped in host:");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Total packets dropped: %u,",
|
|
|
- pdev->stats.tx_i.dropped.dropped_pkt.num);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Descriptor not available: %u",
|
|
|
- pdev->stats.tx_i.dropped.desc_na.num);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Ring full: %u",
|
|
|
- pdev->stats.tx_i.dropped.ring_full);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Enqueue fail: %u",
|
|
|
- pdev->stats.tx_i.dropped.enqueue_fail);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "DMA Error: %u",
|
|
|
- pdev->stats.tx_i.dropped.dma_error);
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Dropped in hardware:");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "total packets dropped: %u",
|
|
|
- pdev->stats.tx.tx_failed);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "mpdu age out: %u",
|
|
|
- pdev->stats.tx.dropped.age_out);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "firmware removed packets: %u",
|
|
|
- pdev->stats.tx.dropped.fw_rem.num);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "firmware removed bytes: %llu",
|
|
|
- pdev->stats.tx.dropped.fw_rem.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "firmware removed tx: %u",
|
|
|
- pdev->stats.tx.dropped.fw_rem_tx);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "firmware removed notx %u",
|
|
|
- pdev->stats.tx.dropped.fw_rem_notx);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Invalid peer on tx path: %u",
|
|
|
- pdev->soc->stats.tx.tx_invalid_peer.num);
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Tx packets sent per interrupt:");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Single Packet: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_1);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "2-20 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_2_20);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "21-40 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_21_40);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "41-60 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_41_60);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "61-80 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_61_80);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "81-100 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_81_100);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "101-200 Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_101_200);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, " 201+ Packets: %u",
|
|
|
- pdev->stats.tx_comp_histogram.pkts_201_plus);
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Rx path statistics");
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "delivered %u msdus ( %llu bytes),",
|
|
|
- pdev->stats.rx.to_stack.num,
|
|
|
- pdev->stats.rx.to_stack.bytes);
|
|
|
- for (i = 0; i < CDP_MAX_RX_RINGS; i++)
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "received on reo[%d] %u msdus( %llu bytes),",
|
|
|
- i, pdev->stats.rx.rcvd_reo[i].num,
|
|
|
- pdev->stats.rx.rcvd_reo[i].bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "intra-bss packets %u msdus ( %llu bytes),",
|
|
|
- pdev->stats.rx.intra_bss.pkts.num,
|
|
|
- pdev->stats.rx.intra_bss.pkts.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "intra-bss fails %u msdus ( %llu bytes),",
|
|
|
- pdev->stats.rx.intra_bss.fail.num,
|
|
|
- pdev->stats.rx.intra_bss.fail.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "raw packets %u msdus ( %llu bytes),",
|
|
|
- pdev->stats.rx.raw.num,
|
|
|
- pdev->stats.rx.raw.bytes);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "mic errors %u",
|
|
|
- pdev->stats.rx.err.mic_err);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Invalid peer on rx path: %u",
|
|
|
- pdev->soc->stats.rx.err.rx_invalid_peer.num);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "sw_peer_id invalid %u",
|
|
|
- pdev->soc->stats.rx.err.rx_invalid_peer_id.num);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "packet_len invalid %u",
|
|
|
- pdev->soc->stats.rx.err.rx_invalid_pkt_len.num);
|
|
|
-
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Reo Statistics");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "rbm error: %u msdus",
|
|
|
- pdev->soc->stats.rx.err.invalid_rbm);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "hal ring access fail: %u msdus",
|
|
|
- pdev->soc->stats.rx.err.hal_ring_access_fail);
|
|
|
-
|
|
|
- for (error_code = 0; error_code < HAL_REO_ERR_MAX;
|
|
|
- error_code++) {
|
|
|
- if (!pdev->soc->stats.rx.err.reo_error[error_code])
|
|
|
- continue;
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "Reo error number (%u): %u msdus",
|
|
|
- error_code,
|
|
|
- pdev->soc->stats.rx.err
|
|
|
- .reo_error[error_code]);
|
|
|
- }
|
|
|
-
|
|
|
- for (error_code = 0; error_code < HAL_RXDMA_ERR_MAX;
|
|
|
- error_code++) {
|
|
|
- if (!pdev->soc->stats.rx.err.rxdma_error[error_code])
|
|
|
- continue;
|
|
|
- DP_TRACE_STATS(INFO_HIGH,
|
|
|
- "Rxdma error number (%u): %u msdus",
|
|
|
- error_code,
|
|
|
- pdev->soc->stats.rx.err
|
|
|
- .rxdma_error[error_code]);
|
|
|
- }
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Rx packets reaped per interrupt:");
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "Single Packet: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_1);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "2-20 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_2_20);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "21-40 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_21_40);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "41-60 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_41_60);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "61-80 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_61_80);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "81-100 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_81_100);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "101-200 Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_101_200);
|
|
|
- DP_TRACE_STATS(INFO_HIGH, " 201+ Packets: %u",
|
|
|
- pdev->stats.rx_ind_histogram.pkts_201_plus);
|
|
|
-
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "%s: tso_enable: %u lro_enable: %u rx_hash: %u napi_enable: %u",
|
|
|
- __func__,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->tso_enabled,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->lro_enabled,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->rx_hash,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->napi_enabled);
|
|
|
-#ifdef QCA_LL_TX_FLOW_CONTROL_V2
|
|
|
- DP_TRACE_STATS(INFO_HIGH, "%s: Tx flow stop queue: %u tx flow start queue offset: %u",
|
|
|
- __func__,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->tx_flow_stop_queue_threshold,
|
|
|
- pdev->soc->wlan_cfg_ctx
|
|
|
- ->tx_flow_start_queue_offset);
|
|
|
-#endif
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* dp_txrx_dump_stats() - Dump statistics
|
|
|
* @value - Statistics option
|