#include <linux/vmalloc.h>
#include "core.h"
#include "dp_tx.h"
#include "dp_rx.h"
#include "debug.h"
#include "debugfs_htt_stats.h"
#define HTT_MAX_PRINT_CHAR_PER_ELEM …
#define HTT_TLV_HDR_LEN …
#define PRINT_ARRAY_TO_BUF(out, buflen, arr, str, len, newline) …
static inline void htt_print_stats_string_tlv(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_pdev_stats_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_urrn_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_flush_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_sifs_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_phy_err_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_sifs_hist_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_tx_ppdu_stats_tlv_v(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_tried_mpdu_cnt_hist_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_hw_stats_intr_misc_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_hw_stats_wd_timeout_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_hw_stats_pdev_errs_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_msdu_flow_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_tid_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_tid_stats_v1_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_rx_tid_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_counter_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_peer_stats_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_peer_details_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_mu_mimo_sch_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_mu_mimo_mpdu_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_mu_mimo_cmn_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_stats_cmn_tlv(const void *tag_buf, struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_difs_latency_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_cmd_result_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_cmd_stall_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_fes_result_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_tried_mpdu_cnt_hist_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_hwq_txop_used_cnt_hist_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_sounding_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_selfgen_cmn_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_selfgen_ac_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_selfgen_ax_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_selfgen_ac_err_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_selfgen_ax_err_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_mu_mimo_sch_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_mu_mimo_mpdu_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_sched_txq_cmd_posted_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_sched_txq_cmd_reaped_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_sched_txq_sched_order_su_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_sched_txq_sched_ineligibility_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_pdev_stats_sched_per_txq_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_stats_tx_sched_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_tqm_gen_mpdu_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_tqm_list_mpdu_stats_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_tqm_list_mpdu_cnt_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_tqm_pdev_stats_tlv_v(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_tqm_cmn_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_tqm_error_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_tqm_cmdq_status_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_eapol_packets_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_classify_failed_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_classify_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_classify_status_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_enqueue_packets_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_enqueue_discard_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_de_compl_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_fw2wbm_ring_full_hist_tlv(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_tx_de_cmn_stats_tlv(const void *tag_buf, struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_ring_if_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_ring_if_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_sfm_client_user_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_sfm_client_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_sfm_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_sring_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_sring_cmn_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_rx_soc_fw_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_soc_fw_refill_ring_empty_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_soc_fw_refill_ring_num_rxdma_err_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_soc_fw_refill_ring_num_reo_err_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_reo_debug_stats_tlv_v(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_soc_fw_refill_ring_num_refill_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_rx_pdev_fw_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_pdev_fw_ring_mpdu_err_tlv_v(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_pdev_fw_mpdu_drop_tlv_v(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_rx_pdev_fw_stats_phy_err_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_pdev_cca_stats_hist_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_pdev_stats_cca_counters_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_hw_stats_whal_tx_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_pdev_stats_twt_sessions_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_pdev_stats_twt_session_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_pdev_obss_pd_stats_tlv_v(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void htt_print_backpressure_stats_tlv_v(const u32 *tag_buf,
u8 *data)
{ … }
static inline
void htt_print_pdev_tx_rate_txbf_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_txbf_ofdma_ndpa_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_txbf_ofdma_ndp_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_txbf_ofdma_brp_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_txbf_ofdma_steer_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_phy_counters_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_phy_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_phy_reset_counters_tlv(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline void
htt_print_phy_reset_stats_tlv(const void *tag_buf,
u16 tag_len,
struct debug_htt_stats_req *stats_req)
{ … }
static inline
void htt_print_peer_ctrl_path_txrx_stats_tlv(const void *tag_buf,
struct debug_htt_stats_req *stats_req)
{ … }
static int ath11k_dbg_htt_ext_stats_parse(struct ath11k_base *ab,
u16 tag, u16 len, const void *tag_buf,
void *user_data)
{ … }
void ath11k_debugfs_htt_ext_stats_handler(struct ath11k_base *ab,
struct sk_buff *skb)
{ … }
static ssize_t ath11k_read_htt_stats_type(struct file *file,
char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static ssize_t ath11k_write_htt_stats_type(struct file *file,
const char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static const struct file_operations fops_htt_stats_type = …;
static int ath11k_prep_htt_stats_cfg_params(struct ath11k *ar, u8 type,
const u8 *mac_addr,
struct htt_ext_stats_cfg_params *cfg_params)
{ … }
int ath11k_debugfs_htt_stats_req(struct ath11k *ar)
{ … }
static int ath11k_open_htt_stats(struct inode *inode, struct file *file)
{ … }
static int ath11k_release_htt_stats(struct inode *inode, struct file *file)
{ … }
static ssize_t ath11k_read_htt_stats(struct file *file,
char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static const struct file_operations fops_dump_htt_stats = …;
static ssize_t ath11k_read_htt_stats_reset(struct file *file,
char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static ssize_t ath11k_write_htt_stats_reset(struct file *file,
const char __user *user_buf,
size_t count, loff_t *ppos)
{ … }
static const struct file_operations fops_htt_stats_reset = …;
void ath11k_debugfs_htt_stats_init(struct ath11k *ar)
{ … }