#ifndef BCM43xx_DEBUGFS_H_ #define BCM43xx_DEBUGFS_H_ struct bcm43xx_private; struct bcm43xx_xmitstatus; #ifdef CONFIG_BCM43XX_DEBUG #include #include struct dentry; /* limited by the size of the "really_big_buffer" */ #define BCM43xx_NR_LOGGED_XMITSTATUS 100 struct bcm43xx_dfsentry { struct dentry *subdir; struct dentry *dentry_devinfo; struct dentry *dentry_spromdump; struct dentry *dentry_tsf; struct dentry *dentry_txstat; struct dentry *dentry_restart; struct bcm43xx_private *bcm; /* saved xmitstatus. */ struct bcm43xx_xmitstatus *xmitstatus_buffer; int xmitstatus_ptr; int xmitstatus_cnt; /* We need a seperate buffer while printing to avoid * concurrency issues. (New xmitstatus can arrive * while we are printing). */ struct bcm43xx_xmitstatus *xmitstatus_print_buffer; int saved_xmitstatus_ptr; int saved_xmitstatus_cnt; int xmitstatus_printing; }; struct bcm43xx_debugfs { struct dentry *root; struct dentry *dentry_driverinfo; }; void bcm43xx_debugfs_init(void); void bcm43xx_debugfs_exit(void); void bcm43xx_debugfs_add_device(struct bcm43xx_private *bcm); void bcm43xx_debugfs_remove_device(struct bcm43xx_private *bcm); void bcm43xx_debugfs_log_txstat(struct bcm43xx_private *bcm, struct bcm43xx_xmitstatus *status); /* Debug helper: Dump binary data through printk. */ void bcm43xx_printk_dump(const char *data, size_t size, const char *description); /* Debug helper: Dump bitwise binary data through printk. */ void bcm43xx_printk_bitdump(const unsigned char *data, size_t bytes, int msb_to_lsb, const char *description); #define bcm43xx_printk_bitdumpt(pointer, msb_to_lsb, description) \ do { \ bcm43xx_printk_bitdump((const unsigned char *)(pointer), \ sizeof(*(pointer)), \ (msb_to_lsb), \ (description)); \ } while (0) #else /* CONFIG_BCM43XX_DEBUG*/ static inline void bcm43xx_debugfs_init(void) { } static inline void bcm43xx_debugfs_exit(void) { } static inline void bcm43xx_debugfs_add_device(struct bcm43xx_private *bcm) { } static inline void bcm43xx_debugfs_remove_device(struct bcm43xx_private *bcm) { } static inline void bcm43xx_debugfs_log_txstat(struct bcm43xx_private *bcm, struct bcm43xx_xmitstatus *status) { } static inline void bcm43xx_printk_dump(const char *data, size_t size, const char *description) { } static inline void bcm43xx_printk_bitdump(const unsigned char *data, size_t bytes, int msb_to_lsb, const char *description) { } #define bcm43xx_printk_bitdumpt(pointer, msb_to_lsb, description) do { /* nothing */ } while (0) #endif /* CONFIG_BCM43XX_DEBUG*/ /* Ugly helper macros to make incomplete code more verbose on runtime */ #ifdef TODO # undef TODO #endif #define TODO() \ do { \ printk(KERN_INFO PFX "TODO: Incomplete code in %s() at %s:%d\n", \ __FUNCTION__, __FILE__, __LINE__); \ } while (0) #ifdef FIXME # undef FIXME #endif #define FIXME() \ do { \ printk(KERN_INFO PFX "FIXME: Possibly broken code in %s() at %s:%d\n", \ __FUNCTION__, __FILE__, __LINE__); \ } while (0) #endif /* BCM43xx_DEBUGFS_H_ */