Kaynağa Gözat

qcacmn: Add RX stats support for Direct switch

Add support to send RX stats when Direct switch is
enabled. For WDS extended mode get the stats from
peer object, else take it from vdev object. These will
be accumulated by PPEDS module

Change-Id: I1f73c50679c416536cfc1ebaaeaec9b307e8bf56
CRs-Fixed: 3421251
Parikshit Gune 2 yıl önce
ebeveyn
işleme
1598a12f5c

+ 5 - 0
dp/inc/cdp_txrx_ops.h

@@ -2403,6 +2403,11 @@ struct cdp_ppeds_txrx_ops {
 	void (*ppeds_update_int_pri2tid)(struct cdp_soc_t *soc,
 					 uint8_t pri, uint8_t tid);
 	void (*ppeds_entry_dump)(struct cdp_soc_t *soc);
+	void
+	(*ppeds_stats_sync)(struct cdp_soc_t *soc,
+			    uint16_t vdev_id,
+			    struct cdp_ds_vp_params *vp_params,
+			    void *stats);
 };
 #endif /* WLAN_SUPPORT_PPEDS */
 

+ 27 - 0
dp/inc/cdp_txrx_ppe.h

@@ -44,6 +44,33 @@ QDF_STATUS cdp_ppesds_vp_setup_fw_recovery(struct cdp_soc_t *soc,
 	return QDF_STATUS_E_INVAL;
 }
 
+/*
+ * cdp_ppesds_update_dev_stats() - Update dev stats for PPE-DS mode.
+ * @soc: data path soc handle
+ * @vp_params: VP params
+ * @vdev_id: vdev id
+ * @stats: stats pointer from ppe
+ *
+ * return: void
+ */
+static inline
+void cdp_ppesds_update_dev_stats(struct cdp_soc_t *soc,
+				 struct cdp_ds_vp_params *vp_params,
+				 uint16_t vdev_id, void *stats)
+{
+	if (!soc || !soc->ops || !soc->ops->ppeds_ops) {
+		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
+			  "%s invalid instance", __func__);
+		return;
+	}
+
+	if (soc->ops->ppeds_ops->ppeds_stats_sync)
+		return soc->ops->ppeds_ops->ppeds_stats_sync(soc,
+							     vdev_id,
+							     vp_params,
+							     stats);
+}
+
 /**
  * cdp_ppesds_entry_attach() - attach the ppe vp interface.
  * @soc: data path soc handle

+ 2 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -1687,6 +1687,7 @@ struct cdp_tx_stats {
  * @raw: Raw Pakets received
  * @nawds_mcast_drop: Total multicast packets
  * @mec_drop: Total MEC packets dropped
+ * @ppeds_drop: Total DS packets dropped
  * @last_rx_ts: last timestamp in jiffies when RX happened
  * @intra_bss: Intra-bss statistics
  * @intra_bss.pkts: Intra BSS packets received
@@ -1777,6 +1778,7 @@ struct cdp_rx_stats {
 	struct cdp_pkt_info raw;
 	uint32_t nawds_mcast_drop;
 	struct cdp_pkt_info mec_drop;
+	struct cdp_pkt_info ppeds_drop;
 	unsigned long last_rx_ts;
 	struct {
 		struct cdp_pkt_info pkts;

+ 1 - 0
dp/wifi3.0/be/dp_be.c

@@ -76,6 +76,7 @@ static struct cdp_ppeds_txrx_ops dp_ops_ppeds_be = {
 	.ppeds_entry_dump = dp_ppeds_dump_ppe_vp_tbl_be,
 	.ppeds_enable_pri2tid = dp_ppeds_vdev_enable_pri2tid_be,
 	.ppeds_vp_setup_recovery = dp_ppeds_vp_setup_on_fw_recovery,
+	.ppeds_stats_sync = dp_ppeds_stats_sync_be,
 };
 
 static void dp_ppeds_rings_status(struct dp_soc *soc)

+ 2 - 0
dp/wifi3.0/dp_internal.h

@@ -1960,6 +1960,8 @@ void dp_update_vdev_stats_on_peer_unmap(struct dp_vdev *vdev,
 		_tgtobj->rx.mcast_3addr_drop += _srcobj->rx.mcast_3addr_drop; \
 		_tgtobj->rx.mec_drop.num += _srcobj->rx.mec_drop.num; \
 		_tgtobj->rx.mec_drop.bytes += _srcobj->rx.mec_drop.bytes; \
+		_tgtobj->rx.ppeds_drop.num += _srcobj->rx.ppeds_drop.num; \
+		_tgtobj->rx.ppeds_drop.bytes += _srcobj->rx.ppeds_drop.bytes; \
 		_tgtobj->rx.intra_bss.pkts.num += \
 					_srcobj->rx.intra_bss.pkts.num; \
 		_tgtobj->rx.intra_bss.pkts.bytes += \

+ 5 - 3
dp/wifi3.0/dp_main.c

@@ -5780,8 +5780,8 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle,
 	vdev_stats = qdf_mem_malloc_atomic(sizeof(struct cdp_vdev_stats));
 
 	if (!vdev_stats) {
-		dp_cdp_err("%pK: DP alloc failure - unable to get alloc vdev stats",
-			   soc);
+		dp_err("%pK: DP alloc failure - unable to get alloc vdev stats",
+		       soc);
 		return QDF_STATUS_E_FAILURE;
 	}
 
@@ -5823,7 +5823,8 @@ static QDF_STATUS dp_vdev_getstats(struct cdp_vdev *vdev_handle,
 			    vdev_stats->rx.peer_unauth_rx_pkt_drop +
 			    vdev_stats->rx.policy_check_drop +
 			    vdev_stats->rx.nawds_mcast_drop +
-			    vdev_stats->rx.mcast_3addr_drop;
+			    vdev_stats->rx.mcast_3addr_drop +
+			    vdev_stats->rx.ppeds_drop.num;
 
 	qdf_mem_free(vdev_stats);
 
@@ -5884,6 +5885,7 @@ static void dp_pdev_getstats(struct cdp_pdev *pdev_handle,
 		pdev->stats.dropped.mon_rx_drop +
 		pdev->stats.dropped.mon_radiotap_update_err +
 		pdev->stats.rx.mec_drop.num +
+		pdev->stats.rx.ppeds_drop.num +
 		pdev->stats.rx.multipass_rx_pkt_drop +
 		pdev->stats.rx.peer_unauth_rx_pkt_drop +
 		pdev->stats.rx.policy_check_drop +

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

@@ -8950,6 +8950,8 @@ void dp_update_pdev_stats(struct dp_pdev *tgtobj,
 		srcobj->tx.last_ack_rssi;
 	tgtobj->stats.rx.mec_drop.num += srcobj->rx.mec_drop.num;
 	tgtobj->stats.rx.mec_drop.bytes += srcobj->rx.mec_drop.bytes;
+	tgtobj->stats.rx.ppeds_drop.num += srcobj->rx.ppeds_drop.num;
+	tgtobj->stats.rx.ppeds_drop.bytes += srcobj->rx.ppeds_drop.bytes;
 	tgtobj->stats.rx.multipass_rx_pkt_drop +=
 		srcobj->rx.multipass_rx_pkt_drop;
 	tgtobj->stats.rx.peer_unauth_rx_pkt_drop +=

+ 2 - 0
dp/wifi3.0/dp_types.h

@@ -4437,6 +4437,7 @@ struct dp_peer_extd_tx_stats {
  * @raw: Raw Pakets received
  * @nawds_mcast_drop: Total NAWDS multicast packets dropped
  * @mec_drop: Total MEC packets dropped
+ * @ppeds_drop: Total DS packets dropped
  * @last_rx_ts: last timestamp in jiffies when RX happened
  * @intra_bss: Intra BSS statistics
  * @intra_bss.pkts: Intra BSS packets received
@@ -4471,6 +4472,7 @@ struct dp_peer_per_pkt_rx_stats {
 	struct cdp_pkt_info raw;
 	uint32_t nawds_mcast_drop;
 	struct cdp_pkt_info mec_drop;
+	struct cdp_pkt_info ppeds_drop;
 	unsigned long last_rx_ts;
 	struct {
 		struct cdp_pkt_info pkts;