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 2015 QLogic Corporation */ 23 24 /* 25 * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. 26 */ 27 28 #ifndef _QL_DEBUG_H 29 #define _QL_DEBUG_H 30 31 /* 32 * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file. 33 * 34 * *********************************************************************** 35 * * ** 36 * * NOTICE ** 37 * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION ** 38 * * ALL RIGHTS RESERVED ** 39 * * ** 40 * *********************************************************************** 41 * 42 */ 43 44 #ifdef __cplusplus 45 extern "C" { 46 #endif 47 48 /* 49 * Driver debug definitions in makefile. 50 * 51 * QL_DEBUG_LEVEL_1=0x1 52 * QL_DEBUG_LEVEL_2=0x2 Output error msgs. 53 * QL_DEBUG_LEVEL_3=0x4 Output function trace msgs. 54 * QL_DEBUG_LEVEL_4=0x8 Output NVRAM trace msgs. 55 * QL_DEBUG_LEVEL_5=0x10 Output ring trace msgs. 56 * QL_DEBUG_LEVEL_6=0x20 Output WATCHDOG timer trace. 57 * QL_DEBUG_LEVEL_7=0x40 58 * QL_DEBUG_LEVEL_8=0x80 Output ring staturation msgs. 59 * QL_DEBUG_LEVEL_9=0x100 Output IOCTL trace. 60 * QL_DEBUG_LEVEL_10=0x200 61 * QL_DEBUG_LEVEL_11=0x400 62 * QL_DEBUG_LEVEL_12=0x1000 63 * QL_DEBUG_LEVEL_13=0x2000 64 * QL_DEBUG_LEVEL_14=0x4000 65 * QL_DEBUG_LEVEL_15=0x8000 66 */ 67 68 void ql_dump_buffer(uint8_t *, uint8_t, uint32_t); 69 void ql_el_msg(ql_adapter_state_t *, const char *, int, ...); 70 void ql_dbg_msg(ql_adapter_state_t *, const char *, int, ...); 71 int ql_flash_errlog(ql_adapter_state_t *, uint16_t, uint16_t, uint16_t, 72 uint16_t); 73 void ql_dump_el_trace_buffer(ql_adapter_state_t *); 74 75 #if (QL_DEBUG & 0xffff) 76 #define QL_DEBUG_ROUTINES 77 #define QL_BANG 78 #define QL_QUESTION 79 #define QL_CAROT 80 #else 81 #define QL_BANG "!" 82 #define QL_QUESTION "?" 83 #define QL_CAROT "^" 84 #endif 85 86 /* 87 * Macros. 88 */ 89 #define GLOBAL_EL_LOCK() mutex_enter(&ql_global_el_mutex) 90 #define GLOBAL_EL_UNLOCK() mutex_exit(&ql_global_el_mutex) 91 92 #define TRACE_BUFFER_LOCK(ha) mutex_enter(&ha->ql_trace_desc->mutex) 93 #define TRACE_BUFFER_UNLOCK(ha) mutex_exit(&ha->ql_trace_desc->mutex) 94 95 #define EL(ha, ...) ql_el_msg(ha, __func__, CE_CONT, __VA_ARGS__); 96 97 #define ER(s) cmn_err(CE_CONT, QL_BANG "%s", s); 98 #define ERV(s, ...) cmn_err(CE_CONT, QL_BANG s, __VA_ARGS__); 99 100 #define EL_BUFFER_RESERVE 256 101 #define DEBUG_STK_DEPTH 24 102 103 #if QL_DEBUG & 1 104 #define QL_DEBUG_LEVEL_1 105 #define QL_PRINT_1(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 106 #define QL_DUMP_1(bp, wdsize, count) \ 107 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 108 #else 109 #define QL_PRINT_1(...) 110 #define QL_DUMP_1(bp, wdsize, count) 111 #endif 112 113 #ifdef QL_DEBUG_ROUTINES 114 #define QL_DEBUG_LEVEL_2 115 #define QL_PRINT_2(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 116 #define QL_DUMP_2(bp, wdsize, count) \ 117 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 118 #else 119 #define QL_PRINT_2(...) 120 #define QL_DUMP_2(bp, wdsize, count) 121 #endif 122 123 #if QL_DEBUG & 4 124 #define QL_DEBUG_LEVEL_3 125 #define QL_PRINT_3(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 126 #define QL_DUMP_3(bp, wdsize, count) \ 127 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 128 #else 129 #define QL_PRINT_3(...) 130 #define QL_DUMP_3(bp, wdsize, count) 131 #endif 132 133 #if QL_DEBUG & 8 134 #define QL_DEBUG_LEVEL_4 135 #define QL_PRINT_4(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 136 #define QL_DUMP_4(bp, wdsize, count) \ 137 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 138 #else 139 #define QL_PRINT_4(...) 140 #define QL_DUMP_4(bp, wdsize, count) 141 #endif 142 143 #if QL_DEBUG & 0x10 144 #define QL_DEBUG_LEVEL_5 145 #define QL_PRINT_5(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 146 #define QL_DUMP_5(bp, wdsize, count) \ 147 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 148 #else 149 #define QL_PRINT_5(...) 150 #define QL_DUMP_5(bp, wdsize, count) 151 #endif 152 153 #if QL_DEBUG & 0x20 154 #define QL_DEBUG_LEVEL_6 155 #define QL_PRINT_6(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 156 #define QL_DUMP_6(bp, wdsize, count) \ 157 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 158 #else 159 #define QL_PRINT_6(...) 160 #define QL_DUMP_6(bp, wdsize, count) 161 #endif 162 163 #if QL_DEBUG & 0x40 164 #define QL_DEBUG_LEVEL_7 165 #define QL_PRINT_7(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 166 #define QL_DUMP_7(bp, wdsize, count) \ 167 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 168 #else 169 #define QL_PRINT_7(...) 170 #define QL_DUMP_7(bp, wdsize, count) 171 #endif 172 173 #if QL_DEBUG & 0x80 174 #define QL_DEBUG_LEVEL_8 175 #define QL_PRINT_8(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 176 #define QL_DUMP_8(bp, wdsize, count) \ 177 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 178 #else 179 #define QL_PRINT_8(...) 180 #define QL_DUMP_8(bp, wdsize, count) 181 #endif 182 183 #if QL_DEBUG & 0x104 184 #define QL_PRINT_9(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 185 #define QL_DUMP_9(bp, wdsize, count) \ 186 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 187 #else 188 #define QL_PRINT_9(...) 189 #define QL_DUMP_9(bp, wdsize, count) 190 #endif 191 192 #if QL_DEBUG & 0x200 193 #define QL_DEBUG_LEVEL_10 194 #define QL_PRINT_10(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 195 #define QL_DUMP_10(bp, wdsize, count) \ 196 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 197 #else 198 #define QL_PRINT_10(...) 199 #define QL_DUMP_10(bp, wdsize, count) 200 #endif 201 202 #if QL_DEBUG & 0x400 203 #define QL_DEBUG_LEVEL_11 204 #define QL_PRINT_11(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 205 #define QL_DUMP_11(bp, wdsize, count) \ 206 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 207 #else 208 #define QL_PRINT_11(...) 209 #define QL_DUMP_11(bp, wdsize, count) 210 #endif 211 212 #if QL_DEBUG & 0x800 213 #define QL_DEBUG_LEVEL_12 214 #define QL_PRINT_12(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 215 #define QL_DUMP_12(bp, wdsize, count) \ 216 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 217 #else 218 #define QL_PRINT_12(...) 219 #define QL_DUMP_12(bp, wdsize, count) 220 #endif 221 222 #if QL_DEBUG & 0x1000 223 #define QL_DEBUG_LEVEL_13 224 #define QL_PRINT_13(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 225 #define QL_DUMP_13(bp, wdsize, count) \ 226 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 227 #else 228 #define QL_PRINT_13(...) 229 #define QL_DUMP_13(bp, wdsize, count) 230 #endif 231 232 #if QL_DEBUG & 0x2000 233 #define QL_DEBUG_LEVEL_14 234 #define QL_PRINT_14(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 235 #define QL_DUMP_14(bp, wdsize, count) \ 236 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 237 #else 238 #define QL_PRINT_14(...) 239 #define QL_DUMP_14(bp, wdsize, count) 240 #endif 241 242 #if QL_DEBUG & 0x4000 243 #define QL_DEBUG_LEVEL_15 244 #define QL_PRINT_15(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 245 #define QL_DUMP_15(bp, wdsize, count) \ 246 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 247 #else 248 #define QL_PRINT_15(...) 249 #define QL_DUMP_15(bp, wdsize, count) 250 #endif 251 252 #if QL_DEBUG & 0x8000 253 #define QL_DEBUG_LEVEL_16 254 #define QL_PRINT_16(ha, ...) ql_dbg_msg(ha, __func__, CE_CONT, __VA_ARGS__) 255 #define QL_DUMP_16(bp, wdsize, count) \ 256 ql_dump_buffer((uint8_t *)bp, (uint8_t)wdsize, (uint32_t)count) 257 #else 258 #define QL_PRINT_16(...) 259 #define QL_DUMP_16(bp, wdsize, count) 260 #endif 261 262 #ifdef __cplusplus 263 } 264 #endif 265 266 #endif /* _QL_DEBUG_H */ 267