diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 137e6ac07396..1d48d98c4edf 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -186,17 +186,19 @@ enum htt_cmn_dbg_stats_type { * @TXRX_CLEAR_STATS: clear all host stats * @TXRX_SRNG_PTR_STATS: Print SRNG pointer stats * @TXRX_RX_MON_STATS: Print monitor mode stats + * @TXRX_REO_QUEUE_STATS: Print Per peer REO Queue Stats */ enum cdp_host_txrx_stats { TXRX_HOST_STATS_INVALID = -1, - TXRX_CLEAR_STATS = 0, - TXRX_RX_RATE_STATS = 1, - TXRX_TX_RATE_STATS = 2, - TXRX_TX_HOST_STATS = 3, - TXRX_RX_HOST_STATS = 4, - TXRX_AST_STATS = 5, - TXRX_SRNG_PTR_STATS = 6, - TXRX_RX_MON_STATS = 7, + TXRX_CLEAR_STATS = 0, + TXRX_RX_RATE_STATS = 1, + TXRX_TX_RATE_STATS = 2, + TXRX_TX_HOST_STATS = 3, + TXRX_RX_HOST_STATS = 4, + TXRX_AST_STATS = 5, + TXRX_SRNG_PTR_STATS = 6, + TXRX_RX_MON_STATS = 7, + TXRX_REO_QUEUE_STATS = 8, TXRX_HOST_STATS_MAX, }; @@ -859,6 +861,7 @@ enum cdp_stats { CDP_TXRX_STATS_25, CDP_TXRX_STATS_26, CDP_TXRX_STATS_27, + CDP_TXRX_STATS_28, CDP_TXRX_STATS_HTT_MAX = 256, CDP_TXRX_MAX_STATS = 512, }; @@ -1246,6 +1249,7 @@ struct cdp_txrx_stats_req { uint32_t param3; uint32_t cookie_val; uint8_t mac_id; + char *peer_addr; }; /** diff --git a/dp/inc/cdp_txrx_host_stats.h b/dp/inc/cdp_txrx_host_stats.h index f4b7ad9533c5..db4afe5786c7 100644 --- a/dp/inc/cdp_txrx_host_stats.h +++ b/dp/inc/cdp_txrx_host_stats.h @@ -304,12 +304,20 @@ cdp_host_me_stats(ol_txrx_soc_handle soc, struct cdp_vdev *vdev) return soc->ops->host_stats_ops->txrx_host_me_stats(vdev); } -static inline void cdp_per_peer_stats - (ol_txrx_soc_handle soc, struct cdp_pdev *pdev, char *addr) +/** + * cdp_per_peer_stats(): function to print per peer REO Queue stats + * @soc: soc handle + * @pdev: physical device + * @addr: peer address + * + * return: status + */ +static inline void cdp_per_peer_stats(ol_txrx_soc_handle soc, + struct cdp_pdev *pdev, char *addr) { if (!soc || !soc->ops) { QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG, - "%s: Invalid Instance", __func__); + "%s: Invalid Instance", __func__); QDF_BUG(0); return; } @@ -318,8 +326,7 @@ static inline void cdp_per_peer_stats !soc->ops->host_stats_ops->txrx_per_peer_stats) return; - soc->ops->host_stats_ops->txrx_per_peer_stats - (pdev, addr); + soc->ops->host_stats_ops->txrx_per_peer_stats(pdev, addr); } static inline int cdp_host_msdu_ttl_stats(ol_txrx_soc_handle soc, diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index 3b7fb987a4c1..0bddb60da755 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -645,8 +645,10 @@ struct cdp_host_stats_ops { A_STATUS (*txrx_host_me_stats)(struct cdp_vdev *vdev); + void (*txrx_per_peer_stats)(struct cdp_pdev *pdev, char *addr); + int (*txrx_host_msdu_ttl_stats)(struct cdp_vdev *vdev, struct ol_txrx_stats_req *req); diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index cdd0684cc767..f367d807998c 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -293,6 +293,7 @@ const int dp_stats_mapping_table[][STATS_TYPE_MAX] = { {TXRX_FW_STATS_INVALID, TXRX_AST_STATS}, {TXRX_FW_STATS_INVALID, TXRX_SRNG_PTR_STATS}, {TXRX_FW_STATS_INVALID, TXRX_RX_MON_STATS}, + {TXRX_FW_STATS_INVALID, TXRX_REO_QUEUE_STATS}, }; /* MCL specific functions */ @@ -6096,6 +6097,32 @@ static inline void dp_print_peer_stats(struct dp_peer *peer) peer->stats.rx.non_amsdu_cnt); } +/* + * dp_get_host_peer_stats()- function to print peer stats + * @pdev_handle: DP_PDEV handle + * @mac_addr: mac address of the peer + * + * Return: void + */ +static void +dp_get_host_peer_stats(struct cdp_pdev *pdev_handle, char *mac_addr) +{ + struct dp_peer *peer; + uint8_t local_id; + + peer = (struct dp_peer *)dp_find_peer_by_addr(pdev_handle, mac_addr, + &local_id); + + if (!peer) { + QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, + "%s: Invalid peer\n", __func__); + return; + } + + dp_print_peer_stats(peer); + dp_peer_rxtid_stats(peer, dp_rx_tid_stats_cb, NULL); +} + /** * dp_print_host_stats()- Function to print the stats aggregated at host * @vdev_handle: DP_VDEV handle @@ -6113,10 +6140,13 @@ static inline void dp_print_peer_stats(struct dp_peer *peer) * Return: 0 on success, print error message in case of failure */ static int -dp_print_host_stats(struct cdp_vdev *vdev_handle, enum cdp_host_txrx_stats type) +dp_print_host_stats(struct cdp_vdev *vdev_handle, + struct cdp_txrx_stats_req *req) { struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle; struct dp_pdev *pdev = (struct dp_pdev *)vdev->pdev; + enum cdp_host_txrx_stats type = + dp_stats_mapping_table[req->stats][STATS_HOST]; dp_aggregate_pdev_stats(pdev); @@ -6148,6 +6178,9 @@ dp_print_host_stats(struct cdp_vdev *vdev_handle, enum cdp_host_txrx_stats type) case TXRX_RX_MON_STATS: dp_print_pdev_rx_mon_stats(pdev); break; + case TXRX_REO_QUEUE_STATS: + dp_get_host_peer_stats((struct cdp_pdev *)pdev, req->peer_addr); + break; default: DP_TRACE(FATAL, "Wrong Input For TxRx Host Stats"); break; @@ -6155,32 +6188,6 @@ dp_print_host_stats(struct cdp_vdev *vdev_handle, enum cdp_host_txrx_stats type) return 0; } -/* - * dp_get_host_peer_stats()- function to print peer stats - * @pdev_handle: DP_PDEV handle - * @mac_addr: mac address of the peer - * - * Return: void - */ -static void -dp_get_host_peer_stats(struct cdp_pdev *pdev_handle, char *mac_addr) -{ - struct dp_peer *peer; - uint8_t local_id; - peer = (struct dp_peer *)dp_find_peer_by_addr(pdev_handle, mac_addr, - &local_id); - - if (!peer) { - QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR, - "%s: Invalid peer\n", __func__); - return; - } - - dp_print_peer_stats(peer); - dp_peer_rxtid_stats(peer, dp_rx_tid_stats_cb, NULL); - return; -} - /* * dp_ppdu_ring_reset()- Reset PPDU Stats ring * @pdev: DP_PDEV handle @@ -6751,7 +6758,7 @@ static int dp_txrx_stats_request(struct cdp_vdev *vdev, if ((host_stats != TXRX_HOST_STATS_INVALID) && (host_stats <= TXRX_HOST_STATS_MAX)) - return dp_print_host_stats(vdev, host_stats); + return dp_print_host_stats(vdev, req); else QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO, "Wrong Input for TxRx Stats");