1 /******************************************************************************* 2 * Agere Systems Inc. 3 * Wireless device driver for Linux (wlags49). 4 * 5 * Copyright (c) 1998-2003 Agere Systems Inc. 6 * All rights reserved. 7 * http://www.agere.com 8 * 9 * Initially developed by TriplePoint, Inc. 10 * http://www.triplepoint.com 11 * 12 *------------------------------------------------------------------------------ 13 * 14 * This file contains definitions and macros for debugging. 15 * 16 *------------------------------------------------------------------------------ 17 * 18 * SOFTWARE LICENSE 19 * 20 * This software is provided subject to the following terms and conditions, 21 * which you should read carefully before using the software. Using this 22 * software indicates your acceptance of these terms and conditions. If you do 23 * not agree with these terms and conditions, do not use the software. 24 * 25 * Copyright (c) 2003 Agere Systems Inc. 26 * All rights reserved. 27 * 28 * Redistribution and use in source or binary forms, with or without 29 * modifications, are permitted provided that the following conditions are met: 30 * 31 * . Redistributions of source code must retain the above copyright notice, this 32 * list of conditions and the following Disclaimer as comments in the code as 33 * well as in the documentation and/or other materials provided with the 34 * distribution. 35 * 36 * . Redistributions in binary form must reproduce the above copyright notice, 37 * this list of conditions and the following Disclaimer in the documentation 38 * and/or other materials provided with the distribution. 39 * 40 * . Neither the name of Agere Systems Inc. nor the names of the contributors 41 * may be used to endorse or promote products derived from this software 42 * without specific prior written permission. 43 * 44 * Disclaimer 45 * 46 * THIS SOFTWARE IS PROVIDED �AS IS� AND ANY EXPRESS OR IMPLIED WARRANTIES, 47 * INCLUDING, BUT NOT LIMITED TO, INFRINGEMENT AND THE IMPLIED WARRANTIES OF 48 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ANY 49 * USE, MODIFICATION OR DISTRIBUTION OF THIS SOFTWARE IS SOLELY AT THE USERS OWN 50 * RISK. IN NO EVENT SHALL AGERE SYSTEMS INC. OR CONTRIBUTORS BE LIABLE FOR ANY 51 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 52 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 53 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 54 * ON ANY THEORY OF LIABILITY, INCLUDING, BUT NOT LIMITED TO, CONTRACT, STRICT 55 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 56 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 57 * DAMAGE. 58 * 59 ******************************************************************************/ 60 61 #ifndef _DEBUG_H 62 #define _DEBUG_H 63 64 65 66 67 /* Turn on debugging here if not done with a preprocessor define */ 68 #ifndef DBG 69 #define DBG 0 70 #else 71 #undef DBG 72 #define DBG 1 73 #endif /* DBG */ 74 75 76 77 78 #if DBG 79 /****************************************************************************/ 80 81 /* Set the level of debugging if not done with a preprocessor define. See 82 wl_main.c, init_module() for how the debug level translates into the 83 the types of messages displayed */ 84 #ifndef DBG_LVL 85 #define DBG_LVL 5 /* yields nothing via init_module, 86 original value of 5 yields DBG_TRACE_ON and DBG_VERBOSE_ON */ 87 #endif /* DBG_LVL*/ 88 89 90 #define DBG_ERROR_ON 0x00000001L 91 #define DBG_WARNING_ON 0x00000002L 92 #define DBG_NOTICE_ON 0x00000004L 93 #define DBG_TRACE_ON 0x00000008L 94 #define DBG_VERBOSE_ON 0x00000010L 95 #define DBG_PARAM_ON 0x00000020L 96 #define DBG_BREAK_ON 0x00000040L 97 #define DBG_RX_ON 0x00000100L 98 #define DBG_TX_ON 0x00000200L 99 #define DBG_DS_ON 0x00000400L 100 101 #define DBG_DEFAULTS (DBG_ERROR_ON | DBG_WARNING_ON | DBG_BREAK_ON) 102 103 #define DBG_FLAGS(A) ((A)->DebugFlag) 104 #define DBG_NAME(A) ((A)->dbgName) 105 #define DBG_LEVEL(A) ((A)->dbgLevel) 106 107 108 #ifndef PRINTK 109 # define PRINTK(S...) printk(S) 110 #endif /* PRINTK */ 111 112 113 #ifndef DBG_PRINT 114 # define DBG_PRINT(S...) PRINTK(KERN_DEBUG S) 115 #endif /* DBG_PRINT */ 116 117 118 #ifndef DBG_PRINTC 119 # define DBG_PRINTC(S...) PRINTK(S) 120 #endif /* DBG_PRINTC */ 121 122 123 #ifndef DBG_TRAP 124 # define DBG_TRAP {} 125 #endif /* DBG_TRAP */ 126 127 128 #define _ENTER_STR ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" 129 #define _LEAVE_STR "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<" 130 131 132 #define _DBG_ENTER(A) DBG_PRINT("%s:%.*s:%s\n", DBG_NAME(A), ++DBG_LEVEL(A), _ENTER_STR, __FUNC__) 133 #define _DBG_LEAVE(A) DBG_PRINT("%s:%.*s:%s\n", DBG_NAME(A), DBG_LEVEL(A)--, _LEAVE_STR, __FUNC__) 134 135 136 #define DBG_FUNC(F) static const char *__FUNC__ = F; 137 138 #define DBG_ENTER(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) \ 139 _DBG_ENTER(A); } 140 141 #define DBG_LEAVE(A) {if (DBG_FLAGS(A) & DBG_TRACE_ON) \ 142 _DBG_LEAVE(A); } 143 144 #define DBG_PARAM(A, N, F, S...) {if (DBG_FLAGS(A) & DBG_PARAM_ON) \ 145 DBG_PRINT(" %s -- "F"\n", N, S); } 146 147 148 #define DBG_ERROR(A, S...) {if (DBG_FLAGS(A) & DBG_ERROR_ON) {\ 149 DBG_PRINT("%s:ERROR:%s ", DBG_NAME(A), __FUNC__);\ 150 DBG_PRINTC(S); \ 151 DBG_TRAP; \ 152 } \ 153 } 154 155 156 #define DBG_WARNING(A, S...) {if (DBG_FLAGS(A) & DBG_WARNING_ON) {\ 157 DBG_PRINT("%s:WARNING:%s ", DBG_NAME(A), __FUNC__);\ 158 DBG_PRINTC(S); } } 159 160 161 #define DBG_NOTICE(A, S...) {if (DBG_FLAGS(A) & DBG_NOTICE_ON) {\ 162 DBG_PRINT("%s:NOTICE:%s ", DBG_NAME(A), __FUNC__);\ 163 DBG_PRINTC(S); \ 164 } \ 165 } 166 167 168 #define DBG_TRACE(A, S...) do {if (DBG_FLAGS(A) & DBG_TRACE_ON) {\ 169 DBG_PRINT("%s:%s ", DBG_NAME(A), __FUNC__);\ 170 DBG_PRINTC(S); } } while (0) 171 172 173 #define DBG_RX(A, S...) {if (DBG_FLAGS(A) & DBG_RX_ON) {\ 174 DBG_PRINT(S); } } 175 176 177 #define DBG_TX(A, S...) {if (DBG_FLAGS(A) & DBG_TX_ON) {\ 178 DBG_PRINT(S); } } 179 180 #define DBG_DS(A, S...) {if (DBG_FLAGS(A) & DBG_DS_ON) {\ 181 DBG_PRINT(S); } } 182 183 184 #define DBG_ASSERT(C) { \ 185 if (!(C)) {\ 186 DBG_PRINT("ASSERT(%s) -- %s#%d (%s)\n", \ 187 #C, __FILE__, __LINE__, __FUNC__); \ 188 DBG_TRAP; \ 189 } \ 190 } 191 192 typedef struct { 193 char *dbgName; 194 int dbgLevel; 195 unsigned long DebugFlag; 196 } dbg_info_t; 197 198 199 /****************************************************************************/ 200 #else /* DBG */ 201 /****************************************************************************/ 202 203 #define DBG_DEFN 204 #define DBG_TRAP 205 #define DBG_FUNC(F) 206 #define DBG_PRINT(S...) 207 #define DBG_ENTER(A) 208 #define DBG_LEAVE(A) 209 #define DBG_PARAM(A, N, F, S...) 210 #define DBG_ERROR(A, S...) 211 #define DBG_WARNING(A, S...) 212 #define DBG_NOTICE(A, S...) 213 #define DBG_TRACE(A, S...) 214 #define DBG_RX(A, S...) 215 #define DBG_TX(A, S...) 216 #define DBG_DS(A, S...) 217 #define DBG_ASSERT(C) 218 219 #endif /* DBG */ 220 /****************************************************************************/ 221 222 223 224 225 #endif /* _DEBUG_H */ 226 227