Browse Source

Merge "qca-wifi: Add rssi_chain support for peer rate stats"

Linux Build Service Account 6 years ago
parent
commit
68ba7c9fdc
4 changed files with 178 additions and 63 deletions
  1. 1 0
      dp/inc/dp_rate_stats.h
  2. 8 3
      dp/inc/dp_rate_stats_pub.h
  3. 30 17
      dp/src/dp_rate_stats.c
  4. 139 43
      tools/linux/peerstats.c

+ 1 - 0
dp/inc/dp_rate_stats.h

@@ -109,6 +109,7 @@ struct wlan_soc_rate_stats_ctx {
 	uint32_t rxs_cache_hit;
 	uint32_t txs_cache_miss;
 	uint32_t rxs_cache_miss;
+	bool is_lithium;
 };
 
 /**

+ 8 - 3
dp/inc/dp_rate_stats_pub.h

@@ -26,14 +26,19 @@
 #define _DP_RATE_STATS_UAPI_
 
 #define WLANSTATS_CACHE_SIZE 10
-#define MAX_RSSI_ANT 4
-#define MAX_RSSI_HT 4
+#define WLANSTATS_MAX_CHAIN_LEGACY 4
+#define WLANSTATS_MAX_BW_LEGACY 4
+#define WLANSTATS_MAX_CHAIN 8
+#define WLANSTATS_MAX_BW 8
 #define WLAN_DATA_TID_MAX 8
 #define WLAN_MAC_ADDR_LEN 6
 #define WLANSTATS_RSSI_OFFSET 8
 #define WLANSTATS_RSSI_MASK 0xff
 #define WLANSTATS_RSSI_MAX 0x80
 #define INVALID_CACHE_IDX (-1)
+#define WLANSTATS_PEER_COOKIE_LSB 32
+#define WLANSTATS_COOKIE_PLATFORM_OFFSET 0xFFFFFFFF00000000
+#define WLANSTATS_COOKIE_PEER_COOKIE_OFFSET 0x00000000FFFFFFFF
 
 #ifndef __KERNEL__
 #define qdf_ewma_tx_lag unsigned long
@@ -88,7 +93,7 @@ struct wlan_rx_rate_stats {
 	uint32_t num_retries;
 	uint32_t num_sgi;
 	qdf_ewma_rx_rssi avg_rssi;
-	qdf_ewma_rx_rssi avg_rssi_ant[MAX_RSSI_ANT][MAX_RSSI_HT];
+	qdf_ewma_rx_rssi avg_rssi_ant[WLANSTATS_MAX_CHAIN][WLANSTATS_MAX_BW];
 };
 
 /*

+ 30 - 17
dp/src/dp_rate_stats.c

@@ -29,16 +29,18 @@
 static void
 wlan_peer_read_ewma_avg_rssi(struct wlan_rx_rate_stats *rx_stats)
 {
-	uint8_t ant, ht, idx;
+	uint8_t ant, ht, cache_idx;
 
-	rx_stats->avg_rssi.internal =
-		qdf_ewma_rx_rssi_read(&rx_stats->avg_rssi);
+	for (cache_idx = 0; cache_idx < WLANSTATS_CACHE_SIZE; cache_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++)
+		for (ant = 0; ant < SS_COUNT; ant++) {
+			for (ht = 0; ht < MAX_BW; ht++) {
 				rx_stats->avg_rssi_ant[ant][ht].internal =
-			qdf_ewma_rx_rssi_read(&rx_stats->avg_rssi_ant[ant][ht]);
+				qdf_ewma_rx_rssi_read(
+					&rx_stats->avg_rssi_ant[ant][ht]);
+			}
 		}
 		rx_stats += 1;
 	}
@@ -56,11 +58,21 @@ wlan_peer_flush_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
 		return;
 	rx_stats = &stats_ctx->rx;
 
+	buf.cookie = 0;
 	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;
-	buf.cookie = stats_ctx->peer_cookie;
+	/* Prepare 64 bit cookie */
+	/*-------------------|-------------------|
+	 *  32 bit target    | 32 bit peer cookie|
+	 *-------------------|-------------------|
+	 */
+	buf.cookie = ((((buf.cookie | soc_stats_ctx->is_lithium)
+		      << WLANSTATS_PEER_COOKIE_LSB) &
+		      WLANSTATS_COOKIE_PLATFORM_OFFSET) |
+		      (((buf.cookie | stats_ctx->peer_cookie) &
+		      WLANSTATS_COOKIE_PEER_COOKIE_OFFSET)));
 	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);
@@ -168,10 +180,11 @@ __wlan_peer_update_rx_rate_stats(struct wlan_rx_rate_stats *__rx_stats,
 
 	qdf_ewma_rx_rssi_add(&__rx_stats->avg_rssi, cdp_rx_ppdu->rssi);
 
-	for (ant = 0; ant < MAX_RSSI_ANT; ant++) {
-		for (ht = 0; ht < MAX_RSSI_HT; ht++)
+	for (ant = 0; ant < SS_COUNT; ant++) {
+		for (ht = 0; ht < MAX_BW; ht++) {
 			qdf_ewma_rx_rssi_add(&__rx_stats->avg_rssi_ant[ant][ht],
 					     cdp_rx_ppdu->rssi_chain[ant][ht]);
+		}
 	}
 }
 
@@ -280,20 +293,20 @@ 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, investigate");
-			qdf_warn("peer_mac: " QDF_MAC_ADDR_STR,
+			qdf_debug("peer rate stats ctx is NULL, investigate");
+			qdf_debug("peer_mac: " QDF_MAC_ADDR_STR,
 				 QDF_MAC_ADDR_ARRAY(ppdu_user->mac_addr));
 			continue;
 		}
 
-		tx_stats = &stats_ctx->tx;
-		RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
-
-		if (qdf_unlikely(!ppdu_user->tx_ratekbps ||
+		if (qdf_unlikely(!ppdu_user->tx_ratekbps || !ppdu_user->rix ||
 				 ppdu_user->rix > DP_RATE_TABLE_SIZE)) {
-			RATE_STATS_LOCK_RELEASE(&tx_stats->lock);
 			continue;
 		}
+
+		tx_stats = &stats_ctx->tx;
+		RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
+
 		if (qdf_likely(tx_stats->cur_rix == ppdu_user->rix)) {
 			__tx_stats = &tx_stats->stats[tx_stats->cur_cache_idx];
 			__wlan_peer_update_tx_rate_stats(__tx_stats, ppdu_user);

+ 139 - 43
tools/linux/peerstats.c

@@ -46,8 +46,11 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
 {
 	int i = 0;
 	struct wlan_rx_rate_stats *rx_stats;
+	uint8_t is_lithium;
+	uint8_t chain, max_chain, bw, max_bw;
+	struct wlan_rx_rate_stats *tmp_rx_stats;;
 
-	rx_stats = (struct wlan_rx_rate_stats *)buffer;
+	rx_stats = tmp_rx_stats = (struct wlan_rx_rate_stats *)buffer;
 	PRINT("\n......................................");
 	PRINT("......................................");
 	PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
@@ -57,75 +60,168 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
 	      peer_mac[3],
 	      peer_mac[4],
 	      peer_mac[5]);
-	PRINT("\tpeer cookie: %016llx\n", peer_cookie);
+	PRINT("\tpeer cookie: %016llx\n", (peer_cookie & 0xFFFFFFFF00000000)
+					>> WLANSTATS_PEER_COOKIE_LSB);
+	is_lithium =  (peer_cookie & WLANSTATS_COOKIE_PLATFORM_OFFSET)
+					>> WLANSTATS_PEER_COOKIE_LSB;
+	if (is_lithium) {
+		max_chain = 8;
+		max_bw = 8;
+	} else {
+		max_chain = 4;
+		max_bw = 4;
+	}
 	PRINT("\n..............................................");
 	PRINT("................................");
 	PRINT("................................................");
 	PRINT(".................................\n");
 	PRINT("\tRx statistics:");
-	PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
+	PRINT(" %10s | %10s | %10s | %10s | %10s | %10s|",
 	      "rate",
 	      "rix",
 	      "bytes",
 	      "msdus",
 	      "mpdus",
 	      "ppdus");
-	PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
+	PRINT(" %10s | %10s | %10s |",
 	      "retries",
-	      "rssi",
+	      "sgi",
+	      "rssi\n");
+
+	for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
+		if (rx_stats->rix != INVALID_CACHE_IDX) {
+			PRINT(" %10u | %10u | %10u | %10u | %10u | %10u |",
+			      rx_stats->rate,
+			      rx_stats->rix,
+			      rx_stats->num_bytes,
+			      rx_stats->num_msdus,
+			      rx_stats->num_mpdus,
+			      rx_stats->num_ppdus);
+			PRINT(" %10u | %10u | %10u |\n",
+			      rx_stats->num_retries,
+			      rx_stats->num_sgi,
+			      rx_stats->avg_rssi);
+		}
+		rx_stats = rx_stats + 1;
+	}
+	if (is_lithium) {
+	PRINT("\n %10s | %10s | %10s | %10s | %10s |",
+	      "rate",
+	      "rssi 1 p20",
+	      "rssi 1 e20",
+	      "rssi 1 e40 low20",
+	      "rssi 1 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 1 ext80 low20",
+	      "rssi 1 ext80 low_high20",
+	      "rssi 1 ext80 high_low20",
+	      "rssi 1 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 2 p20",
+	      "rssi 2 e20",
+	      "rssi 2 e40 low20",
+	      "rssi 2 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 2 ext80 low20",
+	      "rssi 2 ext80 low_high20",
+	      "rssi 2 ext80 high_low20",
+	      "rssi 2 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 3 p20",
+	      "rssi 3 e20",
+	      "rssi 3 e40 low20",
+	      "rssi 3 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 3 ext80 low20",
+	      "rssi 3 ext80 low_high20",
+	      "rssi 3 ext80 high_low20",
+	      "rssi 3 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 4 p20",
+	      "rssi 4 e20",
+	      "rssi 4 e40 low20",
+	      "rssi 4 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 4 ext80 low20",
+	      "rssi 4 ext80 low_high20",
+	      "rssi 4 ext80 high_low20",
+	      "rssi 4 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 5 p20",
+	      "rssi 5 e20",
+	      "rssi 5 e40 low20",
+	      "rssi 5 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 5 ext80 low20",
+	      "rssi 5 ext80 low_high20",
+	      "rssi 5 ext80 high_low20",
+	      "rssi 5 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 6 p20",
+	      "rssi 6 e20",
+	      "rssi 6 e40 low20",
+	      "rssi 6 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 6 ext80 low20",
+	      "rssi 6 ext80 low_high20",
+	      "rssi 6 ext80 high_low20",
+	      "rssi 6 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 7 p20",
+	      "rssi 7 e20",
+	      "rssi 7 e40 low20",
+	      "rssi 7 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 7 ext80 low20",
+	      "rssi 7 ext80 low_high20",
+	      "rssi 7 ext80 high_low20",
+	      "rssi 7 ext80 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |",
+	      "rssi 8 p20",
+	      "rssi 8 e20",
+	      "rssi 8 e40 low20",
+	      "rssi 8 e40 high20");
+	PRINT("\n            | %10s | %10s | %10s | %10s |\n\n\n",
+	      "rssi 8 ext80 low20",
+	      "rssi 8 ext80 low_high20",
+	      "rssi 8 ext80 high_low20",
+	      "rssi 8 ext80 high20");
+	} else {
+	PRINT("\n %10s | %10s | %10s | %10s | %10s |",
+	      "rate",
 	      "rssi 1 p20",
 	      "rssi 1 e20",
 	      "rssi 1 e40",
 	      "rssi 1 e80");
-	PRINT(" | %10s | | %10s | %10s | %10s | %10s | %10s",
+	PRINT("            | %10s | %10s | %10s | %10s |",
 	      "rssi 2 p20",
 	      "rssi 2 e20",
 	      "rssi 2 e40",
-	      "rssi 2 e80",
+	      "rssi 2 e80");
+	PRINT("            | %10s | %10s | %10s | %10s |",
 	      "rssi 3 p20",
-	      "rssi 3 e20");
-	PRINT(" | %10s | %10s | %10s | %10s | %10s | %10s\n\n\n",
+	      "rssi 3 e20",
 	      "rssi 3 e40",
-	      "rssi 3 e80",
+	      "rssi 3 e80");
+	PRINT("            | %10s | %10s | %10s | %10s |\n\n\n",
 	      "rssi 4 p20",
 	      "rssi 4 e20",
 	      "rssi 4 e40",
 	      "rssi 4 e80");
-
+	}
 	for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
-		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]);
+		if (tmp_rx_stats->rix != INVALID_CACHE_IDX) {
+			printf(" %10u |", tmp_rx_stats->rate);
+			for (chain = 0; chain < max_chain; chain++) {
+				for (bw = 0; bw < max_bw; bw++) {
+					printf(" %10d |",
+					tmp_rx_stats->avg_rssi_ant[chain][bw]);
+				}
+				printf("            \n\t     ");
+			}
+			PRINT("");
 		}
-		rx_stats = rx_stats + 1;
+		tmp_rx_stats = tmp_rx_stats + 1;
 	}
 }