Selaa lähdekoodia

qcacmn: Add additional stats to dp_dev

Add additional stats to dp_vdev:
	1. tx. fragment_count
	2. rx.duplicate_count
	3. rx.fragment_count

Change-Id: Ib9fec3b5e7733bbdda09ae5598a092072ebaaee4
CRs-Fixed: 3554690
Amit Mehta 2 vuotta sitten
vanhempi
sitoutus
725454258b
2 muutettua tiedostoa jossa 45 lisäystä ja 1 poistoa
  1. 6 0
      dp/inc/cdp_txrx_stats_struct.h
  2. 39 1
      dp/wifi3.0/dp_rx_err.c

+ 6 - 0
dp/inc/cdp_txrx_stats_struct.h

@@ -1553,6 +1553,7 @@ struct protocol_trace_count {
  * @wme_ac_type_bytes: Wireless Multimedia Type Bytes Count
  * @tx_ucast_total: Total tx unicast count
  * @tx_ucast_success: Total tx unicast success count
+* @fragment_count: Fragment packet count
  */
 struct cdp_tx_stats {
 	struct cdp_pkt_info comp_pkt;
@@ -1678,6 +1679,7 @@ struct cdp_tx_stats {
 	uint64_t wme_ac_type_bytes[WME_AC_MAX];
 	struct cdp_pkt_info tx_ucast_total;
 	struct cdp_pkt_info tx_ucast_success;
+	uint32_t fragment_count;
 };
 
 /**
@@ -1772,6 +1774,8 @@ struct cdp_tx_stats {
  * @inval_link_id_pkt_cnt: Counter to capture Invalid Link Id
  * @wme_ac_type_bytes: Wireless Multimedia type Byte Count
  * @rx_total: Total rx count
+ * @duplicate_count: Duplicate packets count
+ * @fragment_count: Fragment packet count
  */
 struct cdp_rx_stats {
 	struct cdp_pkt_info to_stack;
@@ -1870,6 +1874,8 @@ struct cdp_rx_stats {
 #ifdef IPA_OFFLOAD
 	struct cdp_pkt_info rx_total;
 #endif
+	uint32_t duplicate_count;
+	uint32_t fragment_count;
 };
 
 /**

+ 39 - 1
dp/wifi3.0/dp_rx_err.c

@@ -1953,6 +1953,26 @@ static bool dp_idle_link_bm_id_check(struct dp_soc *soc, uint8_t rbm,
 }
 #endif
 
+static inline void
+dp_rx_err_dup_frame(struct dp_soc *soc,
+		    struct hal_rx_mpdu_desc_info *mpdu_desc_info)
+{
+	struct dp_txrx_peer *txrx_peer = NULL;
+	dp_txrx_ref_handle txrx_ref_handle = NULL;
+	uint16_t peer_id;
+
+	peer_id =
+		dp_rx_peer_metadata_peer_id_get(soc,
+						mpdu_desc_info->peer_meta_data);
+	txrx_peer = dp_tgt_txrx_peer_get_ref_by_id(soc, peer_id,
+						   &txrx_ref_handle,
+						   DP_MOD_ID_RX_ERR);
+	if (txrx_peer) {
+		DP_STATS_INC(txrx_peer->vdev, rx.duplicate_count, 1);
+		dp_txrx_peer_unref_delete(txrx_ref_handle, DP_MOD_ID_RX_ERR);
+	}
+}
+
 uint32_t
 dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 		  hal_ring_handle_t hal_ring_hdl, uint32_t quota)
@@ -1980,6 +2000,9 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 	bool sw_pn_check_needed;
 	int max_reap_limit = dp_rx_get_loop_pkt_limit(soc);
 	int i, rx_bufs_reaped_total;
+	uint16_t peer_id;
+	struct dp_txrx_peer *txrx_peer = NULL;
+	dp_txrx_ref_handle txrx_ref_handle = NULL;
 
 	/* Debug -- Remove later */
 	qdf_assert(soc && hal_ring_hdl);
@@ -2170,6 +2193,19 @@ dp_rx_err_process(struct dp_intr *int_ctx, struct dp_soc *soc,
 
 			rx_bufs_reaped[mac_id] += count;
 			DP_STATS_INC(soc, rx.rx_frags, 1);
+
+			peer_id = dp_rx_peer_metadata_peer_id_get(soc,
+					mpdu_desc_info.peer_meta_data);
+			txrx_peer =
+				dp_tgt_txrx_peer_get_ref_by_id(soc, peer_id,
+							       &txrx_ref_handle,
+							       DP_MOD_ID_RX_ERR);
+			if (txrx_peer) {
+				DP_STATS_INC(txrx_peer->vdev,
+					     rx.fragment_count, 1);
+				dp_txrx_peer_unref_delete(txrx_ref_handle,
+							  DP_MOD_ID_RX_ERR);
+			}
 			goto next_entry;
 		}
 
@@ -2214,9 +2250,11 @@ process_reo_error_code:
 
 			rx_bufs_reaped[mac_id] += count;
 			break;
+		case HAL_REO_ERR_NON_BA_DUPLICATE:
+			dp_rx_err_dup_frame(soc, &mpdu_desc_info);
+			fallthrough;
 		case HAL_REO_ERR_QUEUE_DESC_INVALID:
 		case HAL_REO_ERR_AMPDU_IN_NON_BA:
-		case HAL_REO_ERR_NON_BA_DUPLICATE:
 		case HAL_REO_ERR_BA_DUPLICATE:
 		case HAL_REO_ERR_BAR_FRAME_NO_BA_SESSION:
 		case HAL_REO_ERR_BAR_FRAME_SN_EQUALS_SSN: