/* SPDX-License-Identifier: BSD-3-Clause-Clear */ /* * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*/
/* Bytes stored in little endian order */ /* Length should be multiple of DWORD */ struct htt_stats_string_tlv { /* Can be variable length */
DECLARE_FLEX_ARRAY(u32, data);
} __packed;
/* NOTE: Variable length TLV, use length spec to infer array size . * * Tried_mpdu_cnt_hist is the histogram of MPDUs tries per HWQ. * The tries here is the count of the MPDUS within a PPDU that the * HW had attempted to transmit on air, for the HWSCH Schedule * command submitted by FW.It is not the retry attempts. * The histogram bins are 0-29, 30-59, 60-89 and so on. The are * 10 bins in this histogram. They are defined in FW using the * following macros * #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9 * #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
*/ struct htt_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v {
u32 hist_bin_size;
u32 tried_mpdu_cnt_hist[]; /* HTT_TX_PDEV_TRIED_MPDU_CNT_HIST */
};
/* Counters to track number of tx packets in each GI * (400us, 800us, 1600us & 3200us) in each mcs (0-11)
*/
u32 tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS][HTT_TX_PEER_STATS_NUM_MCS_COUNTERS];
/* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */
u32 tx_dcm[HTT_TX_PEER_STATS_NUM_DCM_COUNTERS];
/* Number of rx ldpc packets */
u32 rx_ldpc; /* Number of rx rts packets */
u32 rts_cnt;
u32 rssi_mgmt; /* units = dB above noise floor */
u32 rssi_data; /* units = dB above noise floor */
u32 rssi_comb; /* units = dB above noise floor */
u32 rx_mcs[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS]; /* element 0,1, ...7 -> NSS 1,2, ...8 */
u32 rx_nss[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];
u32 rx_dcm[HTT_RX_PEER_STATS_NUM_DCM_COUNTERS];
u32 rx_stbc[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
u32 rx_bw[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
u32 rx_pream[HTT_RX_PEER_STATS_NUM_PREAMBLE_TYPES]; /* units = dB above noise floor */
u8 rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS]
[HTT_RX_PEER_STATS_NUM_BW_COUNTERS];
/* Counters to track number of rx packets in each GI in each mcs (0-11) */
u32 rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS]
[HTT_RX_PEER_STATS_NUM_MCS_COUNTERS];
};
/* NOTE: Variable length TLV, use length spec to infer array size */ struct htt_tx_hwq_difs_latency_stats_tlv_v {
u32 hist_intvl; /* histogram of ppdu post to hwsch - > cmd status received */
u32 difs_latency_hist[]; /* HTT_TX_HWQ_MAX_DIFS_LATENCY_BINS */
};
/* NOTE: Variable length TLV, use length spec to infer array size */ struct htt_tx_hwq_cmd_result_stats_tlv_v { /* Histogram of sched cmd result, HTT_TX_HWQ_MAX_CMD_RESULT_STATS */
DECLARE_FLEX_ARRAY(u32, cmd_result);
};
/* NOTE: Variable length TLV, use length spec to infer array size */ struct htt_tx_hwq_cmd_stall_stats_tlv_v { /* Histogram of various pause conitions, HTT_TX_HWQ_MAX_CMD_STALL_STATS */
DECLARE_FLEX_ARRAY(u32, cmd_stall_status);
};
/* NOTE: Variable length TLV, use length spec to infer array size */ struct htt_tx_hwq_fes_result_stats_tlv_v { /* Histogram of number of user fes result, HTT_TX_HWQ_MAX_FES_RESULT_STATS */
DECLARE_FLEX_ARRAY(u32, fes_result);
};
/* NOTE: Variable length TLV, use length spec to infer array size * * The hwq_tried_mpdu_cnt_hist is a histogram of MPDUs tries per HWQ. * The tries here is the count of the MPDUS within a PPDU that the HW * had attempted to transmit on air, for the HWSCH Schedule command * submitted by FW in this HWQ .It is not the retry attempts. The * histogram bins are 0-29, 30-59, 60-89 and so on. The are 10 bins * in this histogram. * they are defined in FW using the following macros * #define WAL_MAX_TRIED_MPDU_CNT_HISTOGRAM 9 * #define WAL_TRIED_MPDU_CNT_HISTOGRAM_INTERVAL 30
*/ struct htt_tx_hwq_tried_mpdu_cnt_hist_tlv_v {
u32 hist_bin_size; /* Histogram of number of mpdus on tried mpdu */
u32 tried_mpdu_cnt_hist[]; /* HTT_TX_HWQ_TRIED_MPDU_CNT_HIST */
};
/* NOTE: Variable length TLV, use length spec to infer array size * * The txop_used_cnt_hist is the histogram of txop per burst. After * completing the burst, we identify the txop used in the burst and * incr the corresponding bin. * Each bin represents 1ms & we have 10 bins in this histogram. * they are defined in FW using the following macros * #define WAL_MAX_TXOP_USED_CNT_HISTOGRAM 10 * #define WAL_TXOP_USED_HISTOGRAM_INTERVAL 1000 ( 1 ms )
*/ struct htt_tx_hwq_txop_used_cnt_hist_tlv_v { /* Histogram of txop used cnt, HTT_TX_HWQ_TXOP_USED_CNT_HIST */
DECLARE_FLEX_ARRAY(u32, txop_used_cnt_hist);
};
/* == TX SELFGEN STATS == */ struct htt_tx_selfgen_cmn_stats_tlv {
u32 mac_id__word;
u32 su_bar;
u32 rts;
u32 cts2self;
u32 qos_null;
u32 delayed_bar_1; /* MU user 1 */
u32 delayed_bar_2; /* MU user 2 */
u32 delayed_bar_3; /* MU user 3 */
u32 delayed_bar_4; /* MU user 4 */
u32 delayed_bar_5; /* MU user 5 */
u32 delayed_bar_6; /* MU user 6 */
u32 delayed_bar_7; /* MU user 7 */
};
struct htt_tx_selfgen_ac_stats_tlv { /* 11AC */
u32 ac_su_ndpa;
u32 ac_su_ndp;
u32 ac_mu_mimo_ndpa;
u32 ac_mu_mimo_ndp;
u32 ac_mu_mimo_brpoll_1; /* MU user 1 */
u32 ac_mu_mimo_brpoll_2; /* MU user 2 */
u32 ac_mu_mimo_brpoll_3; /* MU user 3 */
};
struct htt_tx_selfgen_ax_stats_tlv { /* 11AX */
u32 ax_su_ndpa;
u32 ax_su_ndp;
u32 ax_mu_mimo_ndpa;
u32 ax_mu_mimo_ndp;
u32 ax_mu_mimo_brpoll_1; /* MU user 1 */
u32 ax_mu_mimo_brpoll_2; /* MU user 2 */
u32 ax_mu_mimo_brpoll_3; /* MU user 3 */
u32 ax_mu_mimo_brpoll_4; /* MU user 4 */
u32 ax_mu_mimo_brpoll_5; /* MU user 5 */
u32 ax_mu_mimo_brpoll_6; /* MU user 6 */
u32 ax_mu_mimo_brpoll_7; /* MU user 7 */
u32 ax_basic_trigger;
u32 ax_bsr_trigger;
u32 ax_mu_bar_trigger;
u32 ax_mu_rts_trigger;
u32 ax_ulmumimo_trigger;
};
struct htt_tx_pdev_mu_mimo_sch_stats_tlv { /* mu-mimo sw sched cmd stats */
u32 mu_mimo_sch_posted;
u32 mu_mimo_sch_failed; /* MU PPDU stats per hwQ */
u32 mu_mimo_ppdu_posted; /* * Counts the number of users in each transmission of * the given TX mode. * * Index is the number of users - 1.
*/
u32 ac_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AC_MUMIMO_USER_STATS];
u32 ax_mu_mimo_sch_nusers[HTT_TX_PDEV_STATS_NUM_AX_MUMIMO_USER_STATS];
u32 ax_ofdma_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
u32 ax_ul_ofdma_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
u32 ax_ul_ofdma_bsr_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
u32 ax_ul_ofdma_bar_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
u32 ax_ul_ofdma_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
/* UL MU-MIMO */ /* ax_ul_mumimo_basic_sch_nusers[i] is the number of basic triggers sent * for (i+1) users
*/
u32 ax_ul_mumimo_basic_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
/* ax_ul_mumimo_brp_sch_nusers[i] is the number of brp triggers sent * for (i+1) users
*/
u32 ax_ul_mumimo_brp_sch_nusers[HTT_TX_PDEV_STATS_NUM_UL_MUMIMO_USER_STATS];
/* * The htt_tx_de_fw2wbm_ring_full_hist_tlv is a histogram of time we waited * for the fw2wbm ring buffer. we are requesting a buffer in FW2WBM release * ring,which may fail, due to non availability of buffer. Hence we sleep for * 200us & again request for it. This is a histogram of time we wait, with * bin of 200ms & there are 10 bin (2 seconds max) * They are defined by the following macros in FW * #define ENTRIES_PER_BIN_COUNT 1000 // per bin 1000 * 200us = 200ms * #define RING_FULL_BIN_ENTRIES (WAL_TX_DE_FW2WBM_ALLOC_TIMEOUT_COUNT / * ENTRIES_PER_BIN_COUNT)
*/ struct htt_tx_de_fw2wbm_ring_full_hist_tlv {
DECLARE_FLEX_ARRAY(u32, fw2wbm_ring_full_hist);
};
/* == SFM STATS == */ /* NOTE: Variable length TLV, use length spec to infer array size */ struct htt_sfm_client_user_tlv_v { /* Number of DWORDS used per user and per client */
DECLARE_FLEX_ARRAY(u32, dwords_used_by_user_n);
};
struct htt_sfm_client_tlv { /* Client ID */
u32 client_id; /* Minimum number of buffers */
u32 buf_min; /* Maximum number of buffers */
u32 buf_max; /* Number of Busy buffers */
u32 buf_busy; /* Number of Allocated buffers */
u32 buf_alloc; /* Number of Available/Usable buffers */
u32 buf_avail; /* Number of users */
u32 num_users;
};
struct htt_sfm_cmn_tlv {
u32 mac_id__word; /* Indicates the total number of 128 byte buffers * in the CMEM that are available for buffer sharing
*/
u32 buf_total; /* Indicates for certain client or all the clients * there is no dowrd saved in SFM, refer to SFM_R1_MEM_EMPTY
*/
u32 mem_empty; /* DEALLOCATE_BUFFERS, refer to register SFM_R0_DEALLOCATE_BUFFERS */
u32 deallocate_bufs; /* Number of Records */
u32 num_records;
};
/* Counters to track number of tx packets * in each GI (400us, 800us, 1600us & 3200us) in each mcs (0-11)
*/
u32 tx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS][HTT_TX_PDEV_STATS_NUM_MCS_COUNTERS];
/* Counters to track packets in dcm mcs (MCS 0, 1, 3, 4) */
u32 tx_dcm[HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS]; /* Number of CTS-acknowledged RTS packets */
u32 rts_success;
u32 rssi_mgmt; /* units = dB above noise floor */
u32 rssi_data; /* units = dB above noise floor */
u32 rssi_comb; /* units = dB above noise floor */
u32 rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; /* element 0,1, ...7 -> NSS 1,2, ...8 */
u32 rx_nss[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
u32 rx_dcm[HTT_RX_PDEV_STATS_NUM_DCM_COUNTERS];
u32 rx_stbc[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS]; /* element 0: 20 MHz, 1: 40 MHz, 2: 80 MHz, 3: 160 and 80+80 MHz */
u32 rx_bw[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
u32 rx_pream[HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES];
u8 rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS]; /* units = dB above noise floor */
/* Counters to track number of rx packets * in each GI in each mcs (0-11)
*/
u32 rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS][HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
s32 rssi_in_dbm; /* rx Signal Strength value in dBm unit */
/* record the stats for each user index */
u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
u32 nss_count;
u32 pilot_count; /* RxEVM stats in dB */
s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
[HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS]; /* rx_pilot_evm_db_mean: * EVM mean across pilots, computed as * mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_db)
*/
s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* dBm units */ /* per_chain_rssi_pkt_type: * This field shows what type of rx frame the per-chain RSSI was computed * on, by recording the frame type and sub-type as bit-fields within this * field: * BIT [3 : 0] :- IEEE80211_FC0_TYPE * BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE * BIT [31 : 8] :- Reserved
*/
u32 per_chain_rssi_pkt_type;
s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
/* This MAX_ERR_CODE should not be used in any host/target messages, * so that even though it is defined within a host/target interface * definition header file, it isn't actually part of the host/target * interface, and thus can be modified.
*/
HTT_RX_RXDMA_MAX_ERR_CODE
};
/* This MAX_ERR_CODE should not be used in any host/target messages, * so that even though it is defined within a host/target interface * definition header file, it isn't actually part of the host/target * interface, and thus can be modified.
*/
HTT_RX_REO_MAX_ERR_CODE
};
struct htt_pdev_cca_stats_hist_v1_tlv {
u32 chan_num; /* num of CCA records (Num of htt_pdev_stats_cca_counters_tlv)*/
u32 num_records;
u32 valid_cca_counters_bitmap;
u32 collection_interval;
/* This will be followed by an array which contains the CCA stats * collected in the last N intervals, * if the indication is for last N intervals CCA stats. * Then the pdev_cca_stats[0] element contains the oldest CCA stats * and pdev_cca_stats[N-1] will have the most recent CCA stats. * htt_pdev_stats_cca_counters_tlv cca_hist_tlv[1];
*/
};
/* TWT_DIALOG_ID_UNAVAILABLE is used * when TWT session is not initiated by host
*/
u32 dialog_id;
u32 wake_dura_us;
u32 wake_intvl_us;
u32 sp_offset_us;
};
struct htt_tx_sounding_stats_tlv {
u32 tx_sounding_mode; /* HTT_TX_XX_SOUNDING_MODE */ /* Counts number of soundings for all steering modes in each bw */
u32 cbf_20[HTT_TXBF_MAX_NUM_OF_MODES];
u32 cbf_40[HTT_TXBF_MAX_NUM_OF_MODES];
u32 cbf_80[HTT_TXBF_MAX_NUM_OF_MODES];
u32 cbf_160[HTT_TXBF_MAX_NUM_OF_MODES]; /* * The sounding array is a 2-D array stored as an 1-D array of * u32. The stats for a particular user/bw combination is * referenced with the following: * * sounding[(user* max_bw) + bw] * * ... where max_bw == 4 for 160mhz
*/
u32 sounding[HTT_TX_NUM_OF_SOUNDING_STATS_WORDS];
};
struct htt_ring_backpressure_stats_tlv {
u32 pdev_id;
u32 current_head_idx;
u32 current_tail_idx;
u32 num_htt_msgs_sent; /* Time in milliseconds for which the ring has been in * its current backpressure condition
*/
u32 backpressure_time_ms; /* backpressure_hist - histogram showing how many times * different degrees of backpressure duration occurred: * Index 0 indicates the number of times ring was * continuously in backpressure state for 100 - 200ms. * Index 1 indicates the number of times ring was * continuously in backpressure state for 200 - 300ms. * Index 2 indicates the number of times ring was * continuously in backpressure state for 300 - 400ms. * Index 3 indicates the number of times ring was * continuously in backpressure state for 400 - 500ms. * Index 4 indicates the number of times ring was * continuously in backpressure state beyond 500ms.
*/
u32 backpressure_hist[5];
};
struct htt_txbf_ofdma_ndpa_stats_tlv { /* 11AX HE OFDMA NDPA frame queued to the HW */
u32 ax_ofdma_ndpa_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame sent over the air */
u32 ax_ofdma_ndpa_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame flushed by HW */
u32 ax_ofdma_ndpa_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame completed with error(s) */
u32 ax_ofdma_ndpa_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
};
struct htt_txbf_ofdma_ndp_stats_tlv { /* 11AX HE OFDMA NDP frame queued to the HW */
u32 ax_ofdma_ndp_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame sent over the air */
u32 ax_ofdma_ndp_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame flushed by HW */
u32 ax_ofdma_ndp_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA NDPA frame completed with error(s) */
u32 ax_ofdma_ndp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
};
struct htt_txbf_ofdma_brp_stats_tlv { /* 11AX HE OFDMA MU BRPOLL frame queued to the HW */
u32 ax_ofdma_brpoll_queued[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA MU BRPOLL frame sent over the air */
u32 ax_ofdma_brpoll_tried[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA MU BRPOLL frame flushed by HW */
u32 ax_ofdma_brpoll_flushed[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA MU BRPOLL frame completed with error(s) */
u32 ax_ofdma_brp_err[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* Number of CBF(s) received when 11AX HE OFDMA MU BRPOLL frame * completed with error(s).
*/
u32 ax_ofdma_brp_err_num_cbf_rcvd[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS + 1];
};
struct htt_txbf_ofdma_steer_stats_tlv { /* 11AX HE OFDMA PPDUs that were sent over the air with steering (TXBF + OFDMA) */
u32 ax_ofdma_num_ppdu_steer[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA PPDUs that were sent over the air in open loop */
u32 ax_ofdma_num_ppdu_ol[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA number of users for which CBF prefetch was * initiated to PHY HW during TX.
*/
u32 ax_ofdma_num_usrs_prefetch[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA number of users for which sounding was initiated during TX */
u32 ax_ofdma_num_usrs_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS]; /* 11AX HE OFDMA number of users for which sounding was forced during TX */
u32 ax_ofdma_num_usrs_force_sound[HTT_TX_PDEV_STATS_NUM_OFDMA_USER_STATS];
};
struct htt_phy_counters_tlv { /* number of RXTD OFDMA OTA error counts except power surge and drop */
u32 rx_ofdma_timing_err_cnt; /* rx_cck_fail_cnt: * number of cck error counts due to rx reception failure because of * timing error in cck
*/
u32 rx_cck_fail_cnt; /* number of times tx abort initiated by mac */
u32 mactx_abort_cnt; /* number of times rx abort initiated by mac */
u32 macrx_abort_cnt; /* number of times tx abort initiated by phy */
u32 phytx_abort_cnt; /* number of times rx abort initiated by phy */
u32 phyrx_abort_cnt; /* number of rx deferred count initiated by phy */
u32 phyrx_defer_abort_cnt; /* number of sizing events generated at LSTF */
u32 rx_gain_adj_lstf_event_cnt; /* number of sizing events generated at non-legacy LTF */
u32 rx_gain_adj_non_legacy_cnt; /* rx_pkt_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD
*/
u32 rx_pkt_cnt[HTT_MAX_RX_PKT_CNT]; /* rx_pkt_crc_pass_cnt - * Received EOP (end-of-packet) count per packet type; * [0] = 11a; [1] = 11b; [2] = 11n; [3] = 11ac; [4] = 11ax; [5] = GF * [6-7]=RSVD
*/
u32 rx_pkt_crc_pass_cnt[HTT_MAX_RX_PKT_CRC_PASS_CNT]; /* per_blk_err_cnt - * Error count per error source; * [0] = unknown; [1] = LSIG; [2] = HTSIG; [3] = VHTSIG; [4] = HESIG; * [5] = RXTD_OTA; [6] = RXTD_FATAL; [7] = DEMF; [8] = ROBE; * [9] = PMI; [10] = TXFD; [11] = TXTD; [12] = PHYRF * [13-19]=RSVD
*/
u32 per_blk_err_cnt[HTT_MAX_PER_BLK_ERR_CNT]; /* rx_ota_err_cnt - * RXTD OTA (over-the-air) error count per error reason; * [0] = voting fail; [1] = weak det fail; [2] = strong sig fail; * [3] = cck fail; [4] = power surge; [5] = power drop; * [6] = btcf timing timeout error; [7] = btcf packet detect error; * [8] = coarse timing timeout error * [9-13]=RSVD
*/
u32 rx_ota_err_cnt[HTT_MAX_RX_OTA_ERR_CNT];
};
struct htt_phy_stats_tlv { /* per chain hw noise floor values in dBm */
s32 nf_chain[HTT_STATS_MAX_CHAINS]; /* number of false radars detected */
u32 false_radar_cnt; /* number of channel switches happened due to radar detection */
u32 radar_cs_cnt; /* ani_level - * ANI level (noise interference) corresponds to the channel * the desense levels range from -5 to 15 in dB units, * higher values indicating more noise interference.
*/
s32 ani_level; /* running time in minutes since FW boot */
u32 fw_run_time;
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.