qcacmn: Enable support for REO Queue Stats
Map the cdp api call to a datapath handle to print REO
Queue Stats.
Change-Id: I14f880e9fc3743991fd7c8441326c23b7c3bdff8
CRs-Fixed: 2217649
diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h
index 137e6ac..1d48d98 100644
--- a/dp/inc/cdp_txrx_cmn_struct.h
+++ b/dp/inc/cdp_txrx_cmn_struct.h
@@ -186,17 +186,19 @@
* @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 @@
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 @@
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 f4b7ad9..db4afe5 100644
--- a/dp/inc/cdp_txrx_host_stats.h
+++ b/dp/inc/cdp_txrx_host_stats.h
@@ -304,12 +304,20 @@
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 @@
!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 3b7fb98..0bddb60 100644
--- a/dp/inc/cdp_txrx_ops.h
+++ b/dp/inc/cdp_txrx_ops.h
@@ -645,8 +645,10 @@
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 cdd0684..f367d80 100644
--- a/dp/wifi3.0/dp_main.c
+++ b/dp/wifi3.0/dp_main.c
@@ -293,6 +293,7 @@
{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 @@
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 @@
* 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 @@
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;
@@ -6156,32 +6189,6 @@
}
/*
- * 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 @@
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");