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