Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
0002 /*
0003  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #ifndef _ATH11K_DEBUGFS_H_
0007 #define _ATH11K_DEBUGFS_H_
0008 
0009 #include "hal_tx.h"
0010 
0011 #define ATH11K_TX_POWER_MAX_VAL 70
0012 #define ATH11K_TX_POWER_MIN_VAL 0
0013 
0014 /* htt_dbg_ext_stats_type */
0015 enum ath11k_dbg_htt_ext_stats_type {
0016     ATH11K_DBG_HTT_EXT_STATS_RESET                      =  0,
0017     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX                    =  1,
0018     ATH11K_DBG_HTT_EXT_STATS_PDEV_RX                    =  2,
0019     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_HWQ                =  3,
0020     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_SCHED              =  4,
0021     ATH11K_DBG_HTT_EXT_STATS_PDEV_ERROR                 =  5,
0022     ATH11K_DBG_HTT_EXT_STATS_PDEV_TQM                   =  6,
0023     ATH11K_DBG_HTT_EXT_STATS_TQM_CMDQ                   =  7,
0024     ATH11K_DBG_HTT_EXT_STATS_TX_DE_INFO                 =  8,
0025     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE               =  9,
0026     ATH11K_DBG_HTT_EXT_STATS_PDEV_RX_RATE               =  10,
0027     ATH11K_DBG_HTT_EXT_STATS_PEER_INFO                  =  11,
0028     ATH11K_DBG_HTT_EXT_STATS_TX_SELFGEN_INFO            =  12,
0029     ATH11K_DBG_HTT_EXT_STATS_TX_MU_HWQ                  =  13,
0030     ATH11K_DBG_HTT_EXT_STATS_RING_IF_INFO               =  14,
0031     ATH11K_DBG_HTT_EXT_STATS_SRNG_INFO                  =  15,
0032     ATH11K_DBG_HTT_EXT_STATS_SFM_INFO                   =  16,
0033     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_MU                 =  17,
0034     ATH11K_DBG_HTT_EXT_STATS_ACTIVE_PEERS_LIST          =  18,
0035     ATH11K_DBG_HTT_EXT_STATS_PDEV_CCA_STATS             =  19,
0036     ATH11K_DBG_HTT_EXT_STATS_TWT_SESSIONS               =  20,
0037     ATH11K_DBG_HTT_EXT_STATS_REO_RESOURCE_STATS         =  21,
0038     ATH11K_DBG_HTT_EXT_STATS_TX_SOUNDING_INFO           =  22,
0039     ATH11K_DBG_HTT_EXT_STATS_PDEV_OBSS_PD_STATS     =  23,
0040     ATH11K_DBG_HTT_EXT_STATS_RING_BACKPRESSURE_STATS    =  24,
0041     ATH11K_DBG_HTT_EXT_STATS_PEER_CTRL_PATH_TXRX_STATS  =  29,
0042     ATH11K_DBG_HTT_EXT_STATS_PDEV_TX_RATE_TXBF_STATS    =  31,
0043     ATH11K_DBG_HTT_EXT_STATS_TXBF_OFDMA         =  32,
0044     ATH11K_DBG_HTT_EXT_PHY_COUNTERS_AND_PHY_STATS       =  37,
0045 
0046     /* keep this last */
0047     ATH11K_DBG_HTT_NUM_EXT_STATS,
0048 };
0049 
0050 #define ATH11K_DEBUG_DBR_ENTRIES_MAX 512
0051 
0052 enum ath11k_dbg_dbr_event {
0053     ATH11K_DBG_DBR_EVENT_INVALID,
0054     ATH11K_DBG_DBR_EVENT_RX,
0055     ATH11K_DBG_DBR_EVENT_REPLENISH,
0056     ATH11K_DBG_DBR_EVENT_MAX,
0057 };
0058 
0059 struct ath11k_dbg_dbr_entry {
0060     u32 hp;
0061     u32 tp;
0062     u64 timestamp;
0063     enum ath11k_dbg_dbr_event event;
0064 };
0065 
0066 struct ath11k_dbg_dbr_data {
0067     /* protects ath11k_db_ring_debug data */
0068     spinlock_t lock;
0069     struct ath11k_dbg_dbr_entry *entries;
0070     u32 dbr_debug_idx;
0071     u32 num_ring_debug_entries;
0072 };
0073 
0074 struct ath11k_debug_dbr {
0075     struct ath11k_dbg_dbr_data dbr_dbg_data;
0076     struct dentry *dbr_debugfs;
0077     bool dbr_debug_enabled;
0078 };
0079 
0080 struct debug_htt_stats_req {
0081     bool done;
0082     u8 pdev_id;
0083     u8 type;
0084     u8 peer_addr[ETH_ALEN];
0085     struct completion cmpln;
0086     u32 buf_len;
0087     u8 buf[];
0088 };
0089 
0090 struct ath_pktlog_hdr {
0091     u16 flags;
0092     u16 missed_cnt;
0093     u16 log_type;
0094     u16 size;
0095     u32 timestamp;
0096     u32 type_specific_data;
0097     u8 payload[];
0098 };
0099 
0100 #define ATH11K_HTT_PEER_STATS_RESET BIT(16)
0101 
0102 #define ATH11K_HTT_STATS_BUF_SIZE (1024 * 512)
0103 #define ATH11K_FW_STATS_BUF_SIZE (1024 * 1024)
0104 
0105 enum ath11k_pktlog_filter {
0106     ATH11K_PKTLOG_RX        = 0x000000001,
0107     ATH11K_PKTLOG_TX        = 0x000000002,
0108     ATH11K_PKTLOG_RCFIND        = 0x000000004,
0109     ATH11K_PKTLOG_RCUPDATE      = 0x000000008,
0110     ATH11K_PKTLOG_EVENT_SMART_ANT   = 0x000000020,
0111     ATH11K_PKTLOG_EVENT_SW      = 0x000000040,
0112     ATH11K_PKTLOG_ANY       = 0x00000006f,
0113 };
0114 
0115 enum ath11k_pktlog_mode {
0116     ATH11K_PKTLOG_MODE_LITE = 1,
0117     ATH11K_PKTLOG_MODE_FULL = 2,
0118 };
0119 
0120 enum ath11k_pktlog_enum {
0121     ATH11K_PKTLOG_TYPE_INVALID      = 0,
0122     ATH11K_PKTLOG_TYPE_TX_CTRL      = 1,
0123     ATH11K_PKTLOG_TYPE_TX_STAT      = 2,
0124     ATH11K_PKTLOG_TYPE_TX_MSDU_ID   = 3,
0125     ATH11K_PKTLOG_TYPE_RX_STAT      = 5,
0126     ATH11K_PKTLOG_TYPE_RC_FIND      = 6,
0127     ATH11K_PKTLOG_TYPE_RC_UPDATE    = 7,
0128     ATH11K_PKTLOG_TYPE_TX_VIRT_ADDR = 8,
0129     ATH11K_PKTLOG_TYPE_RX_CBF       = 10,
0130     ATH11K_PKTLOG_TYPE_RX_STATBUF   = 22,
0131     ATH11K_PKTLOG_TYPE_PPDU_STATS   = 23,
0132     ATH11K_PKTLOG_TYPE_LITE_RX      = 24,
0133 };
0134 
0135 enum ath11k_dbg_aggr_mode {
0136     ATH11K_DBG_AGGR_MODE_AUTO,
0137     ATH11K_DBG_AGGR_MODE_MANUAL,
0138     ATH11K_DBG_AGGR_MODE_MAX,
0139 };
0140 
0141 enum fw_dbglog_wlan_module_id {
0142     WLAN_MODULE_ID_MIN = 0,
0143     WLAN_MODULE_INF = WLAN_MODULE_ID_MIN,
0144     WLAN_MODULE_WMI,
0145     WLAN_MODULE_STA_PWRSAVE,
0146     WLAN_MODULE_WHAL,
0147     WLAN_MODULE_COEX,
0148     WLAN_MODULE_ROAM,
0149     WLAN_MODULE_RESMGR_CHAN_MANAGER,
0150     WLAN_MODULE_RESMGR,
0151     WLAN_MODULE_VDEV_MGR,
0152     WLAN_MODULE_SCAN,
0153     WLAN_MODULE_RATECTRL,
0154     WLAN_MODULE_AP_PWRSAVE,
0155     WLAN_MODULE_BLOCKACK,
0156     WLAN_MODULE_MGMT_TXRX,
0157     WLAN_MODULE_DATA_TXRX,
0158     WLAN_MODULE_HTT,
0159     WLAN_MODULE_HOST,
0160     WLAN_MODULE_BEACON,
0161     WLAN_MODULE_OFFLOAD,
0162     WLAN_MODULE_WAL,
0163     WLAN_WAL_MODULE_DE,
0164     WLAN_MODULE_PCIELP,
0165     WLAN_MODULE_RTT,
0166     WLAN_MODULE_RESOURCE,
0167     WLAN_MODULE_DCS,
0168     WLAN_MODULE_CACHEMGR,
0169     WLAN_MODULE_ANI,
0170     WLAN_MODULE_P2P,
0171     WLAN_MODULE_CSA,
0172     WLAN_MODULE_NLO,
0173     WLAN_MODULE_CHATTER,
0174     WLAN_MODULE_WOW,
0175     WLAN_MODULE_WAL_VDEV,
0176     WLAN_MODULE_WAL_PDEV,
0177     WLAN_MODULE_TEST,
0178     WLAN_MODULE_STA_SMPS,
0179     WLAN_MODULE_SWBMISS,
0180     WLAN_MODULE_WMMAC,
0181     WLAN_MODULE_TDLS,
0182     WLAN_MODULE_HB,
0183     WLAN_MODULE_TXBF,
0184     WLAN_MODULE_BATCH_SCAN,
0185     WLAN_MODULE_THERMAL_MGR,
0186     WLAN_MODULE_PHYERR_DFS,
0187     WLAN_MODULE_RMC,
0188     WLAN_MODULE_STATS,
0189     WLAN_MODULE_NAN,
0190     WLAN_MODULE_IBSS_PWRSAVE,
0191     WLAN_MODULE_HIF_UART,
0192     WLAN_MODULE_LPI,
0193     WLAN_MODULE_EXTSCAN,
0194     WLAN_MODULE_UNIT_TEST,
0195     WLAN_MODULE_MLME,
0196     WLAN_MODULE_SUPPL,
0197     WLAN_MODULE_ERE,
0198     WLAN_MODULE_OCB,
0199     WLAN_MODULE_RSSI_MONITOR,
0200     WLAN_MODULE_WPM,
0201     WLAN_MODULE_CSS,
0202     WLAN_MODULE_PPS,
0203     WLAN_MODULE_SCAN_CH_PREDICT,
0204     WLAN_MODULE_MAWC,
0205     WLAN_MODULE_CMC_QMIC,
0206     WLAN_MODULE_EGAP,
0207     WLAN_MODULE_NAN20,
0208     WLAN_MODULE_QBOOST,
0209     WLAN_MODULE_P2P_LISTEN_OFFLOAD,
0210     WLAN_MODULE_HALPHY,
0211     WLAN_WAL_MODULE_ENQ,
0212     WLAN_MODULE_GNSS,
0213     WLAN_MODULE_WAL_MEM,
0214     WLAN_MODULE_SCHED_ALGO,
0215     WLAN_MODULE_TX,
0216     WLAN_MODULE_RX,
0217     WLAN_MODULE_WLM,
0218     WLAN_MODULE_RU_ALLOCATOR,
0219     WLAN_MODULE_11K_OFFLOAD,
0220     WLAN_MODULE_STA_TWT,
0221     WLAN_MODULE_AP_TWT,
0222     WLAN_MODULE_UL_OFDMA,
0223     WLAN_MODULE_HPCS_PULSE,
0224     WLAN_MODULE_DTF,
0225     WLAN_MODULE_QUIET_IE,
0226     WLAN_MODULE_SHMEM_MGR,
0227     WLAN_MODULE_CFIR,
0228     WLAN_MODULE_CODE_COVER,
0229     WLAN_MODULE_SHO,
0230     WLAN_MODULE_MLO_MGR,
0231     WLAN_MODULE_PEER_INIT,
0232     WLAN_MODULE_STA_MLO_PS,
0233 
0234     WLAN_MODULE_ID_MAX,
0235     WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
0236 };
0237 
0238 enum fw_dbglog_log_level {
0239     ATH11K_FW_DBGLOG_ML = 0,
0240     ATH11K_FW_DBGLOG_VERBOSE = 0,
0241     ATH11K_FW_DBGLOG_INFO,
0242     ATH11K_FW_DBGLOG_INFO_LVL_1,
0243     ATH11K_FW_DBGLOG_INFO_LVL_2,
0244     ATH11K_FW_DBGLOG_WARN,
0245     ATH11K_FW_DBGLOG_ERR,
0246     ATH11K_FW_DBGLOG_LVL_MAX
0247 };
0248 
0249 struct ath11k_fw_dbglog {
0250     enum wmi_debug_log_param param;
0251     union {
0252         struct {
0253             /* log_level values are given in enum fw_dbglog_log_level */
0254             u16 log_level;
0255             /* module_id values are given in  enum fw_dbglog_wlan_module_id */
0256             u16 module_id;
0257         };
0258         /* value is either log_level&module_id/vdev_id/vdev_id_bitmap/log_level
0259          * according to param
0260          */
0261         u32 value;
0262     };
0263 };
0264 
0265 #ifdef CONFIG_ATH11K_DEBUGFS
0266 int ath11k_debugfs_soc_create(struct ath11k_base *ab);
0267 void ath11k_debugfs_soc_destroy(struct ath11k_base *ab);
0268 int ath11k_debugfs_pdev_create(struct ath11k_base *ab);
0269 void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab);
0270 int ath11k_debugfs_register(struct ath11k *ar);
0271 void ath11k_debugfs_unregister(struct ath11k *ar);
0272 void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab, struct sk_buff *skb);
0273 
0274 void ath11k_debugfs_fw_stats_init(struct ath11k *ar);
0275 int ath11k_debugfs_get_fw_stats(struct ath11k *ar, u32 pdev_id,
0276                 u32 vdev_id, u32 stats_id);
0277 
0278 static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar)
0279 {
0280     return (ar->debug.pktlog_mode == ATH11K_PKTLOG_MODE_LITE);
0281 }
0282 
0283 static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar)
0284 {
0285     return (!ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode);
0286 }
0287 
0288 static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr)
0289 {
0290     return (ar->debug.pktlog_peer_valid && ar->debug.pktlog_mode &&
0291         ether_addr_equal(addr, ar->debug.pktlog_peer_addr));
0292 }
0293 
0294 static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar)
0295 {
0296     return ar->debug.extd_tx_stats;
0297 }
0298 
0299 static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar)
0300 {
0301     return ar->debug.extd_rx_stats;
0302 }
0303 
0304 static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)
0305 {
0306     return ar->debug.rx_filter;
0307 }
0308 
0309 int ath11k_debugfs_add_interface(struct ath11k_vif *arvif);
0310 void ath11k_debugfs_remove_interface(struct ath11k_vif *arvif);
0311 void ath11k_debugfs_add_dbring_entry(struct ath11k *ar,
0312                      enum wmi_direct_buffer_module id,
0313                      enum ath11k_dbg_dbr_event event,
0314                      struct hal_srng *srng);
0315 
0316 #else
0317 static inline int ath11k_debugfs_soc_create(struct ath11k_base *ab)
0318 {
0319     return 0;
0320 }
0321 
0322 static inline void ath11k_debugfs_soc_destroy(struct ath11k_base *ab)
0323 {
0324 }
0325 
0326 static inline int ath11k_debugfs_pdev_create(struct ath11k_base *ab)
0327 {
0328     return 0;
0329 }
0330 
0331 static inline void ath11k_debugfs_pdev_destroy(struct ath11k_base *ab)
0332 {
0333 }
0334 
0335 static inline int ath11k_debugfs_register(struct ath11k *ar)
0336 {
0337     return 0;
0338 }
0339 
0340 static inline void ath11k_debugfs_unregister(struct ath11k *ar)
0341 {
0342 }
0343 
0344 static inline void ath11k_debugfs_fw_stats_process(struct ath11k_base *ab,
0345                            struct sk_buff *skb)
0346 {
0347 }
0348 
0349 static inline void ath11k_debugfs_fw_stats_init(struct ath11k *ar)
0350 {
0351 }
0352 
0353 static inline int ath11k_debugfs_is_extd_tx_stats_enabled(struct ath11k *ar)
0354 {
0355     return 0;
0356 }
0357 
0358 static inline int ath11k_debugfs_is_extd_rx_stats_enabled(struct ath11k *ar)
0359 {
0360     return 0;
0361 }
0362 
0363 static inline bool ath11k_debugfs_is_pktlog_lite_mode_enabled(struct ath11k *ar)
0364 {
0365     return false;
0366 }
0367 
0368 static inline bool ath11k_debugfs_is_pktlog_rx_stats_enabled(struct ath11k *ar)
0369 {
0370     return false;
0371 }
0372 
0373 static inline bool ath11k_debugfs_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr)
0374 {
0375     return false;
0376 }
0377 
0378 static inline int ath11k_debugfs_rx_filter(struct ath11k *ar)
0379 {
0380     return 0;
0381 }
0382 
0383 static inline int ath11k_debugfs_get_fw_stats(struct ath11k *ar,
0384                           u32 pdev_id, u32 vdev_id, u32 stats_id)
0385 {
0386     return 0;
0387 }
0388 
0389 static inline int ath11k_debugfs_add_interface(struct ath11k_vif *arvif)
0390 {
0391     return 0;
0392 }
0393 
0394 static inline void ath11k_debugfs_remove_interface(struct ath11k_vif *arvif)
0395 {
0396 }
0397 
0398 static inline void
0399 ath11k_debugfs_add_dbring_entry(struct ath11k *ar,
0400                 enum wmi_direct_buffer_module id,
0401                 enum ath11k_dbg_dbr_event event,
0402                 struct hal_srng *srng)
0403 {
0404 }
0405 #endif /* CONFIG_ATH11K_DEBUGFS*/
0406 
0407 #endif /* _ATH11K_DEBUGFS_H_ */