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
46extern "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
69void ql_dump_buffer(uint8_t *, uint8_t, uint32_t);
70void ql_el_msg(ql_adapter_state_t *, const char *, int, ...);
71void ql_dbg_msg(const char *, int, ...);
72int ql_flash_errlog(ql_adapter_state_t *, uint16_t, uint16_t, uint16_t,
73    uint16_t);
74void 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 */
268