Skip to content

Commit 875603b

Browse files
Bhagavathi Perumal SKalle Valo
authored andcommitted
ath11k: Add missing pdev rx rate stats
This adds missing rx rate info stats like pilot evm, per chain rssi, per user ul ppdu and mpdu counts and ul ofdma rate info etc. And add null checks for memory alloc failures. Signed-off-by: Bhagavathi Perumal S <[email protected]> Signed-off-by: Kalle Valo <[email protected]>
1 parent eefca58 commit 875603b

File tree

2 files changed

+214
-33
lines changed

2 files changed

+214
-33
lines changed

drivers/net/wireless/ath/ath11k/debug_htt_stats.c

Lines changed: 172 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -776,11 +776,14 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
776776
u32 len = stats_req->buf_len;
777777
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
778778
char str_buf[HTT_MAX_STRING_LEN] = {0};
779-
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
779+
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
780780
u8 j;
781781

782-
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
782+
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
783783
tx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
784+
if (!tx_gi[j])
785+
goto fail;
786+
}
784787

785788
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_TX_PEER_RATE_STATS_TLV:");
786789
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_ldpc = %u",
@@ -841,15 +844,16 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
841844
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS);
842845
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_dcm = %s\n", str_buf);
843846

844-
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
845-
kfree(tx_gi[j]);
846-
847847
if (len >= buf_len)
848848
buf[buf_len - 1] = 0;
849849
else
850850
buf[len] = 0;
851851

852852
stats_req->buf_len = len;
853+
854+
fail:
855+
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
856+
kfree(tx_gi[j]);
853857
}
854858

855859
static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
@@ -860,15 +864,21 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
860864
u32 len = stats_req->buf_len;
861865
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
862866
u8 j;
863-
char *rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];
864-
char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS];
867+
char *rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS] = {NULL};
868+
char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
865869
char str_buf[HTT_MAX_STRING_LEN] = {0};
866870

867-
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
871+
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++) {
868872
rssi_chain[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
873+
if (!rssi_chain[j])
874+
goto fail;
875+
}
869876

870-
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
877+
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) {
871878
rx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
879+
if (!rx_gi[j])
880+
goto fail;
881+
}
872882

873883
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_RX_PEER_RATE_STATS_TLV:");
874884
len += HTT_DBG_OUT(buf + len, buf_len - len, "nsts = %u",
@@ -928,18 +938,19 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
928938
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES);
929939
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_pream = %s\n", str_buf);
930940

931-
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
932-
kfree(rssi_chain[j]);
933-
934-
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
935-
kfree(rx_gi[j]);
936-
937941
if (len >= buf_len)
938942
buf[buf_len - 1] = 0;
939943
else
940944
buf[len] = 0;
941945

942946
stats_req->buf_len = len;
947+
948+
fail:
949+
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
950+
kfree(rssi_chain[j]);
951+
952+
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
953+
kfree(rx_gi[j]);
943954
}
944955

945956
static inline void
@@ -2832,10 +2843,13 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
28322843
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
28332844
u8 j;
28342845
char str_buf[HTT_MAX_STRING_LEN] = {0};
2835-
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
2846+
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
28362847

2837-
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
2848+
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
28382849
tx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
2850+
if (!tx_gi[j])
2851+
goto fail;
2852+
}
28392853

28402854
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_TX_PDEV_RATE_STATS_TLV:");
28412855
len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
@@ -2988,15 +3002,15 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
29883002
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS);
29893003
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_dcm = %s\n", str_buf);
29903004

2991-
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
2992-
kfree(tx_gi[j]);
2993-
29943005
if (len >= buf_len)
29953006
buf[buf_len - 1] = 0;
29963007
else
29973008
buf[len] = 0;
29983009

29993010
stats_req->buf_len = len;
3011+
fail:
3012+
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
3013+
kfree(tx_gi[j]);
30003014
}
30013015

30023016
static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
@@ -3006,16 +3020,30 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
30063020
u8 *buf = stats_req->buf;
30073021
u32 len = stats_req->buf_len;
30083022
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
3009-
u8 j;
3010-
char *rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
3011-
char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS];
3023+
u8 i, j;
3024+
u16 index = 0;
3025+
char *rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS] = {NULL};
3026+
char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS] = {NULL};
30123027
char str_buf[HTT_MAX_STRING_LEN] = {0};
3028+
char *rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS] = {NULL};
30133029

3014-
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
3030+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
30153031
rssi_chain[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
3032+
if (!rssi_chain[j])
3033+
goto fail;
3034+
}
30163035

3017-
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++)
3036+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
30183037
rx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
3038+
if (!rx_gi[j])
3039+
goto fail;
3040+
}
3041+
3042+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
3043+
rx_pilot_evm_db[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
3044+
if (!rx_pilot_evm_db[j])
3045+
goto fail;
3046+
}
30193047

30203048
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_RX_PDEV_RATE_STATS_TLV:");
30213049
len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
@@ -3059,6 +3087,32 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
30593087
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_bw,
30603088
HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
30613089
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_bw = %s ", str_buf);
3090+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_evm_nss_count = %u",
3091+
htt_stats_buf->nss_count);
3092+
3093+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_evm_pilot_count = %u",
3094+
htt_stats_buf->pilot_count);
3095+
3096+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
3097+
index = 0;
3098+
3099+
for (i = 0; i < HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS; i++)
3100+
index += snprintf(&rx_pilot_evm_db[j][index],
3101+
HTT_MAX_STRING_LEN - index,
3102+
" %u:%d,",
3103+
i,
3104+
htt_stats_buf->rx_pilot_evm_db[j][i]);
3105+
len += HTT_DBG_OUT(buf + len, buf_len - len, "pilot_evm_dB[%u] = %s ",
3106+
j, rx_pilot_evm_db[j]);
3107+
}
3108+
3109+
index = 0;
3110+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3111+
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; i++)
3112+
index += snprintf(&str_buf[index],
3113+
HTT_MAX_STRING_LEN - index,
3114+
" %u:%d,", i, htt_stats_buf->rx_pilot_evm_db_mean[i]);
3115+
len += HTT_DBG_OUT(buf + len, buf_len - len, "pilot_evm_dB_mean = %s ", str_buf);
30623116

30633117
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
30643118
ARRAY_TO_STRING(rssi_chain[j], htt_stats_buf->rssi_chain[j],
@@ -3079,12 +3133,6 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
30793133
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES);
30803134
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_pream = %s", str_buf);
30813135

3082-
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
3083-
kfree(rssi_chain[j]);
3084-
3085-
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++)
3086-
kfree(rx_gi[j]);
3087-
30883136
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ax_su_ext = %u",
30893137
htt_stats_buf->rx_11ax_su_ext);
30903138
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ac_mumimo = %u",
@@ -3110,15 +3158,106 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
31103158

31113159
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_low = %u",
31123160
htt_stats_buf->rx_active_dur_us_low);
3113-
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_high = %u\n",
3114-
htt_stats_buf->rx_active_dur_us_high);
3161+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_high = %u",
3162+
htt_stats_buf->rx_active_dur_us_high);
3163+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ax_ul_ofdma = %u",
3164+
htt_stats_buf->rx_11ax_ul_ofdma);
3165+
3166+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3167+
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_mcs,
3168+
HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
3169+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_mcs = %s ", str_buf);
3170+
3171+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
3172+
ARRAY_TO_STRING(rx_gi[j], htt_stats_buf->ul_ofdma_rx_gi[j],
3173+
HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
3174+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_gi[%u] = %s ",
3175+
j, rx_gi[j]);
3176+
}
3177+
3178+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3179+
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_nss,
3180+
HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS);
3181+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_nss = %s ", str_buf);
3182+
3183+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3184+
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_bw,
3185+
HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
3186+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_bw = %s ", str_buf);
3187+
3188+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_stbc = %u",
3189+
htt_stats_buf->ul_ofdma_rx_stbc);
3190+
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_ldpc = %u",
3191+
htt_stats_buf->ul_ofdma_rx_ldpc);
3192+
3193+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3194+
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_non_data_ppdu,
3195+
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
3196+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_non_data_ppdu = %s ",
3197+
str_buf);
3198+
3199+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3200+
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_data_ppdu,
3201+
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
3202+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_data_ppdu = %s ",
3203+
str_buf);
3204+
3205+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3206+
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_mpdu_ok,
3207+
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
3208+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_mpdu_ok = %s ", str_buf);
3209+
3210+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3211+
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_mpdu_fail,
3212+
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
3213+
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_mpdu_fail = %s",
3214+
str_buf);
3215+
3216+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
3217+
index = 0;
3218+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3219+
for (i = 0; i < HTT_RX_PDEV_MAX_OFDMA_NUM_USER; i++)
3220+
index += snprintf(&str_buf[index],
3221+
HTT_MAX_STRING_LEN - index,
3222+
" %u:%d,",
3223+
i, htt_stats_buf->rx_ul_fd_rssi[j][i]);
3224+
len += HTT_DBG_OUT(buf + len, buf_len - len,
3225+
"rx_ul_fd_rssi: nss[%u] = %s", j, str_buf);
3226+
}
3227+
3228+
len += HTT_DBG_OUT(buf + len, buf_len - len, "per_chain_rssi_pkt_type = %#x",
3229+
htt_stats_buf->per_chain_rssi_pkt_type);
3230+
3231+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
3232+
index = 0;
3233+
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
3234+
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++)
3235+
index += snprintf(&str_buf[index],
3236+
HTT_MAX_STRING_LEN - index,
3237+
" %u:%d,",
3238+
i,
3239+
htt_stats_buf->rx_per_chain_rssi_in_dbm[j][i]);
3240+
len += HTT_DBG_OUT(buf + len, buf_len - len,
3241+
"rx_per_chain_rssi_in_dbm[%u] = %s ", j, str_buf);
3242+
}
3243+
len += HTT_DBG_OUT(buf + len, buf_len - len, "\n");
31153244

31163245
if (len >= buf_len)
31173246
buf[buf_len - 1] = 0;
31183247
else
31193248
buf[len] = 0;
31203249

31213250
stats_req->buf_len = len;
3251+
3252+
fail:
3253+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
3254+
kfree(rssi_chain[j]);
3255+
3256+
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
3257+
kfree(rx_pilot_evm_db[j]);
3258+
3259+
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
3260+
kfree(rx_gi[i]);
31223261
}
31233262

31243263
static inline void htt_print_rx_soc_fw_stats_tlv(const void *tag_buf,

drivers/net/wireless/ath/ath11k/debug_htt_stats.h

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,8 @@ struct htt_tx_pdev_rate_stats_tlv {
12311231
#define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4
12321232
#define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
12331233
#define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
1234+
#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
1235+
#define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
12341236

12351237
struct htt_rx_pdev_rate_stats_tlv {
12361238
u32 mac_id__word;
@@ -1269,6 +1271,46 @@ struct htt_rx_pdev_rate_stats_tlv {
12691271
u32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
12701272
u32 rx_active_dur_us_low;
12711273
u32 rx_active_dur_us_high;
1274+
1275+
u32 rx_11ax_ul_ofdma;
1276+
1277+
u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1278+
u32 ul_ofdma_rx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
1279+
[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
1280+
u32 ul_ofdma_rx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1281+
u32 ul_ofdma_rx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
1282+
u32 ul_ofdma_rx_stbc;
1283+
u32 ul_ofdma_rx_ldpc;
1284+
1285+
/* record the stats for each user index */
1286+
u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
1287+
u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
1288+
u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
1289+
u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
1290+
1291+
u32 nss_count;
1292+
u32 pilot_count;
1293+
/* RxEVM stats in dB */
1294+
s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1295+
[HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS];
1296+
/* rx_pilot_evm_db_mean:
1297+
* EVM mean across pilots, computed as
1298+
* mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_db)
1299+
*/
1300+
s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
1301+
s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1302+
[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* dBm units */
1303+
/* per_chain_rssi_pkt_type:
1304+
* This field shows what type of rx frame the per-chain RSSI was computed
1305+
* on, by recording the frame type and sub-type as bit-fields within this
1306+
* field:
1307+
* BIT [3 : 0] :- IEEE80211_FC0_TYPE
1308+
* BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE
1309+
* BIT [31 : 8] :- Reserved
1310+
*/
1311+
u32 per_chain_rssi_pkt_type;
1312+
s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
1313+
[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
12721314
};
12731315

12741316
/* == RX PDEV/SOC STATS == */

0 commit comments

Comments
 (0)