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");