Browse Source

qcacmn: Clean up TxRx statistics

Cleanup the print format for rate stats.
Add missing elements in HAL tx completion structure.

Change-Id: I57aaac605fce5060f7943b9bbe95ef8e8c2d3b7b
Pamidipati, Vijay 7 years ago
parent
commit
623fbee5f9

+ 49 - 45
dp/inc/cdp_txrx_cmn_struct.h

@@ -44,13 +44,16 @@
 
 #define OL_TXRX_INVALID_LOCAL_PEER_ID 0xffff
 #define CDP_INVALID_VDEV_ID 0xff
-#define MAX_MCS 12
+/* 1 additional MCS is for invalid values */
+#define MAX_MCS (12 + 1)
 #define MAX_MCS_11A 8
 #define MAX_MCS_11B 7
 #define MAX_MCS_11AC 10
+/* 1 additional GI is for invalid values */
+#define MAX_GI (4 + 1)
 #define SS_COUNT 8
-#define SUPPORTED_BW 4
-#define SUPPORTED_RECEPTION_TYPES 4
+#define MAX_BW 4
+#define MAX_RECEPTION_TYPES 4
 
 /* Options for Dump Statistics */
 #define CDP_HDD_STATS               0
@@ -106,28 +109,28 @@ enum cdp_cfg_param_type {
  * The bitmask contains 24 bits.
  */
 enum htt_cmn_dbg_stats_type {
-    HTT_DBG_CMN_STATS_WAL_PDEV_TXRX      = 0,  /* bit 0 -> 0x1 */
-    HTT_DBG_CMN_STATS_RX_REORDER         = 1,  /* bit 1 -> 0x2 */
-    HTT_DBG_CMN_STATS_RX_RATE_INFO       = 2,  /* bit 2 -> 0x4 */
-    HTT_DBG_CMN_STATS_TX_PPDU_LOG        = 3,  /* bit 3 -> 0x8 */
-    HTT_DBG_CMN_STATS_TX_RATE_INFO       = 4,  /* bit 4 -> 0x10 */
-    HTT_DBG_CMN_STATS_TIDQ               = 5,  /* bit 5 -> 0x20 */
-    HTT_DBG_CMN_STATS_TXBF_INFO          = 6,  /* bit 6 -> 0x40 */
-    HTT_DBG_CMN_STATS_SND_INFO           = 7,  /* bit 7 -> 0x80 */
-    HTT_DBG_CMN_STATS_ERROR_INFO         = 8,  /* bit 8  -> 0x100 */
-    HTT_DBG_CMN_STATS_TX_SELFGEN_INFO    = 9,  /* bit 9  -> 0x200 */
-    HTT_DBG_CMN_STATS_TX_MU_INFO         = 10, /* bit 10 -> 0x400 */
-    HTT_DBG_CMN_STATS_SIFS_RESP_INFO     = 11, /* bit 11 -> 0x800 */
-    HTT_DBG_CMN_STATS_RESET_INFO         = 12, /* bit 12 -> 0x1000 */
-    HTT_DBG_CMN_STATS_MAC_WDOG_INFO      = 13, /* bit 13 -> 0x2000 */
-    HTT_DBG_CMN_STATS_TX_DESC_INFO       = 14, /* bit 14 -> 0x4000 */
-    HTT_DBG_CMN_STATS_TX_FETCH_MGR_INFO  = 15, /* bit 15 -> 0x8000 */
-    HTT_DBG_CMN_STATS_TX_PFSCHED_INFO    = 16, /* bit 16 -> 0x10000 */
-    HTT_DBG_CMN_STATS_TX_PATH_STATS_INFO = 17, /* bit 17 -> 0x20000 */
-    /* bits 18-23 currently reserved */
-
-    /* keep this last */
-    HTT_DBG_CMN_NUM_STATS
+	HTT_DBG_CMN_STATS_WAL_PDEV_TXRX      = 0,  /* bit 0 -> 0x1 */
+	HTT_DBG_CMN_STATS_RX_REORDER         = 1,  /* bit 1 -> 0x2 */
+	HTT_DBG_CMN_STATS_RX_RATE_INFO       = 2,  /* bit 2 -> 0x4 */
+	HTT_DBG_CMN_STATS_TX_PPDU_LOG        = 3,  /* bit 3 -> 0x8 */
+	HTT_DBG_CMN_STATS_TX_RATE_INFO       = 4,  /* bit 4 -> 0x10 */
+	HTT_DBG_CMN_STATS_TIDQ               = 5,  /* bit 5 -> 0x20 */
+	HTT_DBG_CMN_STATS_TXBF_INFO          = 6,  /* bit 6 -> 0x40 */
+	HTT_DBG_CMN_STATS_SND_INFO           = 7,  /* bit 7 -> 0x80 */
+	HTT_DBG_CMN_STATS_ERROR_INFO         = 8,  /* bit 8  -> 0x100 */
+	HTT_DBG_CMN_STATS_TX_SELFGEN_INFO    = 9,  /* bit 9  -> 0x200 */
+	HTT_DBG_CMN_STATS_TX_MU_INFO         = 10, /* bit 10 -> 0x400 */
+	HTT_DBG_CMN_STATS_SIFS_RESP_INFO     = 11, /* bit 11 -> 0x800 */
+	HTT_DBG_CMN_STATS_RESET_INFO         = 12, /* bit 12 -> 0x1000 */
+	HTT_DBG_CMN_STATS_MAC_WDOG_INFO      = 13, /* bit 13 -> 0x2000 */
+	HTT_DBG_CMN_STATS_TX_DESC_INFO       = 14, /* bit 14 -> 0x4000 */
+	HTT_DBG_CMN_STATS_TX_FETCH_MGR_INFO  = 15, /* bit 15 -> 0x8000 */
+	HTT_DBG_CMN_STATS_TX_PFSCHED_INFO    = 16, /* bit 16 -> 0x10000 */
+	HTT_DBG_CMN_STATS_TX_PATH_STATS_INFO = 17, /* bit 17 -> 0x20000 */
+	/* bits 18-23 currently reserved */
+
+	/* keep this last */
+	HTT_DBG_CMN_NUM_STATS
 };
 
 /*
@@ -577,6 +580,7 @@ enum cdp_stat_update_type {
 	UPDATE_VDEV_STATS = 1,
 	UPDATE_PDEV_STATS = 2,
 };
+
 /* packet info */
 struct cdp_pkt_info {
 	/*no of packets*/
@@ -597,6 +601,7 @@ struct cdp_tx_stats {
 	struct cdp_pkt_info tx_success;
 	/* Total Tx failure */
 	uint32_t tx_failed;
+
 	/* Total Packets as ofdma*/
 	uint32_t ofdma;
 	/* Packets in STBC */
@@ -609,39 +614,38 @@ struct cdp_tx_stats {
 	uint32_t non_amsdu_cnt;
 	/* Number of MSDUs part of AMSDU*/
 	uint32_t amsdu_cnt;
+
 	/* RSSI of last packet */
 	uint32_t last_ack_rssi;
 
 	/* Packet Type */
 	struct {
 		/* MCS Count */
-		uint32_t mcs_count[MAX_MCS + 1];
+		uint32_t mcs_count[MAX_MCS];
 	} pkt_type[DOT11_MAX];
+
 	/* SGI count */
-	uint32_t sgi_count[MAX_MCS + 1];
+	uint32_t sgi_count[MAX_GI];
+
 	/* Packet Count for different bandwidths */
-	uint32_t bw[SUPPORTED_BW];
+	uint32_t bw[MAX_BW];
+
 	/* Wireless Multimedia type Count */
 	uint32_t wme_ac_type[WME_AC_MAX];
+
 	/* Wireless Multimedia type Count */
 	uint32_t excess_retries_ac[WME_AC_MAX];
 
 	/* Packets dropped on the Tx side */
 	struct {
 		/* Discarded by firmware */
-		uint32_t fw_discard;
-		/* fw_discard_retired */
-		uint32_t fw_discard_retired;
+		uint32_t fw_rem;
 		/* firmware_discard_untransmitted */
-		uint32_t fw_discard_untransmitted;
-		/* ,pdu_age_out */
-		uint32_t mpdu_age_out;
-		/* firmware_discard_reason1 */
-		uint32_t fw_discard_reason1;
-		/* firmware_discard_reason2 */
-		uint32_t fw_discard_reason2;
-		/* firmware_discard_reason3 */
-		uint32_t fw_discard_reason3;
+		uint32_t fw_rem_notx;
+		/* firmware_discard_transmitted */
+		uint32_t fw_rem_tx;
+		/* aged out in mpdu/msdu queues*/
+		uint32_t age_out;
 	} dropped;
 };
 
@@ -677,18 +681,18 @@ struct cdp_rx_stats {
 	/* Wireless Multimedia type Count */
 	uint32_t wme_ac_type[WME_AC_MAX];
 	/* Reception type os packets */
-	uint32_t reception_type[SUPPORTED_RECEPTION_TYPES];
+	uint32_t reception_type[MAX_RECEPTION_TYPES];
 	/* Packet Type */
 	struct {
 		/* MCS Count */
-		uint32_t mcs_count[MAX_MCS + 1];
+		uint32_t mcs_count[MAX_MCS];
 	} pkt_type[DOT11_MAX];
 	/* SGI count */
-	uint32_t sgi_count[MAX_MCS + 1];
+	uint32_t sgi_count[MAX_GI];
 	/* Packet count in spatiel Streams */
 	uint32_t nss[SS_COUNT];
 	/* Packet Count in different bandwidths */
-	uint32_t bw[SUPPORTED_BW];
+	uint32_t bw[MAX_BW];
 	/*  Number of MSDUs with no MPDU level aggregation */
 	uint32_t non_ampdu_cnt;
 	/* Number of MSDUs part of AMSPU */
@@ -817,7 +821,6 @@ struct cdp_hist_rx_ind {
 	uint32_t pkts_201_plus;
 };
 
-
 struct cdp_pdev_stats {
 	/* packets dropped on rx */
 	struct {
@@ -852,6 +855,7 @@ struct cdp_pdev_stats {
 		/* desc alloc failed errors */
 		uint32_t desc_alloc_fail;
 	} err;
+
 	/* buffers added back in freelist */
 	uint32_t buf_freelist;
 	/* Tx Ingress stats */

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

@@ -65,6 +65,10 @@ while (0)
 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_##LVL,       \
 		fmt, ## args)
 
+#define DP_PRINT_STATS(fmt, args ...)	\
+	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,       \
+		fmt, ## args)
+
 #define DP_STATS_INIT(_handle) \
 	qdf_mem_set(&((_handle)->stats), sizeof((_handle)->stats), 0x0)
 

File diff suppressed because it is too large
+ 332 - 318
dp/wifi3.0/dp_main.c


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

@@ -1215,11 +1215,11 @@ done:
 					 && (pkt_type == DOT11_AC)));
 			DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
 					mcs_count[MAX_MCS], 1,
-					((mcs >= MAX_MCS)
+					((mcs >= (MAX_MCS-1))
 					 && (pkt_type == DOT11_AX)));
 			DP_STATS_INCC(peer, rx.pkt_type[pkt_type].
 					mcs_count[mcs], 1,
-					((mcs <= MAX_MCS)
+					((mcs <= (MAX_MCS-1))
 					 && (pkt_type == DOT11_AX)));
 
 			/*

+ 92 - 100
dp/wifi3.0/dp_tx.c

@@ -1801,6 +1801,83 @@ void dp_tx_comp_fill_tx_completion_stats(struct dp_tx_desc_s *tx_desc,
 
 #endif
 
+/**
+ * dp_tx_update_peer_stats() - Update peer stats from Tx completion indications
+ * @peer: Handle to DP peer
+ * @ts: pointer to HAL Tx completion stats
+ * @length: MSDU length
+ *
+ * Return: None
+ */
+static void dp_tx_update_peer_stats(struct dp_peer *peer,
+		struct hal_tx_completion_status *ts, uint32_t length)
+{
+	struct dp_pdev *pdev = peer->vdev->pdev;
+	struct dp_soc *soc = pdev->soc;
+
+	DP_STATS_INC_PKT(peer, tx.comp_pkt, 1, length);
+
+	if (!ts->release_src == HAL_TX_COMP_RELEASE_SOURCE_TQM)
+		return;
+
+	DP_STATS_INCC(peer, tx.tx_failed, 1,
+			!(ts->status == HAL_TX_TQM_RR_FRAME_ACKED));
+
+	DP_STATS_INCC(peer, tx.dropped.age_out, 1,
+			(ts->status == HAL_TX_TQM_RR_REM_CMD_AGED));
+
+	DP_STATS_INCC(peer, tx.dropped.fw_rem, 1,
+			(ts->status == HAL_TX_TQM_RR_REM_CMD_REM));
+
+	DP_STATS_INCC(peer, tx.dropped.fw_rem_notx, 1,
+			(ts->status == HAL_TX_TQM_RR_REM_CMD_NOTX));
+
+	DP_STATS_INCC(peer, tx.dropped.fw_rem_tx, 1,
+			(ts->status == HAL_TX_TQM_RR_REM_CMD_TX));
+
+	if (!ts->status == HAL_TX_TQM_RR_FRAME_ACKED)
+		return;
+
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[MAX_MCS], 1,
+		((ts->mcs >= MAX_MCS_11A) && (ts->pkt_type == DOT11_A)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[ts->mcs], 1,
+		((ts->mcs <= MAX_MCS_11A) && (ts->pkt_type == DOT11_A)));
+
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[MAX_MCS], 1,
+		((ts->mcs >= MAX_MCS_11B) && (ts->pkt_type == DOT11_B)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[ts->mcs], 1,
+		((ts->mcs <= MAX_MCS_11B) && (ts->pkt_type == DOT11_B)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[MAX_MCS], 1,
+		((ts->mcs >= MAX_MCS_11A) && (ts->pkt_type == DOT11_N)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[ts->mcs], 1,
+		((ts->mcs <= MAX_MCS_11A) && (ts->pkt_type == DOT11_N)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[MAX_MCS], 1,
+		((ts->mcs >= MAX_MCS_11AC) && (ts->pkt_type == DOT11_AC)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[ts->mcs], 1,
+		((ts->mcs <= MAX_MCS_11AC) && (ts->pkt_type == DOT11_AC)));
+
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[MAX_MCS], 1,
+		((ts->mcs >= (MAX_MCS-1)) && (ts->pkt_type == DOT11_AX)));
+	DP_STATS_INCC(peer, tx.pkt_type[ts->pkt_type].mcs_count[ts->mcs], 1,
+		((ts->mcs <= (MAX_MCS-1)) && (ts->pkt_type == DOT11_AX)));
+
+	DP_STATS_INC(peer, tx.sgi_count[ts->sgi], 1);
+	DP_STATS_INC(peer, tx.bw[ts->bw], 1);
+	DP_STATS_UPD(peer, tx.last_ack_rssi, ts->ack_frame_rssi);
+	DP_STATS_INC(peer, tx.wme_ac_type[TID_TO_WME_AC(ts->tid)], 1);
+	DP_STATS_INCC(peer, tx.stbc, 1, ts->stbc);
+	DP_STATS_INCC(peer, tx.ofdma, 1, ts->ofdma);
+	DP_STATS_INCC(peer, tx.ldpc, 1, ts->ldpc);
+	DP_STATS_INC_PKT(peer, tx.tx_success, 1, length);
+	DP_STATS_INCC(peer, tx.amsdu_cnt, 1, ts->msdu_part_of_amsdu);
+	DP_STATS_INCC(peer, tx.retries, 1, ts->transmit_cnt > 1);
+
+	if (soc->cdp_soc.ol_ops->update_dp_stats) {
+		soc->cdp_soc.ol_ops->update_dp_stats(pdev->osif_pdev,
+				&peer->stats, ts->peer_id,
+				UPDATE_PEER_STATS);
+	}
+}
 
 /**
  * dp_tx_comp_process_tx_status() - Parse and Dump Tx completion status info
@@ -1816,10 +1893,8 @@ static inline void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
 	struct dp_soc *soc = NULL;
 	struct dp_vdev *vdev = tx_desc->vdev;
 	struct dp_peer *peer = NULL;
-	struct dp_pdev *pdev = NULL;
-	uint8_t comp_status = 0;
-	qdf_mem_zero(&ts, sizeof(struct hal_tx_completion_status));
 	hal_tx_comp_get_status(&tx_desc->comp, &ts);
+
 	QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
 				"-------------------- \n"
 				"Tx Completion Stats: \n"
@@ -1849,16 +1924,23 @@ static inline void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
 				ts.ppdu_id, ts.transmit_cnt, ts.tid,
 				ts.peer_id);
 
-	if (qdf_unlikely(tx_desc->vdev->mesh_vdev))
-		dp_tx_comp_fill_tx_completion_stats(tx_desc, &ts);
-
 	if (!vdev) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
-				"invalid peer");
-		goto fail;
+				"invalid vdev");
+		goto out;
 	}
 
-	soc = tx_desc->vdev->pdev->soc;
+	soc = vdev->pdev->soc;
+
+	/* Update SoC level stats */
+	DP_STATS_INCC(soc, tx.dropped_fw_removed, 1,
+			(ts.status == HAL_TX_TQM_RR_REM_CMD_REM));
+
+	/* Update per-packet stats */
+	if (qdf_unlikely(vdev->mesh_vdev))
+		dp_tx_comp_fill_tx_completion_stats(tx_desc, &ts);
+
+	/* Update peer level stats */
 	peer = dp_peer_find_by_id(soc, ts.peer_id);
 	if (!peer) {
 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_INFO,
@@ -1867,99 +1949,9 @@ static inline void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
 		goto out;
 	}
 
-	DP_STATS_INC_PKT(peer, tx.comp_pkt, 1, length);
-
-	if (HAL_TX_COMP_RELEASE_SOURCE_TQM ==
-				hal_tx_comp_get_buffer_source(&tx_desc->comp)) {
-		comp_status = hal_tx_comp_get_release_reason(&tx_desc->comp);
-
-		DP_STATS_INCC(peer, tx.dropped.mpdu_age_out, 1,
-				(comp_status == HAL_TX_TQM_RR_REM_CMD_AGED));
-		DP_STATS_INCC(peer, tx.dropped.fw_discard_reason1, 1,
-				(comp_status == HAL_TX_TQM_RR_FW_REASON1));
-		DP_STATS_INCC(peer, tx.dropped.fw_discard_reason2, 1,
-				(comp_status == HAL_TX_TQM_RR_FW_REASON2));
-		DP_STATS_INCC(peer, tx.dropped.fw_discard_reason3, 1,
-				(comp_status == HAL_TX_TQM_RR_FW_REASON3));
-		DP_STATS_INCC(peer, tx.tx_failed, 1,
-				comp_status != HAL_TX_TQM_RR_FRAME_ACKED);
-
-		if (comp_status == HAL_TX_TQM_RR_FRAME_ACKED) {
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[MAX_MCS], 1,
-					((ts.mcs >= MAX_MCS_11A) && (ts.pkt_type
-						== DOT11_A)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[ts.mcs], 1,
-					((ts.mcs <= MAX_MCS_11A) && (ts.pkt_type
-						== DOT11_A)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[MAX_MCS], 1,
-					((ts.mcs >= MAX_MCS_11B)
-					 && (ts.pkt_type == DOT11_B)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[ts.mcs], 1,
-					((ts.mcs <= MAX_MCS_11B)
-					 && (ts.pkt_type == DOT11_B)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[MAX_MCS], 1,
-					((ts.mcs >= MAX_MCS_11A)
-					 && (ts.pkt_type == DOT11_N)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[ts.mcs], 1,
-					((ts.mcs <= MAX_MCS_11A)
-					 && (ts.pkt_type == DOT11_N)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[MAX_MCS], 1,
-					((ts.mcs >= MAX_MCS_11AC)
-					 && (ts.pkt_type == DOT11_AC)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[ts.mcs], 1,
-					((ts.mcs <= MAX_MCS_11AC)
-					 && (ts.pkt_type == DOT11_AC)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[MAX_MCS], 1,
-					((ts.mcs >= MAX_MCS)
-					 && (ts.pkt_type == DOT11_AX)));
-			DP_STATS_INCC(peer, tx.pkt_type[ts.pkt_type].
-					mcs_count[ts.mcs], 1,
-					((ts.mcs <= MAX_MCS)
-					 && (ts.pkt_type == DOT11_AX)));
-
-			DP_STATS_INC(peer, tx.sgi_count[ts.sgi], 1);
-			DP_STATS_INC(peer, tx.bw[ts.bw], 1);
-			DP_STATS_UPD(peer, tx.last_ack_rssi, ts.ack_frame_rssi);
-			DP_STATS_INC(peer, tx.wme_ac_type[TID_TO_WME_AC(ts.tid)]
-					, 1);
-			DP_STATS_INC_PKT(peer, tx.tx_success, 1, length);
-			DP_STATS_INCC(peer, tx.stbc, 1, ts.stbc);
-			DP_STATS_INCC(peer, tx.ofdma, 1, ts.ofdma);
-			DP_STATS_INCC(peer, tx.ldpc, 1, ts.ldpc);
-			DP_STATS_INCC(peer, tx.non_amsdu_cnt, 1,
-					(ts.first_msdu && ts.last_msdu));
-			DP_STATS_INCC(peer, tx.amsdu_cnt, 1,
-					!(ts.first_msdu && ts.last_msdu));
-			DP_STATS_INCC(peer, tx.retries, 1, ts.transmit_cnt > 1);
-		}
-	}
+	dp_tx_update_peer_stats(peer, &ts, length);
 
-	/* TODO: This call is temporary.
-	 * Stats update has to be attached to the HTT PPDU message
-	 */
 out:
-	pdev = vdev->pdev;
-
-	if (pdev->enhanced_stats_en && soc->cdp_soc.ol_ops->update_dp_stats) {
-		if (peer) {
-			soc->cdp_soc.ol_ops->update_dp_stats(pdev->osif_pdev,
-					&peer->stats, ts.peer_id,
-					UPDATE_PEER_STATS);
-		}
-		dp_aggregate_vdev_stats(tx_desc->vdev);
-		soc->cdp_soc.ol_ops->update_dp_stats(vdev->pdev->osif_pdev,
-				&vdev->stats, vdev->vdev_id, UPDATE_VDEV_STATS);
-	}
-fail:
 	return;
 }
 

+ 52 - 48
dp/wifi3.0/dp_types.h

@@ -48,13 +48,10 @@
 #include <hal_api_mon.h>
 #include "hal_rx.h"
 
-#define MAX_TCL_RING 3
-#define MAX_RXDMA_ERRORS 32
-#define SUPPORTED_BW 4
-#define SUPPORTED_RECEPTION_TYPES 4
+#define MAX_BW 4
+#define MAX_RECEPTION_TYPES 4
 #define REPT_MU_MIMO 1
 #define REPT_MU_OFDMA_MIMO 3
-#define REO_ERROR_TYPE_MAX (HAL_REO_ERR_QUEUE_DESC_BLOCKED_SET+1)
 #define DP_VO_TID 6
 
 #define DP_MAX_INTERRUPT_CONTEXTS 8
@@ -72,19 +69,18 @@
 #else
 #define MAX_PDEV_CNT 3
 #endif
+
 #define MAX_LINK_DESC_BANKS 8
 #define MAX_TXDESC_POOLS 4
 #define MAX_RXDESC_POOLS 4
 #define MAX_REO_DEST_RINGS 4
 #define MAX_TCL_DATA_RINGS 4
-#define DP_MAX_TX_RINGS 8
-#define DP_MAX_RX_RINGS 8
 #define MAX_IDLE_SCATTER_BUFS 16
 #define DP_MAX_IRQ_PER_CONTEXT 12
 #define DP_MAX_INTERRUPT_CONTEXTS 8
 #define DEFAULT_HW_PEER_ID 0xffff
 
-#define MAX_TX_HW_QUEUES 3
+#define MAX_TX_HW_QUEUES MAX_TCL_DATA_RINGS
 
 #define DP_MAX_INTERRUPT_CONTEXTS 8
 #define DP_MAX_MECT_ENTRIES 64
@@ -446,6 +442,52 @@ struct reo_desc_list_node {
 	struct dp_rx_tid rx_tid;
 };
 
+/* SoC level data path statistics */
+struct dp_soc_stats {
+	/* SOC level TX stats */
+	struct {
+		/* packets dropped on tx because of no peer */
+		struct cdp_pkt_info tx_invalid_peer;
+		/* descriptors in each tcl ring */
+		uint32_t tcl_ring_full[MAX_TCL_DATA_RINGS];
+		/* Descriptors in use at soc */
+		uint32_t desc_in_use;
+		/* tqm_release_reason == FW removed */
+		uint32_t dropped_fw_removed;
+
+	} tx;
+
+	/* SOC level RX stats */
+	struct {
+		/* Rx errors */
+		/* Total Packets in Rx Error ring */
+		uint32_t err_ring_pkts;
+		/* No of Fragments */
+		uint32_t rx_frags;
+		struct {
+			/* Invalid RBM error count */
+			uint32_t invalid_rbm;
+			/* Invalid VDEV Error count */
+			uint32_t invalid_vdev;
+			/* Invalid PDEV error count */
+			uint32_t invalid_pdev;
+			/* Invalid PEER Error count */
+			struct cdp_pkt_info rx_invalid_peer;
+			/* HAL ring access Fail error count */
+			uint32_t hal_ring_access_fail;
+			/* RX DMA error count */
+			uint32_t rxdma_error[HAL_RXDMA_ERR_MAX];
+			/* REO Error count */
+			uint32_t reo_error[HAL_REO_ERR_MAX];
+			/* HAL REO ERR Count */
+			uint32_t hal_reo_error[MAX_REO_DEST_RINGS];
+		} err;
+
+		/* packet count per core - per ring */
+		uint64_t ring_packets[NR_CPUS][MAX_REO_DEST_RINGS];
+	} rx;
+};
+
 #define DP_MAC_ADDR_LEN 6
 union dp_align_mac_addr {
 	uint8_t raw[DP_MAC_ADDR_LEN];
@@ -679,46 +721,7 @@ struct dp_soc {
 	int max_peers;
 
 	/* SoC level data path statistics */
-	struct {
-		/* SOC level TX stats */
-		struct {
-			/* packets dropped on tx because of no peer */
-			struct cdp_pkt_info tx_invalid_peer;
-			/* descriptors in each tcl ring */
-			uint32_t tcl_ring_full[MAX_TCL_RING];
-			/* Descriptors in use at soc */
-			uint32_t desc_in_use;
-		} tx;
-		/* SOC level RX stats */
-		struct {
-		/* Rx errors */
-			/* Total Packets in Rx Error ring */
-			uint32_t err_ring_pkts;
-			/* No of Fragments */
-			uint32_t rx_frags;
-			struct {
-				/* Invalid RBM error count */
-				uint32_t invalid_rbm;
-				/* Invalid VDEV Error count */
-				uint32_t invalid_vdev;
-				/* Invalid PDEV error count */
-				uint32_t invalid_pdev;
-				/* Invalid PEER Error count */
-				struct cdp_pkt_info rx_invalid_peer;
-				/* HAL ring access Fail error count */
-				uint32_t hal_ring_access_fail;
-				/* RX DMA error count */
-				uint32_t rxdma_error[MAX_RXDMA_ERRORS];
-				/* REO Error count */
-				uint32_t reo_error[REO_ERROR_TYPE_MAX];
-				/* HAL REO ERR Count */
-				uint32_t hal_reo_error[CDP_MAX_RX_RINGS];
-			} err;
-
-			/* packet count per core - per ring */
-			uint64_t ring_packets[NR_CPUS][MAX_REO_DEST_RINGS];
-		} rx;
-	} stats;
+	struct dp_soc_stats stats;
 
 	/* Enable processing of Tx completion status words */
 	bool process_tx_status;
@@ -1247,4 +1250,5 @@ struct dp_tx_me_buf_t {
 	struct dp_tx_me_buf_t *next;
 	uint8_t data[DP_MAC_ADDR_LEN];
 };
+
 #endif /* _DP_TYPES_H_ */

+ 4 - 2
dp/wifi3.0/hal_rx.h

@@ -1890,7 +1890,8 @@ enum hal_reo_error_code {
 	HAL_REO_ERR_PN_CHECK_FAILED,
 	HAL_REO_ERR_2K_ERROR_HANDLING_FLAG_SET,
 	HAL_REO_ERR_PN_ERROR_HANDLING_FLAG_SET,
-	HAL_REO_ERR_QUEUE_DESC_BLOCKED_SET
+	HAL_REO_ERR_QUEUE_DESC_BLOCKED_SET,
+	HAL_REO_ERR_MAX
 };
 
 /**
@@ -1933,7 +1934,8 @@ enum hal_rxdma_error_code {
 	HAL_RXDMA_ERR_DA_TIMEOUT,
 	HAL_RXDMA_ERR_FLOW_TIMEOUT,
 	HAL_RXDMA_ERR_FLUSH_REQUEST,
-	HAL_RXDMA_ERR_WAR = 31
+	HAL_RXDMA_ERR_WAR = 31,
+	HAL_RXDMA_ERR_MAX
 };
 
 /**

+ 12 - 3
hal/wifi3.0/hal_tx.h

@@ -125,6 +125,8 @@ enum hal_tx_ret_buf_manager {
   ---------------------------------------------------------------------------*/
 /**
  * struct hal_tx_completion_status - HAL Tx completion descriptor contents
+ * @status: frame acked/failed
+ * @release_src: release source = TQM/FW
  * @ack_frame_rssi: RSSI of the received ACK or BA frame
  * @first_msdu: Indicates this MSDU is the first MSDU in AMSDU
  * @last_msdu: Indicates this MSDU is the last MSDU in AMSDU
@@ -152,6 +154,8 @@ enum hal_tx_ret_buf_manager {
  * @peer_id: Peer ID of the flow or MPDU queue
  */
 struct hal_tx_completion_status {
+	uint8_t status;
+	uint8_t release_src;
 	uint8_t ack_frame_rssi;
 	uint8_t first_msdu:1,
 		last_msdu:1,
@@ -161,9 +165,9 @@ struct hal_tx_completion_status {
 		 stbc:1,
 		 ldpc:1,
 		 sgi:2,
-		 mcs:2,
+		 mcs:4,
 		 ofdma:1,
-		 tones_in_ru:10,
+		 tones_in_ru:12,
 		 valid:1;
 	uint32_t tsf;
 	uint32_t ppdu_id;
@@ -855,7 +859,6 @@ static inline uint8_t hal_tx_comp_get_release_reason(void *hal_desc)
 static inline void hal_tx_comp_get_status(void *desc,
 		struct hal_tx_completion_status *ts)
 {
-
 	uint8_t rate_stats_valid = 0;
 	uint32_t rate_stats = 0;
 
@@ -900,6 +903,9 @@ static inline void hal_tx_comp_get_status(void *desc,
 				rate_stats);
 	}
 
+	ts->release_src = hal_tx_comp_get_buffer_source(desc);
+	ts->status = hal_tx_comp_get_release_reason(desc);
+
 	ts->tsf = HAL_TX_DESC_GET(desc, WBM_RELEASE_RING_6,
 			TX_RATE_STATS_INFO_TX_RATE_STATS);
 }
@@ -916,6 +922,9 @@ static inline void hal_tx_comp_get_status(void *desc,
 	ts->last_msdu = HAL_TX_DESC_GET(desc, WBM_RELEASE_RING_4, LAST_MSDU);
 	ts->msdu_part_of_amsdu = HAL_TX_DESC_GET(desc, WBM_RELEASE_RING_4,
 			MSDU_PART_OF_AMSDU);
+
+	ts->release_src = hal_tx_comp_get_buffer_source(desc);
+	ts->status = hal_tx_comp_get_release_reason(desc);
 }
 #endif
 

+ 0 - 3
wlan_cfg/wlan_cfg.h

@@ -35,13 +35,10 @@
 #define MAX_LINK_DESC_BANKS 8
 #define MAX_TXDESC_POOLS 4
 #define MAX_TCL_DATA_RINGS 4
-#define DP_MAX_TX_RINGS 8
-#define MAX_TX_HW_QUEUES 3
 
 /* Rx configuration */
 #define MAX_RXDESC_POOLS 4
 #define MAX_REO_DEST_RINGS 4
-#define DP_MAX_RX_RINGS 8
 #define MAX_RX_MAC_RINGS 2
 
 /* Miscellaneous configuration */

Some files were not shown because too many files changed in this diff