1da3a9d3cSKalle Valo /* SPDX-License-Identifier: BSD-3-Clause-Clear */ 2da3a9d3cSKalle Valo /* 3da3a9d3cSKalle Valo * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved. 4da3a9d3cSKalle Valo */ 5da3a9d3cSKalle Valo 6da3a9d3cSKalle Valo #ifndef _ATH11K_DEBUGFS_H_ 7da3a9d3cSKalle Valo #define _ATH11K_DEBUGFS_H_ 8da3a9d3cSKalle Valo 9da3a9d3cSKalle Valo #include "hal_tx.h" 10da3a9d3cSKalle Valo 11da3a9d3cSKalle Valo #define ATH11K_TX_POWER_MAX_VAL 70 12da3a9d3cSKalle Valo #define ATH11K_TX_POWER_MIN_VAL 0 13da3a9d3cSKalle Valo 14da3a9d3cSKalle Valo /* htt_dbg_ext_stats_type */ 15da3a9d3cSKalle Valo enum ath11k_dbg_htt_ext_stats_type { 16da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_RESET = 0, 17da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TX = 1, 18da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_RX = 2, 19da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_HWQ = 3, 20da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_SCHED = 4, 21da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_ERROR = 5, 22da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TQM = 6, 23da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TQM_CMDQ = 7, 24da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TX_DE_INFO = 8, 25da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE = 9, 26da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_RX_RATE = 10, 27da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PEER_INFO = 11, 28da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TX_SELFGEN_INFO = 12, 29da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TX_MU_HWQ = 13, 30da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_RING_IF_INFO = 14, 31da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_SRNG_INFO = 15, 32da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_SFM_INFO = 16, 33da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_MU = 17, 34da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_ACTIVE_PEERS_LIST = 18, 35da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS = 19, 36da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TWT_SESSIONS = 20, 37da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_REO_RESOURCE_STATS = 21, 38da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO = 22, 39da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS = 23, 40da3a9d3cSKalle Valo ATH11K_DBG_HTT_EXT_STATS_RING_BACKPRESSURE_STATS = 24, 41da3a9d3cSKalle Valo 42da3a9d3cSKalle Valo /* keep this last */ 43da3a9d3cSKalle Valo ATH11K_DBG_HTT_NUM_EXT_STATS, 44da3a9d3cSKalle Valo }; 45da3a9d3cSKalle Valo 46da3a9d3cSKalle Valo struct debug_htt_stats_req { 47da3a9d3cSKalle Valo bool done; 48da3a9d3cSKalle Valo u8 pdev_id; 49da3a9d3cSKalle Valo u8 type; 50da3a9d3cSKalle Valo u8 peer_addr[ETH_ALEN]; 51da3a9d3cSKalle Valo struct completion cmpln; 52da3a9d3cSKalle Valo u32 buf_len; 53da3a9d3cSKalle Valo u8 buf[]; 54da3a9d3cSKalle Valo }; 55da3a9d3cSKalle Valo 56da3a9d3cSKalle Valo struct ath_pktlog_hdr { 57da3a9d3cSKalle Valo u16 flags; 58da3a9d3cSKalle Valo u16 missed_cnt; 59da3a9d3cSKalle Valo u16 log_type; 60da3a9d3cSKalle Valo u16 size; 61da3a9d3cSKalle Valo u32 timestamp; 62da3a9d3cSKalle Valo u32 type_specific_data; 63da3a9d3cSKalle Valo u8 payload[]; 64da3a9d3cSKalle Valo }; 65da3a9d3cSKalle Valo 66da3a9d3cSKalle Valo #define ATH11K_HTT_PEER_STATS_RESET BIT(16) 67da3a9d3cSKalle Valo 68da3a9d3cSKalle Valo #define ATH11K_HTT_STATS_BUF_SIZE (1024 * 512) 69da3a9d3cSKalle Valo #define ATH11K_FW_STATS_BUF_SIZE (1024 * 1024) 70da3a9d3cSKalle Valo 71da3a9d3cSKalle Valo enum ath11k_pktlog_filter { 72da3a9d3cSKalle Valo ATH11K_PKTLOG_RX = 0x000000001, 73da3a9d3cSKalle Valo ATH11K_PKTLOG_TX = 0x000000002, 74da3a9d3cSKalle Valo ATH11K_PKTLOG_RCFIND = 0x000000004, 75da3a9d3cSKalle Valo ATH11K_PKTLOG_RCUPDATE = 0x000000008, 76da3a9d3cSKalle Valo ATH11K_PKTLOG_EVENT_SMART_ANT = 0x000000020, 77da3a9d3cSKalle Valo ATH11K_PKTLOG_EVENT_SW = 0x000000040, 78da3a9d3cSKalle Valo ATH11K_PKTLOG_ANY = 0x00000006f, 79da3a9d3cSKalle Valo }; 80da3a9d3cSKalle Valo 81da3a9d3cSKalle Valo enum ath11k_pktlog_mode { 82da3a9d3cSKalle Valo ATH11K_PKTLOG_MODE_LITE = 1, 83da3a9d3cSKalle Valo ATH11K_PKTLOG_MODE_FULL = 2, 84da3a9d3cSKalle Valo }; 85da3a9d3cSKalle Valo 86da3a9d3cSKalle Valo enum ath11k_pktlog_enum { 87da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_TX_CTRL = 1, 88da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_TX_STAT = 2, 89da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_TX_MSDU_ID = 3, 90da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_RX_STAT = 5, 91da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_RC_FIND = 6, 92da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_RC_UPDATE = 7, 93da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_TX_VIRT_ADDR = 8, 94da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_RX_CBF = 10, 95da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_RX_STATBUF = 22, 96da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_PPDU_STATS = 23, 97da3a9d3cSKalle Valo ATH11K_PKTLOG_TYPE_LITE_RX = 24, 98da3a9d3cSKalle Valo }; 99da3a9d3cSKalle Valo 100da3a9d3cSKalle Valo enum ath11k_dbg_aggr_mode { 101da3a9d3cSKalle Valo ATH11K_DBG_AGGR_MODE_AUTO, 102da3a9d3cSKalle Valo ATH11K_DBG_AGGR_MODE_MANUAL, 103da3a9d3cSKalle Valo ATH11K_DBG_AGGR_MODE_MAX, 104da3a9d3cSKalle Valo }; 105da3a9d3cSKalle Valo 106da3a9d3cSKalle Valo #ifdef CONFIG_ATH11K_DEBUGFS 107*cb4e57dbSKalle Valo int ath11k_debugfs_soc_create(struct ath11k_base *ab); 108*cb4e57dbSKalle Valo void ath11k_debugfs_soc_destroy(struct ath11k_base *ab); 109*cb4e57dbSKalle Valo int ath11k_debugfs_pdev_create(struct ath11k_base *ab); 110*cb4e57dbSKalle Valo void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab); 111*cb4e57dbSKalle Valo int ath11k_debugfs_register(struct ath11k *ar); 112*cb4e57dbSKalle Valo void ath11k_debugfs_unregister(struct ath11k *ar); 113*cb4e57dbSKalle Valo void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab, struct sk_buff *skb); 114da3a9d3cSKalle Valo 115*cb4e57dbSKalle Valo void ath11k_debugfs_fw_stats_init(struct ath11k *ar); 116da3a9d3cSKalle Valo 117*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar) 118da3a9d3cSKalle Valo { 119da3a9d3cSKalle Valo return (ar->debug.pktlog_mode == ATH11K_PKTLOG_MODE_LITE); 120da3a9d3cSKalle Valo } 121da3a9d3cSKalle Valo 122*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar) 123da3a9d3cSKalle Valo { 124da3a9d3cSKalle Valo return (!ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode); 125da3a9d3cSKalle Valo } 126da3a9d3cSKalle Valo 127*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr) 128da3a9d3cSKalle Valo { 129da3a9d3cSKalle Valo return (ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode && 130da3a9d3cSKalle Valo ether_addr_equal(addr, ar->debug.pktlog_peer_addr)); 131da3a9d3cSKalle Valo } 132da3a9d3cSKalle Valo 133*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar) 134da3a9d3cSKalle Valo { 135da3a9d3cSKalle Valo return ar->debug.extd_tx_stats; 136da3a9d3cSKalle Valo } 137da3a9d3cSKalle Valo 138*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar) 139da3a9d3cSKalle Valo { 140da3a9d3cSKalle Valo return ar->debug.extd_rx_stats; 141da3a9d3cSKalle Valo } 142da3a9d3cSKalle Valo 143*cb4e57dbSKalle Valo static inline int ath11k_debugfs_rx_filter(struct ath11k *ar) 144da3a9d3cSKalle Valo { 145da3a9d3cSKalle Valo return ar->debug.rx_filter; 146da3a9d3cSKalle Valo } 147da3a9d3cSKalle Valo 148da3a9d3cSKalle Valo #else 149*cb4e57dbSKalle Valo static inline int ath11k_debugfs_soc_create(struct ath11k_base *ab) 150da3a9d3cSKalle Valo { 151da3a9d3cSKalle Valo return 0; 152da3a9d3cSKalle Valo } 153da3a9d3cSKalle Valo 154*cb4e57dbSKalle Valo static inline void ath11k_debugfs_soc_destroy(struct ath11k_base *ab) 155da3a9d3cSKalle Valo { 156da3a9d3cSKalle Valo } 157da3a9d3cSKalle Valo 158*cb4e57dbSKalle Valo static inline int ath11k_debugfs_pdev_create(struct ath11k_base *ab) 159da3a9d3cSKalle Valo { 160da3a9d3cSKalle Valo return 0; 161da3a9d3cSKalle Valo } 162da3a9d3cSKalle Valo 163*cb4e57dbSKalle Valo static inline void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab) 164da3a9d3cSKalle Valo { 165da3a9d3cSKalle Valo } 166da3a9d3cSKalle Valo 167*cb4e57dbSKalle Valo static inline int ath11k_debugfs_register(struct ath11k *ar) 168da3a9d3cSKalle Valo { 169da3a9d3cSKalle Valo return 0; 170da3a9d3cSKalle Valo } 171da3a9d3cSKalle Valo 172*cb4e57dbSKalle Valo static inline void ath11k_debugfs_unregister(struct ath11k *ar) 173da3a9d3cSKalle Valo { 174da3a9d3cSKalle Valo } 175da3a9d3cSKalle Valo 176*cb4e57dbSKalle Valo static inline void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab, 177da3a9d3cSKalle Valo struct sk_buff *skb) 178da3a9d3cSKalle Valo { 179da3a9d3cSKalle Valo } 180da3a9d3cSKalle Valo 181*cb4e57dbSKalle Valo static inline void ath11k_debugfs_fw_stats_init(struct ath11k *ar) 182da3a9d3cSKalle Valo { 183da3a9d3cSKalle Valo } 184da3a9d3cSKalle Valo 185*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar) 186da3a9d3cSKalle Valo { 187da3a9d3cSKalle Valo return 0; 188da3a9d3cSKalle Valo } 189da3a9d3cSKalle Valo 190*cb4e57dbSKalle Valo static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar) 191da3a9d3cSKalle Valo { 192da3a9d3cSKalle Valo return 0; 193da3a9d3cSKalle Valo } 194da3a9d3cSKalle Valo 195*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar) 196da3a9d3cSKalle Valo { 197da3a9d3cSKalle Valo return false; 198da3a9d3cSKalle Valo } 199da3a9d3cSKalle Valo 200*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar) 201da3a9d3cSKalle Valo { 202da3a9d3cSKalle Valo return false; 203da3a9d3cSKalle Valo } 204da3a9d3cSKalle Valo 205*cb4e57dbSKalle Valo static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr) 206da3a9d3cSKalle Valo { 207da3a9d3cSKalle Valo return false; 208da3a9d3cSKalle Valo } 209da3a9d3cSKalle Valo 210*cb4e57dbSKalle Valo static inline int ath11k_debugfs_rx_filter(struct ath11k *ar) 211da3a9d3cSKalle Valo { 212da3a9d3cSKalle Valo return 0; 213da3a9d3cSKalle Valo } 214da3a9d3cSKalle Valo 215da3a9d3cSKalle Valo #endif /* CONFIG_MAC80211_DEBUGFS*/ 216da3a9d3cSKalle Valo 217da3a9d3cSKalle Valo #endif /* _ATH11K_DEBUGFS_H_ */ 218