فهرست منبع

qca-wifi: Fix zero rate index issue in peer rate stats

Rate index zero (representing 11 Mbps in ratetable) was ignored in current
stats implementation. Added code changes to include zero rate index

Some formatting is done in peerstats app to avoid exceeding 80 chars

CRs-Fixed: 2424176
Change-Id: I9d6938cc840ee3db3639b3608b429a97832c3168
Amir Patel 6 سال پیش
والد
کامیت
c87166665a
3فایلهای تغییر یافته به همراه212 افزوده شده و 161 حذف شده
  1. 4 3
      dp/inc/dp_rate_stats_pub.h
  2. 63 12
      dp/src/dp_rate_stats.c
  3. 145 146
      tools/linux/peerstats.c

+ 4 - 3
dp/inc/dp_rate_stats_pub.h

@@ -33,10 +33,11 @@
 #define WLANSTATS_RSSI_OFFSET 8
 #define WLANSTATS_RSSI_MASK 0xff
 #define WLANSTATS_RSSI_MAX 0x80
+#define INVALID_CACHE_IDX (-1)
 
 #ifndef __KERNEL__
-#define qdf_ewma_tx_lag int
-#define qdf_ewma_rx_rssi int
+#define qdf_ewma_tx_lag unsigned long
+#define qdf_ewma_rx_rssi unsigned long
 #else
 #include <cdp_txrx_cmn_struct.h>
 QDF_DECLARE_EWMA(rx_rssi, 1024, 8)
@@ -100,10 +101,10 @@ struct wlan_rx_rate_stats {
  */
 struct wlan_tx_sojourn_stats {
 	uint32_t ppdu_seq_id;
-	qdf_ewma_tx_lag avg_sojourn_msdu[WLAN_DATA_TID_MAX];
 	uint32_t sum_sojourn_msdu[WLAN_DATA_TID_MAX];
 	uint32_t num_msdus[WLAN_DATA_TID_MAX];
 	void *cookie;
+	qdf_ewma_tx_lag avg_sojourn_msdu[WLAN_DATA_TID_MAX];
 };
 
 /**

+ 63 - 12
dp/src/dp_rate_stats.c

@@ -26,17 +26,37 @@
 
 #ifdef QCA_SUPPORT_RDK_STATS
 
+static void
+wlan_peer_read_ewma_avg_rssi(struct wlan_rx_rate_stats *rx_stats)
+{
+	uint8_t ant, ht, idx;
+
+	rx_stats->avg_rssi.internal =
+		qdf_ewma_rx_rssi_read(&rx_stats->avg_rssi);
+
+	for (idx = 0; idx < WLANSTATS_CACHE_SIZE; idx++) {
+		for (ant = 0; ant < MAX_RSSI_ANT; ant++) {
+			for (ht = 0; ht < MAX_RSSI_HT; ht++)
+				rx_stats->avg_rssi_ant[ant][ht].internal =
+			qdf_ewma_rx_rssi_read(&rx_stats->avg_rssi_ant[ant][ht]);
+		}
+		rx_stats += 1;
+	}
+}
+
 static void
 wlan_peer_flush_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 			      struct wlan_peer_rate_stats_ctx *stats_ctx)
 {
 	struct wlan_peer_rate_stats_intf buf;
 	struct wlan_peer_rx_rate_stats *rx_stats;
+	uint8_t idx;
 
 	if (!soc_stats_ctx)
 		return;
 	rx_stats = &stats_ctx->rx;
 
+	wlan_peer_read_ewma_avg_rssi(rx_stats->stats);
 	buf.stats = (struct wlan_rx_rate_stats *)rx_stats->stats;
 	buf.buf_len = WLANSTATS_CACHE_SIZE * sizeof(struct wlan_rx_rate_stats);
 	buf.stats_type = DP_PEER_RX_RATE_STATS;
@@ -50,6 +70,19 @@ wlan_peer_flush_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 
 	qdf_mem_zero(rx_stats->stats, WLANSTATS_CACHE_SIZE *
 		     sizeof(struct wlan_rx_rate_stats));
+	for (idx = 0; idx < WLANSTATS_CACHE_SIZE; idx++)
+		rx_stats->stats[idx].rix = INVALID_CACHE_IDX;
+}
+
+static void
+wlan_peer_read_sojourn_average(struct wlan_peer_tx_rate_stats *tx_stats)
+{
+	uint8_t tid;
+
+	for (tid = 0; tid < CDP_DATA_TID_MAX; tid++) {
+		tx_stats->sojourn.avg_sojourn_msdu[tid].internal =
+		qdf_ewma_tx_lag_read(&tx_stats->sojourn.avg_sojourn_msdu[tid]);
+	}
 }
 
 static void
@@ -58,6 +91,8 @@ wlan_peer_flush_tx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 {
 	struct wlan_peer_rate_stats_intf buf;
 	struct wlan_peer_tx_rate_stats *tx_stats;
+	uint8_t idx;
+	uint8_t tid;
 
 	if (!soc_stats_ctx)
 		return;
@@ -68,6 +103,7 @@ wlan_peer_flush_tx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 		       + sizeof(struct wlan_tx_sojourn_stats));
 	buf.stats_type = DP_PEER_TX_RATE_STATS;
 	buf.cookie = stats_ctx->peer_cookie;
+	wlan_peer_read_sojourn_average(tx_stats);
 	qdf_mem_copy(buf.peer_mac, stats_ctx->mac_addr, WLAN_MAC_ADDR_LEN);
 	cdp_peer_flush_rate_stats(soc_stats_ctx->soc,
 				  stats_ctx->pdev, &buf);
@@ -76,8 +112,14 @@ wlan_peer_flush_tx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 	qdf_info("txs_cache_flush: %d", soc_stats_ctx->txs_cache_flush);
 
 	qdf_mem_zero(tx_stats->stats, WLANSTATS_CACHE_SIZE *
-		     sizeof(struct wlan_tx_rate_stats) +
-		     sizeof(struct wlan_tx_sojourn_stats));
+		     sizeof(struct wlan_tx_rate_stats));
+
+	for (tid = 0; tid < WLAN_DATA_TID_MAX; tid++) {
+		tx_stats->sojourn.sum_sojourn_msdu[tid] = 0;
+		tx_stats->sojourn.num_msdus[tid] = 0;
+	}
+	for (idx = 0; idx < WLANSTATS_CACHE_SIZE; idx++)
+		tx_stats->stats[idx].rix = INVALID_CACHE_IDX;
 }
 
 static void
@@ -154,8 +196,8 @@ wlan_peer_update_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 
 	rx_stats = &stats_ctx->rx;
 
-	if (qdf_unlikely(cdp_rx_ppdu->rix > DP_RATE_TABLE_SIZE)) {
-		qdf_warn("Invalid rate index, return");
+	if (qdf_unlikely(!cdp_rx_ppdu->rx_ratekbps ||
+			 cdp_rx_ppdu->rix > DP_RATE_TABLE_SIZE)) {
 		return;
 	}
 
@@ -172,7 +214,8 @@ wlan_peer_update_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 	/* check if cache is available */
 	for (cache_idx = 0; cache_idx < WLANSTATS_CACHE_SIZE; cache_idx++) {
 		__rx_stats = &rx_stats->stats[cache_idx];
-		if (!__rx_stats->rix || (__rx_stats->rix == cdp_rx_ppdu->rix)) {
+		if ((__rx_stats->rix == INVALID_CACHE_IDX) ||
+		    (__rx_stats->rix == cdp_rx_ppdu->rix)) {
 			idx_match = true;
 			break;
 		}
@@ -213,7 +256,7 @@ __wlan_peer_update_tx_rate_stats(struct wlan_tx_rate_stats *__tx_stats,
 	mpdu_success = ppdu_user->mpdu_tried_ucast - ppdu_user->mpdu_failed;
 
 	__tx_stats->rix = ppdu_user->rix;
-	__tx_stats->rate = ppdu_user->tx_rate;
+	__tx_stats->rate = ppdu_user->tx_ratekbps;
 	__tx_stats->num_ppdus += num_ppdus;
 	__tx_stats->mpdu_attempts += mpdu_attempts;
 	__tx_stats->mpdu_success += mpdu_success;
@@ -237,16 +280,17 @@ wlan_peer_update_tx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 				ppdu_user->cookie;
 
 		if (qdf_unlikely(!stats_ctx)) {
-			qdf_warn("peer rate stats ctx is NULL, return");
+			qdf_warn("peer rate stats ctx is NULL, investigate");
 			qdf_warn("peer_mac: " QDF_MAC_ADDR_STR,
 				 QDF_MAC_ADDR_ARRAY(ppdu_user->mac_addr));
-			return;
+			continue;
 		}
 
 		tx_stats = &stats_ctx->tx;
 		RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
 
-		if (qdf_unlikely(ppdu_user->rix > DP_RATE_TABLE_SIZE)) {
+		if (qdf_unlikely(!ppdu_user->rix ||
+				 ppdu_user->rix > DP_RATE_TABLE_SIZE)) {
 			qdf_warn("Invalid rate index, continue.");
 			RATE_STATS_LOCK_RELEASE(&tx_stats->lock);
 			continue;
@@ -263,7 +307,8 @@ wlan_peer_update_tx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 		for (cache_idx = 0; cache_idx < WLANSTATS_CACHE_SIZE;
 					cache_idx++) {
 			__tx_stats = &tx_stats->stats[cache_idx];
-			if (!__tx_stats->rix ||
+
+			if ((__tx_stats->rix == INVALID_CACHE_IDX) ||
 			    (__tx_stats->rix == ppdu_user->rix)) {
 				idx_match = true;
 				break;
@@ -313,8 +358,8 @@ wlan_peer_update_sojourn_stats(void *ctx,
 
 	RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
 	for (tid = 0; tid < CDP_DATA_TID_MAX; tid++) {
-		tx_stats->sojourn.avg_sojourn_msdu[tid] =
-			sojourn_stats->avg_sojourn_msdu[tid];
+		tx_stats->sojourn.avg_sojourn_msdu[tid].internal =
+			sojourn_stats->avg_sojourn_msdu[tid].internal;
 
 		tx_stats->sojourn.sum_sojourn_msdu[tid] +=
 			sojourn_stats->sum_sojourn_msdu[tid];
@@ -372,6 +417,7 @@ void wlan_peer_create_event_handler(void *pdev, enum WDI_EVENT event,
 {
 	struct cdp_peer_cookie *peer_info;
 	struct wlan_peer_rate_stats_ctx *stats;
+	uint8_t idx;
 
 	peer_info = (struct cdp_peer_cookie *)buf;
 	stats = qdf_mem_malloc(sizeof(*stats));
@@ -386,6 +432,11 @@ void wlan_peer_create_event_handler(void *pdev, enum WDI_EVENT event,
 	stats->peer_cookie = peer_info->cookie;
 	stats->pdev = pdev;
 
+	for (idx = 0; idx < WLANSTATS_CACHE_SIZE; idx++) {
+		stats->tx.stats[idx].rix = INVALID_CACHE_IDX;
+		stats->rx.stats[idx].rix = INVALID_CACHE_IDX;
+	}
+
 	peer_info->ctx = (void *)stats;
 }
 

+ 145 - 146
tools/linux/peerstats.c

@@ -31,7 +31,7 @@
 #error confilicting defs of min
 #endif
 
-#define DP_PEER_STATS_PRINT(fmt, ...) \
+#define PRINT(fmt, ...) \
 	do { \
 		printf(fmt, ##__VA_ARGS__); \
 		printf("\n"); \
@@ -48,83 +48,83 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
 	struct wlan_rx_rate_stats *rx_stats;
 
 	rx_stats = (struct wlan_rx_rate_stats *)buffer;
-	DP_PEER_STATS_PRINT("\n......................................");
-	DP_PEER_STATS_PRINT("......................................");
-	DP_PEER_STATS_PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
-			    peer_mac[0],
-			    peer_mac[1],
-			    peer_mac[2],
-			    peer_mac[3],
-			    peer_mac[4],
-			    peer_mac[5]);
-	DP_PEER_STATS_PRINT("\tpeer cookie: %016llx\n",
-			    peer_cookie);
-	DP_PEER_STATS_PRINT("\n..............................................");
-	DP_PEER_STATS_PRINT("................................");
-	DP_PEER_STATS_PRINT("................................................");
-	DP_PEER_STATS_PRINT(".................................\n");
-	DP_PEER_STATS_PRINT("\tRx statistics:");
-	DP_PEER_STATS_PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
-			    "rate",
-			    "rix",
-			    "bytes",
-			    "msdus",
-			    "mpdus",
-			    "ppdus");
-	DP_PEER_STATS_PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
-			    "retries",
-			    "rssi",
-			    "rssi 1 p20",
-			    "rssi 1 e20",
-			    "rssi 1 e40",
-			    "rssi 1 e80");
-	DP_PEER_STATS_PRINT(" | %10s | | %10s | %10s | %10s | %10s | %10s",
-			    "rssi 2 p20",
-			    "rssi 2 e20",
-			    "rssi 2 e40",
-			    "rssi 2 e80",
-			    "rssi 3 p20",
-			    "rssi 3 e20");
-	DP_PEER_STATS_PRINT(" | %10s | %10s | %10s | %10s | %10s | %10s\n\n\n",
-			    "rssi 3 e40",
-			    "rssi 3 e80",
-			    "rssi 4 p20",
-			    "rssi 4 e20",
-			    "rssi 4 e40",
-			    "rssi 4 e80");
+	PRINT("\n......................................");
+	PRINT("......................................");
+	PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
+	      peer_mac[0],
+	      peer_mac[1],
+	      peer_mac[2],
+	      peer_mac[3],
+	      peer_mac[4],
+	      peer_mac[5]);
+	PRINT("\tpeer cookie: %016llx\n", peer_cookie);
+	PRINT("\n..............................................");
+	PRINT("................................");
+	PRINT("................................................");
+	PRINT(".................................\n");
+	PRINT("\tRx statistics:");
+	PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
+	      "rate",
+	      "rix",
+	      "bytes",
+	      "msdus",
+	      "mpdus",
+	      "ppdus");
+	PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
+	      "retries",
+	      "rssi",
+	      "rssi 1 p20",
+	      "rssi 1 e20",
+	      "rssi 1 e40",
+	      "rssi 1 e80");
+	PRINT(" | %10s | | %10s | %10s | %10s | %10s | %10s",
+	      "rssi 2 p20",
+	      "rssi 2 e20",
+	      "rssi 2 e40",
+	      "rssi 2 e80",
+	      "rssi 3 p20",
+	      "rssi 3 e20");
+	PRINT(" | %10s | %10s | %10s | %10s | %10s | %10s\n\n\n",
+	      "rssi 3 e40",
+	      "rssi 3 e80",
+	      "rssi 4 p20",
+	      "rssi 4 e20",
+	      "rssi 4 e40",
+	      "rssi 4 e80");
 
 	for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
-		DP_PEER_STATS_PRINT("\t\t%10u | %10u | %10u | %10u | %10u |",
-				    rx_stats->rate,
-				    rx_stats->rix,
-				    rx_stats->num_bytes,
-				    rx_stats->num_msdus,
-				    rx_stats->num_mpdus
-				     );
-		DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
-				    rx_stats->num_ppdus,
-				    rx_stats->num_retries,
-				    rx_stats->num_sgi,
-				    rx_stats->avg_rssi,
-				    rx_stats->avg_rssi_ant[0][0]);
-		DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
-				    rx_stats->avg_rssi_ant[0][1],
-				    rx_stats->avg_rssi_ant[0][2],
-				    rx_stats->avg_rssi_ant[0][3],
-				    rx_stats->avg_rssi_ant[1][0],
-				    rx_stats->avg_rssi_ant[1][1]);
-		DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u |",
-				    rx_stats->avg_rssi_ant[1][2],
-				    rx_stats->avg_rssi_ant[1][3],
-				    rx_stats->avg_rssi_ant[2][0],
-				    rx_stats->avg_rssi_ant[2][1],
-				    rx_stats->avg_rssi_ant[2][2]);
-		DP_PEER_STATS_PRINT(" %10u | %10u | %10u | %10u | %10u\n\n\n",
-				    rx_stats->avg_rssi_ant[2][3],
-				    rx_stats->avg_rssi_ant[3][0],
-				    rx_stats->avg_rssi_ant[3][1],
-				    rx_stats->avg_rssi_ant[3][2],
-				    rx_stats->avg_rssi_ant[3][3]);
+		if (rx_stats->rix != INVALID_CACHE_IDX) {
+			PRINT(" %10u | %10u | %10u | %10u | %10u |",
+			      rx_stats->rate,
+			      rx_stats->rix,
+			      rx_stats->num_bytes,
+			      rx_stats->num_msdus,
+			      rx_stats->num_mpdus);
+			PRINT(" %10u | %10u | %10u | %10lu | %10lu |",
+			      rx_stats->num_ppdus,
+			      rx_stats->num_retries,
+			      rx_stats->num_sgi,
+			      rx_stats->avg_rssi,
+			      rx_stats->avg_rssi_ant[0][0]);
+			PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu |",
+			      rx_stats->avg_rssi_ant[0][1],
+			      rx_stats->avg_rssi_ant[0][2],
+			      rx_stats->avg_rssi_ant[0][3],
+			      rx_stats->avg_rssi_ant[1][0],
+			      rx_stats->avg_rssi_ant[1][1]);
+			PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu |",
+			      rx_stats->avg_rssi_ant[1][2],
+			      rx_stats->avg_rssi_ant[1][3],
+			      rx_stats->avg_rssi_ant[2][0],
+			      rx_stats->avg_rssi_ant[2][1],
+			      rx_stats->avg_rssi_ant[2][2]);
+			PRINT(" %10lu | %10lu | %10lu | %10lu | %10lu\n\n\n",
+			      rx_stats->avg_rssi_ant[2][3],
+			      rx_stats->avg_rssi_ant[3][0],
+			      rx_stats->avg_rssi_ant[3][1],
+			      rx_stats->avg_rssi_ant[3][2],
+			      rx_stats->avg_rssi_ant[3][3]);
+		}
 		rx_stats = rx_stats + 1;
 	}
 }
@@ -136,42 +136,38 @@ dp_peer_tx_sojourn_stats_print(uint8_t *peer_mac,
 {
 	uint8_t tid;
 
-	DP_PEER_STATS_PRINT("\n..........................................");
-	DP_PEER_STATS_PRINT("....................................");
-	DP_PEER_STATS_PRINT("....................................");
-	DP_PEER_STATS_PRINT(".........................................\n");
-	DP_PEER_STATS_PRINT("PEER%02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n",
-			    peer_mac[0],
-			    peer_mac[1],
-			    peer_mac[2],
-			    peer_mac[3],
-			    peer_mac[4],
-			    peer_mac[5]);
-	DP_PEER_STATS_PRINT("\tPEER Cookie: %016llx\n",
-			    peer_cookie);
-	DP_PEER_STATS_PRINT("\n...........................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("..................................");
-	DP_PEER_STATS_PRINT("............................................");
-	DP_PEER_STATS_PRINT("\n\tSojourn statistics:\n");
-	DP_PEER_STATS_PRINT("\t\t%10s %10s %20s %20s\n",
-			    "tid",
-			    "ave",
-			    "sum",
-			    "num");
+	PRINT("\n..........................................");
+	PRINT("....................................");
+	PRINT("....................................");
+	PRINT(".........................................\n");
+	PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n",
+	      peer_mac[0],
+	      peer_mac[1],
+	      peer_mac[2],
+	      peer_mac[3],
+	      peer_mac[4],
+	      peer_mac[5]);
+	PRINT("\tPEER Cookie: %016llx\n", peer_cookie);
+	PRINT("\n...........................................");
+	PRINT("...................................");
+	PRINT("..................................");
+	PRINT("............................................");
+	PRINT("\n\tSojourn statistics:\n");
+	PRINT("\t\t%10s %10s %20s %20s\n", "tid", "ave", "sum", "num");
 
 	for (tid = 0; tid < WLAN_DATA_TID_MAX; tid++) {
 				/* change sum_sojourn_msdu data type to u64 */
-		DP_PEER_STATS_PRINT("\t\t%10d %10u %20u %20u\n",
-				    tid,
-				    sojourn_stats->avg_sojourn_msdu[tid],
-				    sojourn_stats->sum_sojourn_msdu[tid],
-				    sojourn_stats->num_msdus[tid]);
+		PRINT("\t\t%10d %10lu %20u %20u\n",
+		      tid,
+		      sojourn_stats->avg_sojourn_msdu[tid],
+		      sojourn_stats->sum_sojourn_msdu[tid],
+		      sojourn_stats->num_msdus[tid]);
 	}
-	DP_PEER_STATS_PRINT("\n...........................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...........................................\n");
+	PRINT("sizeof(avg): %d", sizeof(sojourn_stats->avg_sojourn_msdu[tid]));
+	PRINT("\n...........................................");
+	PRINT("...................................");
+	PRINT("...................................");
+	PRINT("...........................................\n");
 }
 
 static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
@@ -186,46 +182,49 @@ static void dp_peer_tx_rate_stats_print(uint8_t *peer_mac,
 	if (buffer_len < (WLANSTATS_CACHE_SIZE *
 			  sizeof(struct wlan_tx_rate_stats))
 			  + sizeof(struct wlan_tx_sojourn_stats)) {
-		DP_PEER_STATS_PRINT("invalid buffer len, return");
+		PRINT("invalid buffer len, return");
 		return;
 	}
 	tx_stats = (struct wlan_tx_rate_stats *)buffer;
-	DP_PEER_STATS_PRINT("\n...........................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...........................................\n");
-	DP_PEER_STATS_PRINT("PEER%02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n\n",
-			    peer_mac[0],
-			    peer_mac[1],
-			    peer_mac[2],
-			    peer_mac[3],
-			    peer_mac[4],
-			    peer_mac[5]);
-	DP_PEER_STATS_PRINT("\tPEER Cookie: %016llx",
-			    peer_cookie);
-	DP_PEER_STATS_PRINT("\n...........................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...................................");
-	DP_PEER_STATS_PRINT("...........................................\n");
-	DP_PEER_STATS_PRINT("\tTx statistics:\n");
-	DP_PEER_STATS_PRINT("\t\t%10s | %10s | %10s | %10s | %10s",
-			    "rate",
-			    "rix",
-			    "attempts",
-			    "success",
-			    "ppdus");
+	PRINT("\n...........................................");
+	PRINT("...................................");
+	PRINT("...................................");
+	PRINT("...........................................\n");
+	PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx%02hhx:%02hhx\n\n",
+	      peer_mac[0],
+	      peer_mac[1],
+	      peer_mac[2],
+	      peer_mac[3],
+	      peer_mac[4],
+	      peer_mac[5]);
+	PRINT("\tPEER Cookie: %016llx", peer_cookie);
+	PRINT("\n...........................................");
+	PRINT("...................................");
+	PRINT("...................................");
+	PRINT("...........................................\n");
+	PRINT("\tTx statistics:\n");
+	PRINT("\t\t%10s | %10s | %10s | %10s | %10s",
+	      "rate",
+	      "rix",
+	      "attempts",
+	      "success",
+	      "ppdus");
+
 	for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
-		DP_PEER_STATS_PRINT("\t\t%10u | %10u | %10u | %10u | %10u\n",
-				    tx_stats->rate,
-				    tx_stats->rix,
-				    tx_stats->mpdu_attempts,
-				    tx_stats->mpdu_success,
-				    tx_stats->num_ppdus);
+		if (tx_stats->rix != INVALID_CACHE_IDX) {
+			PRINT("\t\t%10u | %10u | %10u | %10u | %10u\n",
+			      tx_stats->rate,
+			      tx_stats->rix,
+			      tx_stats->mpdu_attempts,
+			      tx_stats->mpdu_success,
+			      tx_stats->num_ppdus);
+		}
 		tx_stats = tx_stats + 1;
 	}
 
-	sojourn_stats = buffer + (WLANSTATS_CACHE_SIZE *
-				  sizeof(struct wlan_tx_rate_stats));
+	sojourn_stats = (struct wlan_tx_sojourn_stats *)((uint8_t *)buffer
+			 + (WLANSTATS_CACHE_SIZE *
+			 sizeof(struct wlan_tx_rate_stats)));
 	dp_peer_tx_sojourn_stats_print(peer_mac, peer_cookie, sojourn_stats);
 
 	return;
@@ -275,20 +274,20 @@ dp_peer_stats_event_callback(char *ifname,
 
 	if (nla_parse(tb_array, QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_MAX,
 		      (struct nlattr *)data, len, NULL)) {
-		printf("INVALID EVENT\n");
+		PRINT("Invalid event\n");
 		return;
 	}
 
 	tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_TYPE];
 	if (!tb) {
-		printf("#############%s:%d\n", __func__, __LINE__);
+		PRINT("Cache type in NULL, return");
 		return;
 	}
 	cache_type = nla_get_u32(tb);
 
 	tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_PEER_MAC];
 	if (!tb) {
-		printf("#############%s:%d\n", __func__, __LINE__);
+		PRINT("Peer mac addr is null, return");
 		return;
 	}
 	peer_mac = (uint8_t *)nla_data(tb);
@@ -301,12 +300,12 @@ dp_peer_stats_event_callback(char *ifname,
 
 	tb = tb_array[QCA_WLAN_VENDOR_ATTR_PEER_STATS_CACHE_PEER_COOKIE];
 	if (!tb) {
-		printf("#############%s:%d\n", __func__, __LINE__);
+		PRINT("peer cookie attribute is null, return");
 		return;
 	}
 	peer_cookie = nla_get_u64(tb);
 	if (!buffer) {
-		printf("#############%s:%d\n", __func__, __LINE__);
+		PRINT(" stats buffer is null, return");
 		return;
 	}