linux/drivers/net/wireless/ath/ath10k/debug.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: ISC */
   2/*
   3 * Copyright (c) 2005-2011 Atheros Communications Inc.
   4 * Copyright (c) 2011-2017 Qualcomm Atheros, Inc.
   5 * Copyright (c) 2018, The Linux Foundation. All rights reserved.
   6 */
   7
   8#ifndef _DEBUG_H_
   9#define _DEBUG_H_
  10
  11#include <linux/types.h>
  12#include "trace.h"
  13
  14enum ath10k_debug_mask {
  15        ATH10K_DBG_PCI          = 0x00000001,
  16        ATH10K_DBG_WMI          = 0x00000002,
  17        ATH10K_DBG_HTC          = 0x00000004,
  18        ATH10K_DBG_HTT          = 0x00000008,
  19        ATH10K_DBG_MAC          = 0x00000010,
  20        ATH10K_DBG_BOOT         = 0x00000020,
  21        ATH10K_DBG_PCI_DUMP     = 0x00000040,
  22        ATH10K_DBG_HTT_DUMP     = 0x00000080,
  23        ATH10K_DBG_MGMT         = 0x00000100,
  24        ATH10K_DBG_DATA         = 0x00000200,
  25        ATH10K_DBG_BMI          = 0x00000400,
  26        ATH10K_DBG_REGULATORY   = 0x00000800,
  27        ATH10K_DBG_TESTMODE     = 0x00001000,
  28        ATH10K_DBG_WMI_PRINT    = 0x00002000,
  29        ATH10K_DBG_PCI_PS       = 0x00004000,
  30        ATH10K_DBG_AHB          = 0x00008000,
  31        ATH10K_DBG_SDIO         = 0x00010000,
  32        ATH10K_DBG_SDIO_DUMP    = 0x00020000,
  33        ATH10K_DBG_USB          = 0x00040000,
  34        ATH10K_DBG_USB_BULK     = 0x00080000,
  35        ATH10K_DBG_SNOC         = 0x00100000,
  36        ATH10K_DBG_QMI          = 0x00200000,
  37        ATH10K_DBG_STA          = 0x00400000,
  38        ATH10K_DBG_ANY          = 0xffffffff,
  39};
  40
  41enum ath10k_pktlog_filter {
  42        ATH10K_PKTLOG_RX         = 0x000000001,
  43        ATH10K_PKTLOG_TX         = 0x000000002,
  44        ATH10K_PKTLOG_RCFIND     = 0x000000004,
  45        ATH10K_PKTLOG_RCUPDATE   = 0x000000008,
  46        ATH10K_PKTLOG_DBG_PRINT  = 0x000000010,
  47        ATH10K_PKTLOG_PEER_STATS = 0x000000040,
  48        ATH10K_PKTLOG_ANY        = 0x00000005f,
  49};
  50
  51enum ath10k_dbg_aggr_mode {
  52        ATH10K_DBG_AGGR_MODE_AUTO,
  53        ATH10K_DBG_AGGR_MODE_MANUAL,
  54        ATH10K_DBG_AGGR_MODE_MAX,
  55};
  56
  57/* Types of packet log events */
  58enum ath_pktlog_type {
  59        ATH_PKTLOG_TYPE_TX_CTRL = 1,
  60        ATH_PKTLOG_TYPE_TX_STAT,
  61};
  62
  63struct ath10k_pktlog_hdr {
  64        __le16 flags;
  65        __le16 missed_cnt;
  66        __le16 log_type; /* Type of log information foll this header */
  67        __le16 size; /* Size of variable length log information in bytes */
  68        __le32 timestamp;
  69        u8 payload[];
  70} __packed;
  71
  72/* FIXME: How to calculate the buffer size sanely? */
  73#define ATH10K_FW_STATS_BUF_SIZE (1024 * 1024)
  74
  75#define ATH10K_TX_POWER_MAX_VAL 70
  76#define ATH10K_TX_POWER_MIN_VAL 0
  77
  78extern unsigned int ath10k_debug_mask;
  79
  80__printf(2, 3) void ath10k_info(struct ath10k *ar, const char *fmt, ...);
  81__printf(2, 3) void ath10k_err(struct ath10k *ar, const char *fmt, ...);
  82__printf(2, 3) void ath10k_warn(struct ath10k *ar, const char *fmt, ...);
  83
  84void ath10k_debug_print_hwfw_info(struct ath10k *ar);
  85void ath10k_debug_print_board_info(struct ath10k *ar);
  86void ath10k_debug_print_boot_info(struct ath10k *ar);
  87void ath10k_print_driver_info(struct ath10k *ar);
  88
  89#ifdef CONFIG_ATH10K_DEBUGFS
  90int ath10k_debug_start(struct ath10k *ar);
  91void ath10k_debug_stop(struct ath10k *ar);
  92int ath10k_debug_create(struct ath10k *ar);
  93void ath10k_debug_destroy(struct ath10k *ar);
  94int ath10k_debug_register(struct ath10k *ar);
  95void ath10k_debug_unregister(struct ath10k *ar);
  96void ath10k_debug_fw_stats_process(struct ath10k *ar, struct sk_buff *skb);
  97void ath10k_debug_tpc_stats_process(struct ath10k *ar,
  98                                    struct ath10k_tpc_stats *tpc_stats);
  99void
 100ath10k_debug_tpc_stats_final_process(struct ath10k *ar,
 101                                     struct ath10k_tpc_stats_final *tpc_stats);
 102void ath10k_debug_dbglog_add(struct ath10k *ar, u8 *buffer, int len);
 103
 104#define ATH10K_DFS_STAT_INC(ar, c) (ar->debug.dfs_stats.c++)
 105
 106void ath10k_debug_get_et_strings(struct ieee80211_hw *hw,
 107                                 struct ieee80211_vif *vif,
 108                                 u32 sset, u8 *data);
 109int ath10k_debug_get_et_sset_count(struct ieee80211_hw *hw,
 110                                   struct ieee80211_vif *vif, int sset);
 111void ath10k_debug_get_et_stats(struct ieee80211_hw *hw,
 112                               struct ieee80211_vif *vif,
 113                               struct ethtool_stats *stats, u64 *data);
 114
 115static inline u64 ath10k_debug_get_fw_dbglog_mask(struct ath10k *ar)
 116{
 117        return ar->debug.fw_dbglog_mask;
 118}
 119
 120static inline u32 ath10k_debug_get_fw_dbglog_level(struct ath10k *ar)
 121{
 122        return ar->debug.fw_dbglog_level;
 123}
 124
 125static inline int ath10k_debug_is_extd_tx_stats_enabled(struct ath10k *ar)
 126{
 127        return ar->debug.enable_extd_tx_stats;
 128}
 129
 130int ath10k_debug_fw_stats_request(struct ath10k *ar);
 131
 132#else
 133
 134static inline int ath10k_debug_start(struct ath10k *ar)
 135{
 136        return 0;
 137}
 138
 139static inline void ath10k_debug_stop(struct ath10k *ar)
 140{
 141}
 142
 143static inline int ath10k_debug_create(struct ath10k *ar)
 144{
 145        return 0;
 146}
 147
 148static inline void ath10k_debug_destroy(struct ath10k *ar)
 149{
 150}
 151
 152static inline int ath10k_debug_register(struct ath10k *ar)
 153{
 154        return 0;
 155}
 156
 157static inline void ath10k_debug_unregister(struct ath10k *ar)
 158{
 159}
 160
 161static inline void ath10k_debug_fw_stats_process(struct ath10k *ar,
 162                                                 struct sk_buff *skb)
 163{
 164}
 165
 166static inline void ath10k_debug_tpc_stats_process(struct ath10k *ar,
 167                                                  struct ath10k_tpc_stats *tpc_stats)
 168{
 169        kfree(tpc_stats);
 170}
 171
 172static inline void
 173ath10k_debug_tpc_stats_final_process(struct ath10k *ar,
 174                                     struct ath10k_tpc_stats_final *tpc_stats)
 175{
 176        kfree(tpc_stats);
 177}
 178
 179static inline void ath10k_debug_dbglog_add(struct ath10k *ar, u8 *buffer,
 180                                           int len)
 181{
 182}
 183
 184static inline u64 ath10k_debug_get_fw_dbglog_mask(struct ath10k *ar)
 185{
 186        return 0;
 187}
 188
 189static inline u32 ath10k_debug_get_fw_dbglog_level(struct ath10k *ar)
 190{
 191        return 0;
 192}
 193
 194static inline int ath10k_debug_is_extd_tx_stats_enabled(struct ath10k *ar)
 195{
 196        return 0;
 197}
 198
 199static inline int ath10k_debug_fw_stats_request(struct ath10k *ar)
 200{
 201        return 0;
 202}
 203
 204#define ATH10K_DFS_STAT_INC(ar, c) do { } while (0)
 205
 206#define ath10k_debug_get_et_strings NULL
 207#define ath10k_debug_get_et_sset_count NULL
 208#define ath10k_debug_get_et_stats NULL
 209
 210#endif /* CONFIG_ATH10K_DEBUGFS */
 211#ifdef CONFIG_MAC80211_DEBUGFS
 212void ath10k_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 213                            struct ieee80211_sta *sta, struct dentry *dir);
 214void ath10k_sta_update_rx_duration(struct ath10k *ar,
 215                                   struct ath10k_fw_stats *stats);
 216void ath10k_sta_update_rx_tid_stats(struct ath10k *ar, u8 *first_hdr,
 217                                    unsigned long num_msdus,
 218                                    enum ath10k_pkt_rx_err err,
 219                                    unsigned long unchain_cnt,
 220                                    unsigned long drop_cnt,
 221                                    unsigned long drop_cnt_filter,
 222                                    unsigned long queued_msdus);
 223void ath10k_sta_update_rx_tid_stats_ampdu(struct ath10k *ar,
 224                                          u16 peer_id, u8 tid,
 225                                          struct htt_rx_indication_mpdu_range *ranges,
 226                                          int num_ranges);
 227#else
 228static inline
 229void ath10k_sta_update_rx_duration(struct ath10k *ar,
 230                                   struct ath10k_fw_stats *stats)
 231{
 232}
 233
 234static inline
 235void ath10k_sta_update_rx_tid_stats(struct ath10k *ar, u8 *first_hdr,
 236                                    unsigned long num_msdus,
 237                                    enum ath10k_pkt_rx_err err,
 238                                    unsigned long unchain_cnt,
 239                                    unsigned long drop_cnt,
 240                                    unsigned long drop_cnt_filter,
 241                                    unsigned long queued_msdus)
 242{
 243}
 244
 245static inline
 246void ath10k_sta_update_rx_tid_stats_ampdu(struct ath10k *ar,
 247                                          u16 peer_id, u8 tid,
 248                                          struct htt_rx_indication_mpdu_range *ranges,
 249                                          int num_ranges)
 250{
 251}
 252#endif /* CONFIG_MAC80211_DEBUGFS */
 253
 254#ifdef CONFIG_ATH10K_DEBUG
 255__printf(3, 4) void __ath10k_dbg(struct ath10k *ar,
 256                                 enum ath10k_debug_mask mask,
 257                                 const char *fmt, ...);
 258void ath10k_dbg_dump(struct ath10k *ar,
 259                     enum ath10k_debug_mask mask,
 260                     const char *msg, const char *prefix,
 261                     const void *buf, size_t len);
 262#else /* CONFIG_ATH10K_DEBUG */
 263
 264static inline int __ath10k_dbg(struct ath10k *ar,
 265                               enum ath10k_debug_mask dbg_mask,
 266                               const char *fmt, ...)
 267{
 268        return 0;
 269}
 270
 271static inline void ath10k_dbg_dump(struct ath10k *ar,
 272                                   enum ath10k_debug_mask mask,
 273                                   const char *msg, const char *prefix,
 274                                   const void *buf, size_t len)
 275{
 276}
 277#endif /* CONFIG_ATH10K_DEBUG */
 278
 279/* Avoid calling __ath10k_dbg() if debug_mask is not set and tracing
 280 * disabled.
 281 */
 282#define ath10k_dbg(ar, dbg_mask, fmt, ...)                      \
 283do {                                                            \
 284        if ((ath10k_debug_mask & dbg_mask) ||                   \
 285            trace_ath10k_log_dbg_enabled())                     \
 286                __ath10k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \
 287} while (0)
 288#endif /* _DEBUG_H_ */
 289