1/* 2 * Copyright (c) 2010 Broadcom Corporation 3 * 4 * Permission to use, copy, modify, and/or distribute this software for any 5 * purpose with or without fee is hereby granted, provided that the above 6 * copyright notice and this permission notice appear in all copies. 7 * 8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION 13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 */ 16 17#ifndef BRCMFMAC_DEBUG_H 18#define BRCMFMAC_DEBUG_H 19 20/* message levels */ 21#define BRCMF_TRACE_VAL 0x00000002 22#define BRCMF_INFO_VAL 0x00000004 23#define BRCMF_DATA_VAL 0x00000008 24#define BRCMF_CTL_VAL 0x00000010 25#define BRCMF_TIMER_VAL 0x00000020 26#define BRCMF_HDRS_VAL 0x00000040 27#define BRCMF_BYTES_VAL 0x00000080 28#define BRCMF_INTR_VAL 0x00000100 29#define BRCMF_GLOM_VAL 0x00000200 30#define BRCMF_EVENT_VAL 0x00000400 31#define BRCMF_BTA_VAL 0x00000800 32#define BRCMF_FIL_VAL 0x00001000 33#define BRCMF_USB_VAL 0x00002000 34#define BRCMF_SCAN_VAL 0x00004000 35#define BRCMF_CONN_VAL 0x00008000 36#define BRCMF_BCDC_VAL 0x00010000 37#define BRCMF_SDIO_VAL 0x00020000 38#define BRCMF_MSGBUF_VAL 0x00040000 39#define BRCMF_PCIE_VAL 0x00080000 40 41/* set default print format */ 42#undef pr_fmt 43#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 44 45/* Macro for error messages. net_ratelimit() is used when driver 46 * debugging is not selected. When debugging the driver error 47 * messages are as important as other tracing or even more so. 48 */ 49#ifndef CONFIG_BRCM_TRACING 50#ifdef CONFIG_BRCMDBG 51#define brcmf_err(fmt, ...) pr_err("%s: " fmt, __func__, ##__VA_ARGS__) 52#else 53#define brcmf_err(fmt, ...) \ 54 do { \ 55 if (net_ratelimit()) \ 56 pr_err("%s: " fmt, __func__, ##__VA_ARGS__); \ 57 } while (0) 58#endif 59#else 60__printf(2, 3) 61void __brcmf_err(const char *func, const char *fmt, ...); 62#define brcmf_err(fmt, ...) \ 63 __brcmf_err(__func__, fmt, ##__VA_ARGS__) 64#endif 65 66#if defined(DEBUG) || defined(CONFIG_BRCM_TRACING) 67__printf(3, 4) 68void __brcmf_dbg(u32 level, const char *func, const char *fmt, ...); 69#define brcmf_dbg(level, fmt, ...) \ 70do { \ 71 __brcmf_dbg(BRCMF_##level##_VAL, __func__, \ 72 fmt, ##__VA_ARGS__); \ 73} while (0) 74#define BRCMF_DATA_ON() (brcmf_msg_level & BRCMF_DATA_VAL) 75#define BRCMF_CTL_ON() (brcmf_msg_level & BRCMF_CTL_VAL) 76#define BRCMF_HDRS_ON() (brcmf_msg_level & BRCMF_HDRS_VAL) 77#define BRCMF_BYTES_ON() (brcmf_msg_level & BRCMF_BYTES_VAL) 78#define BRCMF_GLOM_ON() (brcmf_msg_level & BRCMF_GLOM_VAL) 79#define BRCMF_EVENT_ON() (brcmf_msg_level & BRCMF_EVENT_VAL) 80#define BRCMF_FIL_ON() (brcmf_msg_level & BRCMF_FIL_VAL) 81 82#else /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */ 83 84#define brcmf_dbg(level, fmt, ...) no_printk(fmt, ##__VA_ARGS__) 85 86#define BRCMF_DATA_ON() 0 87#define BRCMF_CTL_ON() 0 88#define BRCMF_HDRS_ON() 0 89#define BRCMF_BYTES_ON() 0 90#define BRCMF_GLOM_ON() 0 91#define BRCMF_EVENT_ON() 0 92#define BRCMF_FIL_ON() 0 93 94#endif /* defined(DEBUG) || defined(CONFIG_BRCM_TRACING) */ 95 96#define brcmf_dbg_hex_dump(test, data, len, fmt, ...) \ 97do { \ 98 trace_brcmf_hexdump((void *)data, len); \ 99 if (test) \ 100 brcmu_dbg_hex_dump(data, len, fmt, ##__VA_ARGS__); \ 101} while (0) 102 103extern int brcmf_msg_level; 104 105struct brcmf_pub; 106#ifdef DEBUG 107void brcmf_debugfs_init(void); 108void brcmf_debugfs_exit(void); 109int brcmf_debugfs_attach(struct brcmf_pub *drvr); 110void brcmf_debugfs_detach(struct brcmf_pub *drvr); 111struct dentry *brcmf_debugfs_get_devdir(struct brcmf_pub *drvr); 112int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn, 113 int (*read_fn)(struct seq_file *seq, void *data)); 114#else 115static inline void brcmf_debugfs_init(void) 116{ 117} 118static inline void brcmf_debugfs_exit(void) 119{ 120} 121static inline int brcmf_debugfs_attach(struct brcmf_pub *drvr) 122{ 123 return 0; 124} 125static inline void brcmf_debugfs_detach(struct brcmf_pub *drvr) 126{ 127} 128static inline 129int brcmf_debugfs_add_entry(struct brcmf_pub *drvr, const char *fn, 130 int (*read_fn)(struct seq_file *seq, void *data)) 131{ 132 return 0; 133} 134#endif 135 136#endif /* BRCMFMAC_DEBUG_H */ 137