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