qca-wifi: Add rssi_chain support for peer rate stats
Add rssi_chain support for peer rate stats CRs-Fixed: 2445933 Change-Id: I98a0bb6e17cfc5ef22a36a1fe632b4dbe2c0d02a
This commit is contained in:
@@ -109,6 +109,7 @@ struct wlan_soc_rate_stats_ctx {
|
|||||||
uint32_t rxs_cache_hit;
|
uint32_t rxs_cache_hit;
|
||||||
uint32_t txs_cache_miss;
|
uint32_t txs_cache_miss;
|
||||||
uint32_t rxs_cache_miss;
|
uint32_t rxs_cache_miss;
|
||||||
|
bool is_lithium;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -26,14 +26,19 @@
|
|||||||
#define _DP_RATE_STATS_UAPI_
|
#define _DP_RATE_STATS_UAPI_
|
||||||
|
|
||||||
#define WLANSTATS_CACHE_SIZE 10
|
#define WLANSTATS_CACHE_SIZE 10
|
||||||
#define MAX_RSSI_ANT 4
|
#define WLANSTATS_MAX_CHAIN_LEGACY 4
|
||||||
#define MAX_RSSI_HT 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_DATA_TID_MAX 8
|
||||||
#define WLAN_MAC_ADDR_LEN 6
|
#define WLAN_MAC_ADDR_LEN 6
|
||||||
#define WLANSTATS_RSSI_OFFSET 8
|
#define WLANSTATS_RSSI_OFFSET 8
|
||||||
#define WLANSTATS_RSSI_MASK 0xff
|
#define WLANSTATS_RSSI_MASK 0xff
|
||||||
#define WLANSTATS_RSSI_MAX 0x80
|
#define WLANSTATS_RSSI_MAX 0x80
|
||||||
#define INVALID_CACHE_IDX (-1)
|
#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__
|
#ifndef __KERNEL__
|
||||||
#define qdf_ewma_tx_lag unsigned long
|
#define qdf_ewma_tx_lag unsigned long
|
||||||
@@ -88,7 +93,7 @@ struct wlan_rx_rate_stats {
|
|||||||
uint32_t num_retries;
|
uint32_t num_retries;
|
||||||
uint32_t num_sgi;
|
uint32_t num_sgi;
|
||||||
qdf_ewma_rx_rssi avg_rssi;
|
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];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -29,16 +29,18 @@
|
|||||||
static void
|
static void
|
||||||
wlan_peer_read_ewma_avg_rssi(struct wlan_rx_rate_stats *rx_stats)
|
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 =
|
for (cache_idx = 0; cache_idx < WLANSTATS_CACHE_SIZE; cache_idx++) {
|
||||||
qdf_ewma_rx_rssi_read(&rx_stats->avg_rssi);
|
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 < SS_COUNT; ant++) {
|
||||||
for (ant = 0; ant < MAX_RSSI_ANT; ant++) {
|
for (ht = 0; ht < MAX_BW; ht++) {
|
||||||
for (ht = 0; ht < MAX_RSSI_HT; ht++)
|
|
||||||
rx_stats->avg_rssi_ant[ant][ht].internal =
|
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;
|
rx_stats += 1;
|
||||||
}
|
}
|
||||||
@@ -56,11 +58,21 @@ wlan_peer_flush_rx_rate_stats(struct wlan_soc_rate_stats_ctx *soc_stats_ctx,
|
|||||||
return;
|
return;
|
||||||
rx_stats = &stats_ctx->rx;
|
rx_stats = &stats_ctx->rx;
|
||||||
|
|
||||||
|
buf.cookie = 0;
|
||||||
wlan_peer_read_ewma_avg_rssi(rx_stats->stats);
|
wlan_peer_read_ewma_avg_rssi(rx_stats->stats);
|
||||||
buf.stats = (struct wlan_rx_rate_stats *)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.buf_len = WLANSTATS_CACHE_SIZE * sizeof(struct wlan_rx_rate_stats);
|
||||||
buf.stats_type = DP_PEER_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);
|
qdf_mem_copy(buf.peer_mac, stats_ctx->mac_addr, WLAN_MAC_ADDR_LEN);
|
||||||
cdp_peer_flush_rate_stats(soc_stats_ctx->soc,
|
cdp_peer_flush_rate_stats(soc_stats_ctx->soc,
|
||||||
stats_ctx->pdev, &buf);
|
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);
|
qdf_ewma_rx_rssi_add(&__rx_stats->avg_rssi, cdp_rx_ppdu->rssi);
|
||||||
|
|
||||||
for (ant = 0; ant < MAX_RSSI_ANT; ant++) {
|
for (ant = 0; ant < SS_COUNT; ant++) {
|
||||||
for (ht = 0; ht < MAX_RSSI_HT; ht++)
|
for (ht = 0; ht < MAX_BW; ht++) {
|
||||||
qdf_ewma_rx_rssi_add(&__rx_stats->avg_rssi_ant[ant][ht],
|
qdf_ewma_rx_rssi_add(&__rx_stats->avg_rssi_ant[ant][ht],
|
||||||
cdp_rx_ppdu->rssi_chain[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;
|
ppdu_user->cookie;
|
||||||
|
|
||||||
if (qdf_unlikely(!stats_ctx)) {
|
if (qdf_unlikely(!stats_ctx)) {
|
||||||
qdf_warn("peer rate stats ctx is NULL, investigate");
|
qdf_debug("peer rate stats ctx is NULL, investigate");
|
||||||
qdf_warn("peer_mac: " QDF_MAC_ADDR_STR,
|
qdf_debug("peer_mac: " QDF_MAC_ADDR_STR,
|
||||||
QDF_MAC_ADDR_ARRAY(ppdu_user->mac_addr));
|
QDF_MAC_ADDR_ARRAY(ppdu_user->mac_addr));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (qdf_unlikely(!ppdu_user->tx_ratekbps || !ppdu_user->rix ||
|
||||||
|
ppdu_user->rix > DP_RATE_TABLE_SIZE)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
tx_stats = &stats_ctx->tx;
|
tx_stats = &stats_ctx->tx;
|
||||||
RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
|
RATE_STATS_LOCK_ACQUIRE(&tx_stats->lock);
|
||||||
|
|
||||||
if (qdf_unlikely(!ppdu_user->tx_ratekbps ||
|
|
||||||
ppdu_user->rix > DP_RATE_TABLE_SIZE)) {
|
|
||||||
RATE_STATS_LOCK_RELEASE(&tx_stats->lock);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (qdf_likely(tx_stats->cur_rix == ppdu_user->rix)) {
|
if (qdf_likely(tx_stats->cur_rix == ppdu_user->rix)) {
|
||||||
__tx_stats = &tx_stats->stats[tx_stats->cur_cache_idx];
|
__tx_stats = &tx_stats->stats[tx_stats->cur_cache_idx];
|
||||||
__wlan_peer_update_tx_rate_stats(__tx_stats, ppdu_user);
|
__wlan_peer_update_tx_rate_stats(__tx_stats, ppdu_user);
|
||||||
|
@@ -46,8 +46,11 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
|
|||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
struct wlan_rx_rate_stats *rx_stats;
|
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("\n......................................");
|
||||||
PRINT("......................................");
|
PRINT("......................................");
|
||||||
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
|
PRINT("PEER %02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx\n",
|
||||||
@@ -57,76 +60,169 @@ static void dp_peer_rx_rate_stats_print(uint8_t *peer_mac,
|
|||||||
peer_mac[3],
|
peer_mac[3],
|
||||||
peer_mac[4],
|
peer_mac[4],
|
||||||
peer_mac[5]);
|
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("\n..............................................");
|
||||||
PRINT("................................");
|
PRINT("................................");
|
||||||
PRINT("................................................");
|
PRINT("................................................");
|
||||||
PRINT(".................................\n");
|
PRINT(".................................\n");
|
||||||
PRINT("\tRx statistics:");
|
PRINT("\tRx statistics:");
|
||||||
PRINT(" %10s | %10s | %10s | %10s | %10s | %10s",
|
PRINT(" %10s | %10s | %10s | %10s | %10s | %10s|",
|
||||||
"rate",
|
"rate",
|
||||||
"rix",
|
"rix",
|
||||||
"bytes",
|
"bytes",
|
||||||
"msdus",
|
"msdus",
|
||||||
"mpdus",
|
"mpdus",
|
||||||
"ppdus");
|
"ppdus");
|
||||||
PRINT("\t\t%10s | %10s | %10s | %10s | %10s | %10s |",
|
PRINT(" %10s | %10s | %10s |",
|
||||||
"retries",
|
"retries",
|
||||||
"rssi",
|
"sgi",
|
||||||
"rssi 1 p20",
|
"rssi\n");
|
||||||
"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++) {
|
for (i = 0; i < WLANSTATS_CACHE_SIZE; i++) {
|
||||||
if (rx_stats->rix != INVALID_CACHE_IDX) {
|
if (rx_stats->rix != INVALID_CACHE_IDX) {
|
||||||
PRINT(" %10u | %10u | %10u | %10u | %10u |",
|
PRINT(" %10u | %10u | %10u | %10u | %10u | %10u |",
|
||||||
rx_stats->rate,
|
rx_stats->rate,
|
||||||
rx_stats->rix,
|
rx_stats->rix,
|
||||||
rx_stats->num_bytes,
|
rx_stats->num_bytes,
|
||||||
rx_stats->num_msdus,
|
rx_stats->num_msdus,
|
||||||
rx_stats->num_mpdus);
|
rx_stats->num_mpdus,
|
||||||
PRINT(" %10u | %10u | %10u | %10lu | %10lu |",
|
rx_stats->num_ppdus);
|
||||||
rx_stats->num_ppdus,
|
PRINT(" %10u | %10u | %10u |\n",
|
||||||
rx_stats->num_retries,
|
rx_stats->num_retries,
|
||||||
rx_stats->num_sgi,
|
rx_stats->num_sgi,
|
||||||
rx_stats->avg_rssi,
|
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;
|
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 |",
|
||||||
|
"rssi 2 p20",
|
||||||
|
"rssi 2 e20",
|
||||||
|
"rssi 2 e40",
|
||||||
|
"rssi 2 e80");
|
||||||
|
PRINT(" | %10s | %10s | %10s | %10s |",
|
||||||
|
"rssi 3 p20",
|
||||||
|
"rssi 3 e20",
|
||||||
|
"rssi 3 e40",
|
||||||
|
"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 (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("");
|
||||||
|
}
|
||||||
|
tmp_rx_stats = tmp_rx_stats + 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
Reference in New Issue
Block a user