|  | /* | 
|  | * Ultra Wide Band | 
|  | * Debug Support | 
|  | * | 
|  | * Copyright (C) 2005-2006 Intel Corporation | 
|  | * Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com> | 
|  | * | 
|  | * This program is free software; you can redistribute it and/or | 
|  | * modify it under the terms of the GNU General Public License version | 
|  | * 2 as published by the Free Software Foundation. | 
|  | * | 
|  | * This program is distributed in the hope that it will be useful, | 
|  | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
|  | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
|  | * GNU General Public License for more details. | 
|  | * | 
|  | * You should have received a copy of the GNU General Public License | 
|  | * along with this program; if not, write to the Free Software | 
|  | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA | 
|  | * 02110-1301, USA. | 
|  | * | 
|  | * | 
|  | * FIXME: doc | 
|  | * Invoke like: | 
|  | * | 
|  | * #define D_LOCAL 4 | 
|  | * #include <linux/uwb/debug.h> | 
|  | * | 
|  | * At the end of your include files. | 
|  | */ | 
|  | #include <linux/types.h> | 
|  |  | 
|  | struct device; | 
|  | extern void dump_bytes(struct device *dev, const void *_buf, size_t rsize); | 
|  |  | 
|  | /* Master debug switch; !0 enables, 0 disables */ | 
|  | #define D_MASTER (!0) | 
|  |  | 
|  | /* Local (per-file) debug switch; #define before #including */ | 
|  | #ifndef D_LOCAL | 
|  | #define D_LOCAL 0 | 
|  | #endif | 
|  |  | 
|  | #undef __d_printf | 
|  | #undef d_fnstart | 
|  | #undef d_fnend | 
|  | #undef d_printf | 
|  | #undef d_dump | 
|  |  | 
|  | #define __d_printf(l, _tag, _dev, f, a...)				\ | 
|  | do {									\ | 
|  | struct device *__dev = (_dev);					\ | 
|  | if (D_MASTER && D_LOCAL >= (l)) {				\ | 
|  | char __head[64] = "";					\ | 
|  | if (_dev != NULL) {					\ | 
|  | if ((unsigned long)__dev < 4096)		\ | 
|  | printk(KERN_ERR "E: Corrupt dev %p\n",	\ | 
|  | __dev);				\ | 
|  | else						\ | 
|  | snprintf(__head, sizeof(__head),	\ | 
|  | "%s %s: ",			\ | 
|  | dev_driver_string(__dev),	\ | 
|  | __dev->bus_id);		\ | 
|  | }							\ | 
|  | printk(KERN_ERR "%s%s" _tag ": " f, __head,		\ | 
|  | __func__, ## a);				\ | 
|  | }								\ | 
|  | } while (0 && _dev) | 
|  |  | 
|  | #define d_fnstart(l, _dev, f, a...)	\ | 
|  | __d_printf(l, " FNSTART", _dev, f, ## a) | 
|  | #define d_fnend(l, _dev, f, a...)	\ | 
|  | __d_printf(l, " FNEND", _dev, f, ## a) | 
|  | #define d_printf(l, _dev, f, a...)	\ | 
|  | __d_printf(l, "", _dev, f, ## a) | 
|  | #define d_dump(l, _dev, ptr, size)		\ | 
|  | do {						\ | 
|  | struct device *__dev = _dev;		\ | 
|  | if (D_MASTER && D_LOCAL >= (l))		\ | 
|  | dump_bytes(__dev, ptr, size);	\ | 
|  | } while (0 && _dev) | 
|  | #define d_test(l) (D_MASTER && D_LOCAL >= (l)) |