1daeccac2SArend van Spriel // SPDX-License-Identifier: ISC 205491d2cSKalle Valo /* 305491d2cSKalle Valo * Copyright (c) 2010 Broadcom Corporation 405491d2cSKalle Valo */ 505491d2cSKalle Valo 605491d2cSKalle Valo #ifndef BRCMFMAC_DEBUG_H 705491d2cSKalle Valo #define BRCMFMAC_DEBUG_H 805491d2cSKalle Valo 9b4fd63c6SArend van Spriel #include <linux/net.h> /* net_ratelimit() */ 10b4fd63c6SArend van Spriel 1105491d2cSKalle Valo /* message levels */ 1205491d2cSKalle Valo #define BRCMF_TRACE_VAL 0x00000002 1305491d2cSKalle Valo #define BRCMF_INFO_VAL 0x00000004 1405491d2cSKalle Valo #define BRCMF_DATA_VAL 0x00000008 1505491d2cSKalle Valo #define BRCMF_CTL_VAL 0x00000010 1605491d2cSKalle Valo #define BRCMF_TIMER_VAL 0x00000020 1705491d2cSKalle Valo #define BRCMF_HDRS_VAL 0x00000040 1805491d2cSKalle Valo #define BRCMF_BYTES_VAL 0x00000080 1905491d2cSKalle Valo #define BRCMF_INTR_VAL 0x00000100 2005491d2cSKalle Valo #define BRCMF_GLOM_VAL 0x00000200 2105491d2cSKalle Valo #define BRCMF_EVENT_VAL 0x00000400 2205491d2cSKalle Valo #define BRCMF_BTA_VAL 0x00000800 2305491d2cSKalle Valo #define BRCMF_FIL_VAL 0x00001000 2405491d2cSKalle Valo #define BRCMF_USB_VAL 0x00002000 2505491d2cSKalle Valo #define BRCMF_SCAN_VAL 0x00004000 2605491d2cSKalle Valo #define BRCMF_CONN_VAL 0x00008000 2705491d2cSKalle Valo #define BRCMF_BCDC_VAL 0x00010000 2805491d2cSKalle Valo #define BRCMF_SDIO_VAL 0x00020000 2905491d2cSKalle Valo #define BRCMF_MSGBUF_VAL 0x00040000 3005491d2cSKalle Valo #define BRCMF_PCIE_VAL 0x00080000 3105491d2cSKalle Valo #define BRCMF_FWCON_VAL 0x00100000 3205491d2cSKalle Valo 3305491d2cSKalle Valo /* set default print format */ 3405491d2cSKalle Valo #undef pr_fmt 3505491d2cSKalle Valo #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 3605491d2cSKalle Valo 375cc898fbSRafał Miłecki struct brcmf_bus; 385cc898fbSRafał Miłecki 395cc898fbSRafał Miłecki __printf(3, 4) 405cc898fbSRafał Miłecki void __brcmf_err(struct brcmf_bus *bus, const char *func, const char *fmt, ...); 41d0630555SRafał Miłecki /* Macro for error messages. When debugging / tracing the driver all error 42d0630555SRafał Miłecki * messages are important to us. 4305491d2cSKalle Valo */ 448602e624SRafał Miłecki #ifndef brcmf_err 4505491d2cSKalle Valo #define brcmf_err(fmt, ...) \ 4605491d2cSKalle Valo do { \ 47d0630555SRafał Miłecki if (IS_ENABLED(CONFIG_BRCMDBG) || \ 48d0630555SRafał Miłecki IS_ENABLED(CONFIG_BRCM_TRACING) || \ 49d0630555SRafał Miłecki net_ratelimit()) \ 505cc898fbSRafał Miłecki __brcmf_err(NULL, __func__, fmt, ##__VA_ARGS__);\ 5105491d2cSKalle Valo } while (0) 528602e624SRafał Miłecki #endif 5305491d2cSKalle Valo 5416e64676SRafał Miłecki #define bphy_err(drvr, fmt, ...) \ 553ef005b8SRafał Miłecki do { \ 563ef005b8SRafał Miłecki if (IS_ENABLED(CONFIG_BRCMDBG) || \ 573ef005b8SRafał Miłecki IS_ENABLED(CONFIG_BRCM_TRACING) || \ 583ef005b8SRafał Miłecki net_ratelimit()) \ 5916e64676SRafał Miłecki wiphy_err((drvr)->wiphy, "%s: " fmt, __func__, \ 603ef005b8SRafał Miłecki ##__VA_ARGS__); \ 613ef005b8SRafał Miłecki } while (0) 623ef005b8SRafał Miłecki 6305491d2cSKalle Valo #if defined(DEBUG) || defined(CONFIG_BRCM_TRACING) 64d79fe4cbSHans de Goede 65d79fe4cbSHans de Goede /* For debug/tracing purposes treat info messages as errors */ 66d79fe4cbSHans de Goede #define brcmf_info brcmf_err 67d79fe4cbSHans de Goede 6805491d2cSKalle Valo __printf(3, 4) 6905491d2cSKalle Valo void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...); 7005491d2cSKalle Valo #define brcmf_dbg(level, fmt, ...) \ 7105491d2cSKalle Valo do { \ 7205491d2cSKalle Valo __brcmf_dbg(BRCMF_##level##_VAL, __func__, \ 7305491d2cSKalle Valo fmt, ##__VA_ARGS__); \ 7405491d2cSKalle Valo } while (0) 7505491d2cSKalle Valo #define BRCMF_DATA_ON() (brcmf_msg_level & BRCMF_DATA_VAL) 7605491d2cSKalle Valo #define BRCMF_CTL_ON() (brcmf_msg_level & BRCMF_CTL_VAL) 7705491d2cSKalle Valo #define BRCMF_HDRS_ON() (brcmf_msg_level & BRCMF_HDRS_VAL) 7805491d2cSKalle Valo #define BRCMF_BYTES_ON() (brcmf_msg_level & BRCMF_BYTES_VAL) 7905491d2cSKalle Valo #define BRCMF_GLOM_ON() (brcmf_msg_level & BRCMF_GLOM_VAL) 8005491d2cSKalle Valo #define BRCMF_EVENT_ON() (brcmf_msg_level & BRCMF_EVENT_VAL) 8105491d2cSKalle Valo #define BRCMF_FIL_ON() (brcmf_msg_level & BRCMF_FIL_VAL) 8205491d2cSKalle Valo #define BRCMF_FWCON_ON() (brcmf_msg_level & BRCMF_FWCON_VAL) 83efc2c1faSArend Van Spriel #define BRCMF_SCAN_ON() (brcmf_msg_level & BRCMF_SCAN_VAL) 8405491d2cSKalle Valo 8505491d2cSKalle Valo #else /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */ 8605491d2cSKalle Valo 87d79fe4cbSHans de Goede #define brcmf_info(fmt, ...) \ 88d79fe4cbSHans de Goede do { \ 89d79fe4cbSHans de Goede pr_info("%s: " fmt, __func__, ##__VA_ARGS__); \ 90d79fe4cbSHans de Goede } while (0) 91d79fe4cbSHans de Goede 9205491d2cSKalle Valo #define brcmf_dbg(level, fmt, ...) no_printk(fmt, ##__VA_ARGS__) 9305491d2cSKalle Valo 9405491d2cSKalle Valo #define BRCMF_DATA_ON() 0 9505491d2cSKalle Valo #define BRCMF_CTL_ON() 0 9605491d2cSKalle Valo #define BRCMF_HDRS_ON() 0 9705491d2cSKalle Valo #define BRCMF_BYTES_ON() 0 9805491d2cSKalle Valo #define BRCMF_GLOM_ON() 0 9905491d2cSKalle Valo #define BRCMF_EVENT_ON() 0 10005491d2cSKalle Valo #define BRCMF_FIL_ON() 0 10105491d2cSKalle Valo #define BRCMF_FWCON_ON() 0 102efc2c1faSArend Van Spriel #define BRCMF_SCAN_ON() 0 10305491d2cSKalle Valo 10405491d2cSKalle Valo #endif /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */ 10505491d2cSKalle Valo 10605491d2cSKalle Valo #define brcmf_dbg_hex_dump(test, data, len, fmt, ...) \ 10705491d2cSKalle Valo do { \ 10805491d2cSKalle Valo trace_brcmf_hexdump((void *)data, len); \ 10905491d2cSKalle Valo if (test) \ 11005491d2cSKalle Valo brcmu_dbg_hex_dump(data, len, fmt, ##__VA_ARGS__); \ 11105491d2cSKalle Valo } while (0) 11205491d2cSKalle Valo 11305491d2cSKalle Valo extern int brcmf_msg_level; 11405491d2cSKalle Valo 115f1ac3aa2SRafał Miłecki struct brcmf_bus; 11605491d2cSKalle Valo struct brcmf_pub; 11705491d2cSKalle Valo #ifdef DEBUG 11805491d2cSKalle Valo struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr); 119ea1b3bc6SGreg Kroah-Hartman void brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn, 12005491d2cSKalle Valo int (*read_fn)(struct seq_file *seq, void *data)); 121f1ac3aa2SRafał Miłecki int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data, 122f1ac3aa2SRafał Miłecki size_t len); 12305491d2cSKalle Valo #else 124cb34212bSRafał Miłecki static inline struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr) 125cb34212bSRafał Miłecki { 126cb34212bSRafał Miłecki return ERR_PTR(-ENOENT); 127cb34212bSRafał Miłecki } 12805491d2cSKalle Valo static inline 129ea1b3bc6SGreg Kroah-Hartman void brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn, 13005491d2cSKalle Valo int (*read_fn)(struct seq_file *seq, void *data)) 131ea1b3bc6SGreg Kroah-Hartman { } 132f1ac3aa2SRafał Miłecki static inline 133f1ac3aa2SRafał Miłecki int brcmf_debug_create_memdump(struct brcmf_bus *bus, const void *data, 134f1ac3aa2SRafał Miłecki size_t len) 135f1ac3aa2SRafał Miłecki { 136f1ac3aa2SRafał Miłecki return 0; 137f1ac3aa2SRafał Miłecki } 13805491d2cSKalle Valo #endif 13905491d2cSKalle Valo 14005491d2cSKalle Valo #endif /* BRCMFMAC_DEBUG_H */ 141