瀏覽代碼

qcacmn: stats VoW IGMP improvements

Add stats VoW IGMP improvements feature

Change-Id: I86b803e67f2cc3cfc01750f261f06590ff2b97c2
Pavankumar Nandeshwar 4 年之前
父節點
當前提交
f0d2f53e32
共有 6 個文件被更改,包括 46 次插入4 次删除
  1. 2 2
      dp/inc/cdp_txrx_me.h
  2. 2 1
      dp/inc/cdp_txrx_ops.h
  3. 8 0
      dp/inc/cdp_txrx_stats_struct.h
  4. 4 1
      dp/wifi3.0/dp_internal.h
  5. 25 0
      dp/wifi3.0/dp_main.c
  6. 5 0
      dp/wifi3.0/dp_stats.c

+ 2 - 2
dp/inc/cdp_txrx_me.h

@@ -65,7 +65,7 @@ cdp_tx_me_free_descriptor(ol_txrx_soc_handle soc, uint8_t pdev_id)
 static inline uint16_t
 cdp_tx_me_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
 			qdf_nbuf_t wbuf, u_int8_t newmac[][6],
-			uint8_t newmaccnt, uint8_t tid)
+			uint8_t newmaccnt, uint8_t tid, bool is_igmp)
 {
 	if (!soc || !soc->ops) {
 		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
@@ -79,7 +79,7 @@ cdp_tx_me_convert_ucast(ol_txrx_soc_handle soc, uint8_t vdev_id,
 		return 0;
 
 	return soc->ops->me_ops->tx_me_convert_ucast
-			(soc, vdev_id, wbuf, newmac, newmaccnt, tid);
+			(soc, vdev_id, wbuf, newmac, newmaccnt, tid, is_igmp);
 }
 
 #endif

+ 2 - 1
dp/inc/cdp_txrx_ops.h

@@ -769,7 +769,8 @@ struct cdp_me_ops {
 
 	uint16_t (*tx_me_convert_ucast)(struct cdp_soc_t *soc, uint8_t vdev_id,
 					qdf_nbuf_t wbuf, u_int8_t newmac[][6],
-					uint8_t newmaccnt, uint8_t tid);
+					uint8_t newmaccnt, uint8_t tid,
+					bool is_igmp);
 };
 
 struct cdp_mon_ops {

+ 8 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -1178,6 +1178,8 @@ struct cdp_rx_stats {
  * @ucast: total unicast packets transmitted
  * @fail_seg_alloc: Segment allocation failure
  * @clone_fail: NBUF clone failure
+ * @igmp_rcvd: igmp pkts received for conversion to ucast pkts
+ * @igmp_ucast_converted: unicast pkts sent as part of VoW IGMP improvements
  * @dropped_pkt: Total scatter gather packets
  * @desc_na: Desc Not Available
  * @exc_desc_na: Exception desc Not Available
@@ -1225,6 +1227,12 @@ struct cdp_tx_ingress_stats {
 		uint32_t clone_fail;
 	} mcast_en;
 
+	/* IGMP Multicast Enhancement packets info */
+	struct {
+		uint32_t igmp_rcvd;
+		uint32_t igmp_ucast_converted;
+	} igmp_mcast_en;
+
 	/* Packets dropped on the Tx side */
 	struct {
 		struct cdp_pkt_info dropped_pkt;

+ 4 - 1
dp/wifi3.0/dp_internal.h

@@ -683,6 +683,8 @@ static inline void dp_update_pdev_ingress_stats(struct dp_pdev *tgtobj,
 	DP_STATS_AGGR(tgtobj, srcobj,
 		      tx_i.mcast_en.dropped_send_fail);
 	DP_STATS_AGGR(tgtobj, srcobj, tx_i.mcast_en.ucast);
+	DP_STATS_AGGR(tgtobj, srcobj, tx_i.igmp_mcast_en.igmp_rcvd);
+	DP_STATS_AGGR(tgtobj, srcobj, tx_i.igmp_mcast_en.igmp_ucast_converted);
 	DP_STATS_AGGR(tgtobj, srcobj, tx_i.dropped.dma_error);
 	DP_STATS_AGGR(tgtobj, srcobj, tx_i.dropped.ring_full);
 	DP_STATS_AGGR(tgtobj, srcobj, tx_i.dropped.enqueue_fail);
@@ -1194,7 +1196,8 @@ void dp_rx_bar_stats_cb(struct dp_soc *soc, void *cb_ctxt,
 uint16_t dp_tx_me_send_convert_ucast(struct cdp_soc_t *soc, uint8_t vdev_id,
 				     qdf_nbuf_t nbuf,
 				     uint8_t newmac[][QDF_MAC_ADDR_SIZE],
-				     uint8_t new_mac_cnt, uint8_t tid);
+				     uint8_t new_mac_cnt, uint8_t tid,
+				     bool is_igmp);
 void dp_tx_me_alloc_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id);
 
 void dp_tx_me_free_descriptor(struct cdp_soc_t *soc, uint8_t pdev_id);

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

@@ -8820,6 +8820,30 @@ static void dp_txrx_update_vdev_me_stats(struct dp_vdev *vdev,
 		     host_stats->mcast_en.clone_fail);
 }
 
+/* dp_txrx_update_vdev_igmp_me_stats(): Update vdev IGMP ME stats sent from CDP
+ * @vdev: DP vdev handle
+ * @buf: buffer containing specific stats structure
+ *
+ * Returns: void
+ */
+static void dp_txrx_update_vdev_igmp_me_stats(struct dp_vdev *vdev,
+					      void *buf)
+{
+	struct cdp_tx_ingress_stats *host_stats = NULL;
+
+	if (!buf) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
+			  "Invalid host stats buf");
+		return;
+	}
+	host_stats = (struct cdp_tx_ingress_stats *)buf;
+
+	DP_STATS_INC(vdev, tx_i.igmp_mcast_en.igmp_rcvd,
+		     host_stats->igmp_mcast_en.igmp_rcvd);
+	DP_STATS_INC(vdev, tx_i.igmp_mcast_en.igmp_ucast_converted,
+		     host_stats->igmp_mcast_en.igmp_ucast_converted);
+}
+
 /* dp_txrx_update_vdev_host_stats(): Update stats sent through CDP
  * @soc: DP soc handle
  * @vdev_id: id of DP vdev handle
@@ -8848,6 +8872,7 @@ static QDF_STATUS dp_txrx_update_vdev_host_stats(struct cdp_soc_t *soc_hdl,
 		break;
 	case DP_VDEV_STATS_TX_ME:
 		dp_txrx_update_vdev_me_stats(vdev, buf);
+		dp_txrx_update_vdev_igmp_me_stats(vdev, buf);
 		break;
 	default:
 		qdf_info("Invalid stats_id %d", stats_id);

+ 5 - 0
dp/wifi3.0/dp_stats.c

@@ -6182,6 +6182,11 @@ dp_print_pdev_tx_stats(struct dp_pdev *pdev)
 		       pdev->stats.tx_i.mcast_en.dropped_send_fail);
 	DP_PRINT_STATS("	Unicast sent = %d",
 		       pdev->stats.tx_i.mcast_en.ucast);
+	DP_PRINT_STATS("IGMP Mcast Enhancement:");
+	DP_PRINT_STATS("	IGMP packets received = %d",
+		       pdev->stats.tx_i.igmp_mcast_en.igmp_rcvd);
+	DP_PRINT_STATS("	Converted to uncast = %d",
+		       pdev->stats.tx_i.igmp_mcast_en.igmp_ucast_converted);
 	DP_PRINT_STATS("Raw:");
 	DP_PRINT_STATS("	Packets = %d",
 		       pdev->stats.tx_i.raw.raw_pkt.num);