1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /* Copyright 2009 QLogic Corporation */
  23 
  24 /*
  25  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29 #ifndef _QL_DEBUG_H
  30 #define _QL_DEBUG_H
  31 
  32 /*
  33  * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
  34  *
  35  * ***********************************************************************
  36  * *                                                                    **
  37  * *                            NOTICE                                  **
  38  * *            COPYRIGHT (C) 1996-2009 QLOGIC CORPORATION              **
  39  * *                    ALL RIGHTS RESERVED                             **
  40  * *                                                                    **
  41  * ***********************************************************************
  42  *
  43  */
  44 
  45 #ifdef  __cplusplus
  46 extern "C" {
  47 #endif
  48 
  49 /*
  50  * Driver debug definitions in makefile.
  51  *
  52  * QL_DEBUG_LEVEL_1=0x1
  53  * QL_DEBUG_LEVEL_2=0x2         Output error msgs.
  54  * QL_DEBUG_LEVEL_3=0x4         Output function trace msgs.
  55  * QL_DEBUG_LEVEL_4=0x8         Output NVRAM trace msgs.
  56  * QL_DEBUG_LEVEL_5=0x10        Output ring trace msgs.
  57  * QL_DEBUG_LEVEL_6=0x20        Output WATCHDOG timer trace.
  58  * QL_DEBUG_LEVEL_7=0x40
  59  * QL_DEBUG_LEVEL_8=0x80        Output ring staturation msgs.
  60  * QL_DEBUG_LEVEL_9=0x100       Output IOCTL trace.
  61  * QL_DEBUG_LEVEL_10=0x200
  62  * QL_DEBUG_LEVEL_11=0x400
  63  * QL_DEBUG_LEVEL_12=0x1000
  64  * QL_DEBUG_LEVEL_13=0x2000
  65  * QL_DEBUG_LEVEL_14=0x4000
  66  * QL_DEBUG_LEVEL_15=0x8000
  67  */
  68 
  69 void ql_dump_buffer(uint8_t *, uint8_t, uint32_t);
  70 void ql_el_msg(ql_adapter_state_t *, const char *, int, ...);
  71 void ql_dbg_msg(const char *, int, ...);
  72 int ql_flash_errlog(ql_adapter_state_t *, uint16_t, uint16_t, uint16_t,
  73     uint16_t);
  74 void ql_dump_el_trace_buffer(ql_adapter_state_t *);
  75 
  76 #if (QL_DEBUG & 0xffff)
  77 #define QL_DEBUG_ROUTINES
  78 #define QL_BANG
  79 #define QL_QUESTION
  80 #define QL_CAROT
  81 #else
  82 #define QL_BANG         "!"
  83 #define QL_QUESTION     "?"
  84 #define QL_CAROT        "^"
  85 #endif
  86 
  87 /*
  88  * Macros.
  89  */
  90 #define GLOBAL_EL_LOCK()        mutex_enter(&ql_global_el_mutex)
  91 #define GLOBAL_EL_UNLOCK()      mutex_exit(&ql_global_el_mutex)
  92 
  93 #define TRACE_BUFFER_LOCK(ha)   mutex_enter(&ha->el_trace_desc->mutex)
  94 #define TRACE_BUFFER_UNLOCK(ha) mutex_exit(&ha->el_trace_desc->mutex)
  95 
  96 #define EL(ha, ...)             ql_el_msg(ha, __func__, CE_CONT, __VA_ARGS__);
  97 
  98 #define ER(s)                   cmn_err(CE_CONT, QL_BANG "%s", s);
  99 #define ERV(s, ...)             cmn_err(CE_CONT, QL_BANG s, __VA_ARGS__);
 100 
 101 #define EL_BUFFER_RESERVE       256
 102 #define DEBUG_STK_DEPTH         24
 103 
 104 #if QL_DEBUG & 1
 105 #define QL_DEBUG_LEVEL_1
 106 #define QL_PRINT_1(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 107 #define QL_DUMP_1(bp, wdsize, count) \
 108         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 109 #else
 110 #define QL_PRINT_1(...)
 111 #define QL_DUMP_1(bp, wdsize, count)
 112 #endif
 113 
 114 #ifdef QL_DEBUG_ROUTINES
 115 #define QL_DEBUG_LEVEL_2
 116 #define QL_PRINT_2(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 117 #define QL_DUMP_2(bp, wdsize, count) \
 118         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 119 #else
 120 #define QL_PRINT_2(...)
 121 #define QL_DUMP_2(bp, wdsize, count)
 122 #endif
 123 
 124 #if QL_DEBUG & 4
 125 #define QL_DEBUG_LEVEL_3
 126 #define QL_PRINT_3(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 127 #define QL_DUMP_3(bp, wdsize, count) \
 128         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 129 #else
 130 #define QL_PRINT_3(...)
 131 #define QL_DUMP_3(bp, wdsize, count)
 132 #endif
 133 
 134 #if QL_DEBUG & 8
 135 #define QL_DEBUG_LEVEL_4
 136 #define QL_PRINT_4(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 137 #define QL_DUMP_4(bp, wdsize, count) \
 138         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 139 #else
 140 #define QL_PRINT_4(...)
 141 #define QL_DUMP_4(bp, wdsize, count)
 142 #endif
 143 
 144 #if QL_DEBUG & 0x10
 145 #define QL_DEBUG_LEVEL_5
 146 #define QL_PRINT_5(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 147 #define QL_DUMP_5(bp, wdsize, count) \
 148         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 149 #else
 150 #define QL_PRINT_5(...)
 151 #define QL_DUMP_5(bp, wdsize, count)
 152 #endif
 153 
 154 #if QL_DEBUG & 0x20
 155 #define QL_DEBUG_LEVEL_6
 156 #define QL_PRINT_6(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 157 #define QL_DUMP_6(bp, wdsize, count) \
 158         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 159 #else
 160 #define QL_PRINT_6(...)
 161 #define QL_DUMP_6(bp, wdsize, count)
 162 #endif
 163 
 164 #if QL_DEBUG & 0x40
 165 #define QL_DEBUG_LEVEL_7
 166 #define QL_PRINT_7(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 167 #define QL_DUMP_7(bp, wdsize, count) \
 168         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 169 #else
 170 #define QL_PRINT_7(...)
 171 #define QL_DUMP_7(bp, wdsize, count)
 172 #endif
 173 
 174 #if QL_DEBUG & 0x80
 175 #define QL_DEBUG_LEVEL_8
 176 #define QL_PRINT_8(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 177 #define QL_DUMP_8(bp, wdsize, count) \
 178         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 179 #else
 180 #define QL_PRINT_8(...)
 181 #define QL_DUMP_8(bp, wdsize, count)
 182 #endif
 183 
 184 #if QL_DEBUG & 0x104
 185 #define QL_PRINT_9(ce, ...)     ql_dbg_msg(__func__, ce, __VA_ARGS__)
 186 #define QL_DUMP_9(bp, wdsize, count) \
 187         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 188 #else
 189 #define QL_PRINT_9(...)
 190 #define QL_DUMP_9(bp, wdsize, count)
 191 #endif
 192 
 193 #if QL_DEBUG & 0x200
 194 #define QL_DEBUG_LEVEL_10
 195 #define QL_PRINT_10(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 196 #define QL_DUMP_10(bp, wdsize, count) \
 197         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 198 #else
 199 #define QL_PRINT_10(...)
 200 #define QL_DUMP_10(bp, wdsize, count)
 201 #endif
 202 
 203 #if QL_DEBUG & 0x400
 204 #define QL_DEBUG_LEVEL_11
 205 #define QL_PRINT_11(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 206 #define QL_DUMP_11(bp, wdsize, count) \
 207         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 208 #else
 209 #define QL_PRINT_11(...)
 210 #define QL_DUMP_11(bp, wdsize, count)
 211 #endif
 212 
 213 #if QL_DEBUG & 0x800
 214 #define QL_DEBUG_LEVEL_12
 215 #define QL_PRINT_12(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 216 #define QL_DUMP_12(bp, wdsize, count) \
 217         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 218 #else
 219 #define QL_PRINT_12(...)
 220 #define QL_DUMP_12(bp, wdsize, count)
 221 #endif
 222 
 223 #if QL_DEBUG & 0x1000
 224 #define QL_DEBUG_LEVEL_13
 225 #define QL_PRINT_13(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 226 #define QL_DUMP_13(bp, wdsize, count) \
 227         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 228 #else
 229 #define QL_PRINT_13(...)
 230 #define QL_DUMP_13(bp, wdsize, count)
 231 #endif
 232 
 233 #if QL_DEBUG & 0x2000
 234 #define QL_DEBUG_LEVEL_14
 235 #define QL_PRINT_14(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 236 #define QL_DUMP_14(bp, wdsize, count) \
 237         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 238 #else
 239 #define QL_PRINT_14(...)
 240 #define QL_DUMP_14(bp, wdsize, count)
 241 #endif
 242 
 243 #if QL_DEBUG & 0x4000
 244 #define QL_DEBUG_LEVEL_15
 245 #define QL_PRINT_15(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 246 #define QL_DUMP_15(bp, wdsize, count) \
 247         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 248 #else
 249 #define QL_PRINT_15(...)
 250 #define QL_DUMP_15(bp, wdsize, count)
 251 #endif
 252 
 253 #if QL_DEBUG & 0x8000
 254 #define QL_DEBUG_LEVEL_16
 255 #define QL_PRINT_16(ce, ...)    ql_dbg_msg(__func__, ce, __VA_ARGS__)
 256 #define QL_DUMP_16(bp, wdsize, count) \
 257         ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count)
 258 #else
 259 #define QL_PRINT_16(...)
 260 #define QL_DUMP_16(bp, wdsize, count)
 261 #endif
 262 
 263 #ifdef  __cplusplus
 264 }
 265 #endif
 266 
 267 #endif /* _QL_DEBUG_H */