Explorar o código

qcacmn: Update deterministic stats for rx

update mode count and avg rate for SU

CRs-Fixed: 3380939
Change-Id: Id593cc98fd58cdf55269966650cad9f53889c4ec
aloksing %!s(int64=2) %!d(string=hai) anos
pai
achega
e657b7999f
Modificáronse 3 ficheiros con 63 adicións e 0 borrados
  1. 10 0
      dp/inc/cdp_txrx_stats_struct.h
  2. 2 0
      dp/wifi3.0/monitor/dp_mon.h
  3. 51 0
      dp/wifi3.0/monitor/dp_rx_mon.c

+ 10 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -2937,6 +2937,16 @@ struct cdp_peer_tx_ul_deter {
 	uint32_t trigger_success;
 	uint32_t trigger_fail;
 };
+
+/**
+ * struct cdp_peer_rx_deter- Structure to hold peer rx deterministic stats
+ * @avg_rate: Average RX rate
+ * @mode_cnt: RX mode count
+ */
+struct cdp_peer_rx_deter {
+	uint64_t avg_rate;
+	uint32_t mode_cnt;
+};
 #endif
 
 /* struct cdp_pdev_stats - pdev stats

+ 2 - 0
dp/wifi3.0/monitor/dp_mon.h

@@ -916,10 +916,12 @@ struct dp_mon_peer_airtime_stats {
  * struct dp_mon_peer_deterministic - Monitor peer deterministic stats
  * @dl_det: Downlink deterministic stats
  * @ul_det: Uplink deterministic stats
+ * @rx_det: RX deterministic stats
  */
 struct dp_mon_peer_deterministic {
 	struct cdp_peer_tx_dl_deter dl_det[MSDUQ_INDEX_MAX][TX_MODE_DL_MAX];
 	struct cdp_peer_tx_ul_deter ul_det[TX_MODE_UL_MAX];
+	struct cdp_peer_rx_deter rx_det;
 };
 #endif
 

+ 51 - 0
dp/wifi3.0/monitor/dp_rx_mon.c

@@ -843,6 +843,49 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
 	DP_STATS_INC(mon_peer, airtime_stats.rx_airtime_consumption[ac].consumption,
 		     user->rx_time_us);
 }
+
+/**
+ * dp_rx_mon_update_user_deter_stats() - Update per-peer deterministic stats
+ * @pdev: Datapath pdev handle
+ * @peer: Datapath peer handle
+ * @ppdu: PPDU Descriptor
+ * @user: Per user RX stats
+ *
+ * Return: None
+ */
+static inline
+void dp_rx_mon_update_user_deter_stats(struct dp_pdev *pdev,
+				       struct dp_peer *peer,
+				       struct cdp_rx_indication_ppdu *ppdu,
+				       struct cdp_rx_stats_ppdu_user *user)
+{
+	struct dp_mon_peer *mon_peer;
+	uint8_t tid;
+
+	if (!pdev || !ppdu || !user || !peer)
+		return;
+
+	if (!dp_is_subtype_data(ppdu->frame_ctrl))
+		return;
+
+	if (ppdu->u.ppdu_type != HAL_RX_TYPE_SU)
+		return;
+
+	mon_peer = peer->monitor_peer;
+	if (!mon_peer)
+		return;
+
+	tid = user->tid;
+	if (tid >= CDP_DATA_TID_MAX)
+		return;
+
+	DP_STATS_INC(mon_peer,
+		     deter_stats[tid].rx_det.mode_cnt,
+		     1);
+	DP_STATS_UPD(mon_peer,
+		     deter_stats[tid].rx_det.avg_rate,
+		     mon_peer->stats.rx.avg_rx_rate);
+}
 #else
 static inline void
 dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
@@ -850,6 +893,13 @@ dp_ppdu_desc_user_rx_time_update(struct dp_pdev *pdev,
 				 struct cdp_rx_indication_ppdu *ppdu_desc,
 				 struct cdp_rx_stats_ppdu_user *user)
 { }
+
+static inline
+void dp_rx_mon_update_user_deter_stats(struct dp_pdev *pdev,
+				       struct dp_peer *peer,
+				       struct cdp_rx_indication_ppdu *ppdu,
+				       struct cdp_rx_stats_ppdu_user *user)
+{ }
 #endif
 
 static void dp_rx_stats_update(struct dp_pdev *pdev,
@@ -1063,6 +1113,7 @@ static void dp_rx_stats_update(struct dp_pdev *pdev,
 		dp_send_stats_event(pdev, peer, ppdu_user->peer_id);
 
 		dp_ppdu_desc_user_rx_time_update(pdev, peer, ppdu, ppdu_user);
+		dp_rx_mon_update_user_deter_stats(pdev, peer, ppdu, ppdu_user);
 		dp_peer_unref_delete(peer, DP_MOD_ID_RX_PPDU_STATS);
 	}
 }