Procházet zdrojové kódy

qcacmn: Define cdp interface struct and API to fetch dp soc stats

Define a new cdp interface structure and API for soc stats for use
by upper layers to fetch dp soc stats.

Change-Id: I314e952546551003da2ca7f69b2e1aa23c126e66
Harsh Kumar Bijlani před 4 roky
rodič
revize
0dcfff9b90

+ 23 - 0
dp/inc/cdp_txrx_host_stats.h

@@ -489,6 +489,29 @@ cdp_txrx_get_peer_stats_param(ol_txrx_soc_handle soc, uint8_t vdev_id,
 								   buf);
 }
 
+/**
+ * @brief Call to get soc stats
+ *
+ * @param soc - soc handle
+ * @soc_stats - buffer for cdp soc stats
+ * @return - QDF_STATUS
+ */
+static inline QDF_STATUS
+cdp_host_get_soc_stats(ol_txrx_soc_handle soc, struct cdp_soc_stats *soc_stats)
+{
+	if (!soc || !soc->ops) {
+		dp_cdp_debug("Invalid Instance");
+		QDF_BUG(0);
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	if (!soc->ops->host_stats_ops ||
+	    !soc->ops->host_stats_ops->txrx_get_soc_stats)
+		return QDF_STATUS_E_FAILURE;
+
+	return soc->ops->host_stats_ops->txrx_get_soc_stats(soc, soc_stats);
+}
+
 /**
  * @brief Call to get peer stats
  *

+ 3 - 0
dp/inc/cdp_txrx_ops.h

@@ -934,6 +934,9 @@ struct cdp_host_stats_ops {
 		(*txrx_get_peer_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
 				       uint8_t *peer_mac,
 				       struct cdp_peer_stats *peer_stats);
+	QDF_STATUS
+		(*txrx_get_soc_stats)(struct cdp_soc_t *soc,
+				      struct cdp_soc_stats *soc_stats);
 	QDF_STATUS
 		(*txrx_reset_peer_ald_stats)(struct cdp_soc_t *soc,
 					     uint8_t vdev_id,

+ 30 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -1900,6 +1900,36 @@ struct cdp_cfr_rcc_stats {
 struct cdp_cfr_rcc_stats {
 };
 #endif
+
+/* struct cdp_soc_stats - soc stats
+ * @tx.egress: Total packets transmitted
+ * @rx.ingress: Total rx packets count
+ * @rx.err_ring_pkts: Total Packets in Rx Error ring
+ * @rx.rx_frags: No of Fragments
+ * @rx.reo_reinject: No of reinjected packets
+ * @rx.bar_frame: Number of bar frames received
+ * @rx.err.rejected: RX msdu rejected count on delivery to vdev stack_fn
+ * @rx.err.raw_frm_drop: RX raw frame dropped count
+ */
+struct cdp_soc_stats {
+	struct {
+		struct cdp_pkt_info egress;
+	} tx;
+
+	struct {
+		struct cdp_pkt_info ingress;
+		uint32_t err_ring_pkts;
+		uint32_t rx_frags;
+		uint32_t reo_reinject;
+		uint32_t bar_frame;
+
+		struct {
+			uint32_t rx_rejected;
+			uint32_t rx_raw_frm_drop;
+		} err;
+	} rx;
+};
+
 /* struct cdp_pdev_stats - pdev stats
  * @msdu_not_done: packets dropped because msdu done bit not set
  * @mec:Multicast Echo check

+ 25 - 0
dp/wifi3.0/dp_main.c

@@ -10619,6 +10619,30 @@ static QDF_STATUS dp_txrx_update_vdev_host_stats(struct cdp_soc_t *soc_hdl,
 	return QDF_STATUS_SUCCESS;
 }
 
+/* dp_txrx_get_soc_stats - will return cdp_soc_stats
+ * @soc_hdl: soc handle
+ * @soc_stats: buffer to hold the values
+ *
+ * return: status success/failure
+ */
+static QDF_STATUS
+dp_txrx_get_soc_stats(struct cdp_soc_t *soc_hdl,
+		      struct cdp_soc_stats *soc_stats)
+{
+	struct dp_soc *soc = (struct dp_soc *)soc_hdl;
+
+	soc_stats->tx.egress = soc->stats.tx.egress;
+	soc_stats->rx.ingress = soc->stats.rx.ingress;
+	soc_stats->rx.err_ring_pkts = soc->stats.rx.err_ring_pkts;
+	soc_stats->rx.rx_frags = soc->stats.rx.rx_frags;
+	soc_stats->rx.reo_reinject = soc->stats.rx.reo_reinject;
+	soc_stats->rx.bar_frame = soc->stats.rx.bar_frame;
+	soc_stats->rx.err.rx_rejected = soc->stats.rx.err.rejected;
+	soc_stats->rx.err.rx_raw_frm_drop = soc->stats.rx.err.raw_frm_drop;
+
+	return QDF_STATUS_SUCCESS;
+}
+
 /* dp_txrx_get_peer_stats - will return cdp_peer_stats
  * @soc: soc handle
  * @vdev_id: id of vdev handle
@@ -12458,6 +12482,7 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
 	.txrx_stats_publish = dp_txrx_stats_publish,
 	.txrx_get_vdev_stats  = dp_txrx_get_vdev_stats,
 	.txrx_get_peer_stats = dp_txrx_get_peer_stats,
+	.txrx_get_soc_stats = dp_txrx_get_soc_stats,
 	.txrx_get_peer_stats_param = dp_txrx_get_peer_stats_param,
 	.txrx_reset_peer_stats = dp_txrx_reset_peer_stats,
 	.txrx_get_pdev_stats = dp_txrx_get_pdev_stats,