• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/pci/asihpi/
1/*****************************************************************************
2
3    AudioScience HPI driver
4    Copyright (C) 1997-2010  AudioScience Inc. <support@audioscience.com>
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of version 2 of the GNU General Public License as
8    published by the Free Software Foundation;
9
10    This program is distributed in the hope that it will be useful,
11    but WITHOUT ANY WARRANTY; without even the implied warranty of
12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13    GNU General Public License for more details.
14
15    You should have received a copy of the GNU General Public License
16    along with this program; if not, write to the Free Software
17    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19Debug macros.
20
21*****************************************************************************/
22
23#ifndef _HPIDEBUG_H
24#define _HPIDEBUG_H
25
26#include "hpi_internal.h"
27
28/* Define debugging levels.  */
29enum { HPI_DEBUG_LEVEL_ERROR = 0,	/* always log errors */
30	HPI_DEBUG_LEVEL_WARNING = 1,
31	HPI_DEBUG_LEVEL_NOTICE = 2,
32	HPI_DEBUG_LEVEL_INFO = 3,
33	HPI_DEBUG_LEVEL_DEBUG = 4,
34	HPI_DEBUG_LEVEL_VERBOSE = 5	/* same printk level as DEBUG */
35};
36
37#define HPI_DEBUG_LEVEL_DEFAULT HPI_DEBUG_LEVEL_NOTICE
38
39/* an OS can define an extra flag string that is appended to
40   the start of each message, eg see hpios_linux.h */
41
42#ifdef SOURCEFILE_NAME
43#define FILE_LINE  SOURCEFILE_NAME ":" __stringify(__LINE__) " "
44#else
45#define FILE_LINE  __FILE__ ":" __stringify(__LINE__) " "
46#endif
47
48#if defined(HPI_DEBUG) && defined(_WINDOWS)
49#define HPI_DEBUGBREAK() debug_break()
50#else
51#define HPI_DEBUGBREAK()
52#endif
53
54#define HPI_DEBUG_ASSERT(expression) \
55	do { \
56		if (!(expression)) {\
57			printk(KERN_ERR  FILE_LINE\
58				"ASSERT " __stringify(expression));\
59			HPI_DEBUGBREAK();\
60		} \
61	} while (0)
62
63#define HPI_DEBUG_LOG(level, ...) \
64	do { \
65		if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \
66			printk(HPI_DEBUG_FLAG_##level \
67			FILE_LINE  __VA_ARGS__); \
68		} \
69	} while (0)
70
71void hpi_debug_init(void);
72int hpi_debug_level_set(int level);
73int hpi_debug_level_get(void);
74/* needed by Linux driver for dynamic debug level changes */
75extern int hpi_debug_level;
76
77void hpi_debug_message(struct hpi_message *phm, char *sz_fileline);
78
79void hpi_debug_data(u16 *pdata, u32 len);
80
81#define HPI_DEBUG_DATA(pdata, len)                                      \
82	do {                                                            \
83		if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \
84			hpi_debug_data(pdata, len); \
85	} while (0)
86
87#define HPI_DEBUG_MESSAGE(level, phm)                                   \
88	do {                                                            \
89		if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) {         \
90			hpi_debug_message(phm,HPI_DEBUG_FLAG_##level    \
91				FILE_LINE __stringify(level));\
92		}                                                       \
93	} while (0)
94
95#define HPI_DEBUG_RESPONSE(phr)                                         \
96	do {                                                            \
97		if ((hpi_debug_level >= HPI_DEBUG_LEVEL_DEBUG) && (phr->error))\
98			HPI_DEBUG_LOG(ERROR, \
99				"HPI response - error# %d\n", \
100				phr->error); \
101		else if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \
102			HPI_DEBUG_LOG(VERBOSE, "HPI response OK\n");\
103	} while (0)
104
105#ifndef compile_time_assert
106#define compile_time_assert(cond, msg) \
107    typedef char msg[(cond) ? 1 : -1]
108#endif
109
110	  /* check that size is exactly some number */
111#define function_count_check(sym, size) \
112    compile_time_assert((sym##_FUNCTION_COUNT) == (size),\
113	    strings_match_defs_##sym)
114
115/* These strings should be generated using a macro which defines
116   the corresponding symbol values.  */
117#define HPI_OBJ_STRINGS \
118{                               \
119  "HPI_OBJ_SUBSYSTEM",        \
120  "HPI_OBJ_ADAPTER",          \
121  "HPI_OBJ_OSTREAM",          \
122  "HPI_OBJ_ISTREAM",          \
123  "HPI_OBJ_MIXER",            \
124  "HPI_OBJ_NODE",             \
125  "HPI_OBJ_CONTROL",          \
126  "HPI_OBJ_NVMEMORY",         \
127  "HPI_OBJ_DIGITALIO",        \
128  "HPI_OBJ_WATCHDOG",         \
129  "HPI_OBJ_CLOCK",            \
130  "HPI_OBJ_PROFILE",          \
131  "HPI_OBJ_CONTROLEX"         \
132}
133
134#define HPI_SUBSYS_STRINGS      \
135{                               \
136  "HPI_SUBSYS_OPEN",          \
137  "HPI_SUBSYS_GET_VERSION",   \
138  "HPI_SUBSYS_GET_INFO",      \
139  "HPI_SUBSYS_FIND_ADAPTERS", \
140  "HPI_SUBSYS_CREATE_ADAPTER",\
141  "HPI_SUBSYS_CLOSE",         \
142  "HPI_SUBSYS_DELETE_ADAPTER", \
143  "HPI_SUBSYS_DRIVER_LOAD", \
144  "HPI_SUBSYS_DRIVER_UNLOAD", \
145  "HPI_SUBSYS_READ_PORT_8",   \
146  "HPI_SUBSYS_WRITE_PORT_8",  \
147  "HPI_SUBSYS_GET_NUM_ADAPTERS",\
148  "HPI_SUBSYS_GET_ADAPTER",   \
149  "HPI_SUBSYS_SET_NETWORK_INTERFACE"\
150}
151function_count_check(HPI_SUBSYS, 14);
152
153#define HPI_ADAPTER_STRINGS     \
154{                               \
155  "HPI_ADAPTER_OPEN",         \
156  "HPI_ADAPTER_CLOSE",        \
157  "HPI_ADAPTER_GET_INFO",     \
158  "HPI_ADAPTER_GET_ASSERT",   \
159  "HPI_ADAPTER_TEST_ASSERT",    \
160  "HPI_ADAPTER_SET_MODE",       \
161  "HPI_ADAPTER_GET_MODE",       \
162  "HPI_ADAPTER_ENABLE_CAPABILITY",\
163  "HPI_ADAPTER_SELFTEST",        \
164  "HPI_ADAPTER_FIND_OBJECT",     \
165  "HPI_ADAPTER_QUERY_FLASH",     \
166  "HPI_ADAPTER_START_FLASH",     \
167  "HPI_ADAPTER_PROGRAM_FLASH",   \
168  "HPI_ADAPTER_SET_PROPERTY",    \
169  "HPI_ADAPTER_GET_PROPERTY",    \
170  "HPI_ADAPTER_ENUM_PROPERTY",    \
171  "HPI_ADAPTER_MODULE_INFO",    \
172  "HPI_ADAPTER_DEBUG_READ"    \
173}
174
175function_count_check(HPI_ADAPTER, 18);
176
177#define HPI_OSTREAM_STRINGS     \
178{                               \
179  "HPI_OSTREAM_OPEN",         \
180  "HPI_OSTREAM_CLOSE",        \
181  "HPI_OSTREAM_WRITE",        \
182  "HPI_OSTREAM_START",        \
183  "HPI_OSTREAM_STOP",         \
184  "HPI_OSTREAM_RESET",                \
185  "HPI_OSTREAM_GET_INFO",     \
186  "HPI_OSTREAM_QUERY_FORMAT", \
187  "HPI_OSTREAM_DATA",         \
188  "HPI_OSTREAM_SET_VELOCITY", \
189  "HPI_OSTREAM_SET_PUNCHINOUT", \
190  "HPI_OSTREAM_SINEGEN",        \
191  "HPI_OSTREAM_ANC_RESET",      \
192  "HPI_OSTREAM_ANC_GET_INFO",   \
193  "HPI_OSTREAM_ANC_READ",       \
194  "HPI_OSTREAM_SET_TIMESCALE",\
195  "HPI_OSTREAM_SET_FORMAT", \
196  "HPI_OSTREAM_HOSTBUFFER_ALLOC", \
197  "HPI_OSTREAM_HOSTBUFFER_FREE", \
198  "HPI_OSTREAM_GROUP_ADD",\
199  "HPI_OSTREAM_GROUP_GETMAP", \
200  "HPI_OSTREAM_GROUP_RESET", \
201  "HPI_OSTREAM_HOSTBUFFER_GET_INFO", \
202  "HPI_OSTREAM_WAIT_START", \
203}
204function_count_check(HPI_OSTREAM, 24);
205
206#define HPI_ISTREAM_STRINGS     \
207{                               \
208  "HPI_ISTREAM_OPEN",         \
209  "HPI_ISTREAM_CLOSE",        \
210  "HPI_ISTREAM_SET_FORMAT",   \
211  "HPI_ISTREAM_READ",         \
212  "HPI_ISTREAM_START",        \
213  "HPI_ISTREAM_STOP",         \
214  "HPI_ISTREAM_RESET",        \
215  "HPI_ISTREAM_GET_INFO",     \
216  "HPI_ISTREAM_QUERY_FORMAT", \
217  "HPI_ISTREAM_ANC_RESET",      \
218  "HPI_ISTREAM_ANC_GET_INFO",   \
219  "HPI_ISTREAM_ANC_WRITE",   \
220  "HPI_ISTREAM_HOSTBUFFER_ALLOC",\
221  "HPI_ISTREAM_HOSTBUFFER_FREE", \
222  "HPI_ISTREAM_GROUP_ADD", \
223  "HPI_ISTREAM_GROUP_GETMAP", \
224  "HPI_ISTREAM_GROUP_RESET", \
225  "HPI_ISTREAM_HOSTBUFFER_GET_INFO", \
226  "HPI_ISTREAM_WAIT_START", \
227}
228function_count_check(HPI_ISTREAM, 19);
229
230#define HPI_MIXER_STRINGS       \
231{                               \
232  "HPI_MIXER_OPEN",           \
233  "HPI_MIXER_CLOSE",          \
234  "HPI_MIXER_GET_INFO",       \
235  "HPI_MIXER_GET_NODE_INFO",  \
236  "HPI_MIXER_GET_CONTROL",    \
237  "HPI_MIXER_SET_CONNECTION", \
238  "HPI_MIXER_GET_CONNECTIONS",        \
239  "HPI_MIXER_GET_CONTROL_BY_INDEX",   \
240  "HPI_MIXER_GET_CONTROL_ARRAY_BY_INDEX",     \
241  "HPI_MIXER_GET_CONTROL_MULTIPLE_VALUES",    \
242  "HPI_MIXER_STORE",  \
243}
244function_count_check(HPI_MIXER, 11);
245
246#define HPI_CONTROL_STRINGS     \
247{                               \
248  "HPI_CONTROL_GET_INFO",     \
249  "HPI_CONTROL_GET_STATE",    \
250  "HPI_CONTROL_SET_STATE"     \
251}
252function_count_check(HPI_CONTROL, 3);
253
254#define HPI_NVMEMORY_STRINGS    \
255{                               \
256  "HPI_NVMEMORY_OPEN",        \
257  "HPI_NVMEMORY_READ_BYTE",   \
258  "HPI_NVMEMORY_WRITE_BYTE"   \
259}
260function_count_check(HPI_NVMEMORY, 3);
261
262#define HPI_DIGITALIO_STRINGS   \
263{                               \
264  "HPI_GPIO_OPEN",            \
265  "HPI_GPIO_READ_BIT",        \
266  "HPI_GPIO_WRITE_BIT",       \
267  "HPI_GPIO_READ_ALL",                \
268  "HPI_GPIO_WRITE_STATUS"\
269}
270function_count_check(HPI_GPIO, 5);
271
272#define HPI_WATCHDOG_STRINGS    \
273{                               \
274  "HPI_WATCHDOG_OPEN",        \
275  "HPI_WATCHDOG_SET_TIME",    \
276  "HPI_WATCHDOG_PING"         \
277}
278
279#define HPI_CLOCK_STRINGS       \
280{                               \
281  "HPI_CLOCK_OPEN",           \
282  "HPI_CLOCK_SET_TIME",       \
283  "HPI_CLOCK_GET_TIME"        \
284}
285
286#define HPI_PROFILE_STRINGS     \
287{                               \
288  "HPI_PROFILE_OPEN_ALL",     \
289  "HPI_PROFILE_START_ALL",    \
290  "HPI_PROFILE_STOP_ALL",     \
291  "HPI_PROFILE_GET",          \
292  "HPI_PROFILE_GET_IDLECOUNT",  \
293  "HPI_PROFILE_GET_NAME",       \
294  "HPI_PROFILE_GET_UTILIZATION" \
295}
296function_count_check(HPI_PROFILE, 7);
297
298#define HPI_ASYNCEVENT_STRINGS  \
299{                               \
300  "HPI_ASYNCEVENT_OPEN",\
301  "HPI_ASYNCEVENT_CLOSE  ",\
302  "HPI_ASYNCEVENT_WAIT",\
303  "HPI_ASYNCEVENT_GETCOUNT",\
304  "HPI_ASYNCEVENT_GET",\
305  "HPI_ASYNCEVENT_SENDEVENTS"\
306}
307function_count_check(HPI_ASYNCEVENT, 6);
308
309#define HPI_CONTROL_TYPE_STRINGS \
310{ \
311	"null control", \
312	"HPI_CONTROL_CONNECTION", \
313	"HPI_CONTROL_VOLUME", \
314	"HPI_CONTROL_METER", \
315	"HPI_CONTROL_MUTE", \
316	"HPI_CONTROL_MULTIPLEXER", \
317	"HPI_CONTROL_AESEBU_TRANSMITTER", \
318	"HPI_CONTROL_AESEBU_RECEIVER", \
319	"HPI_CONTROL_LEVEL", \
320	"HPI_CONTROL_TUNER", \
321	"HPI_CONTROL_ONOFFSWITCH", \
322	"HPI_CONTROL_VOX", \
323	"HPI_CONTROL_AES18_TRANSMITTER", \
324	"HPI_CONTROL_AES18_RECEIVER", \
325	"HPI_CONTROL_AES18_BLOCKGENERATOR", \
326	"HPI_CONTROL_CHANNEL_MODE", \
327	"HPI_CONTROL_BITSTREAM", \
328	"HPI_CONTROL_SAMPLECLOCK", \
329	"HPI_CONTROL_MICROPHONE", \
330	"HPI_CONTROL_PARAMETRIC_EQ", \
331	"HPI_CONTROL_COMPANDER", \
332	"HPI_CONTROL_COBRANET", \
333	"HPI_CONTROL_TONE_DETECT", \
334	"HPI_CONTROL_SILENCE_DETECT", \
335	"HPI_CONTROL_PAD", \
336	"HPI_CONTROL_SRC" ,\
337	"HPI_CONTROL_UNIVERSAL" \
338}
339
340compile_time_assert((HPI_CONTROL_LAST_INDEX + 1 == 27),
341	controltype_strings_match_defs);
342
343#define HPI_SOURCENODE_STRINGS \
344{ \
345	"no source", \
346	"HPI_SOURCENODE_OSTREAM", \
347	"HPI_SOURCENODE_LINEIN", \
348	"HPI_SOURCENODE_AESEBU_IN", \
349	"HPI_SOURCENODE_TUNER", \
350	"HPI_SOURCENODE_RF", \
351	"HPI_SOURCENODE_CLOCK_SOURCE", \
352	"HPI_SOURCENODE_RAW_BITSTREAM", \
353	"HPI_SOURCENODE_MICROPHONE", \
354	"HPI_SOURCENODE_COBRANET", \
355	"HPI_SOURCENODE_ANALOG", \
356	"HPI_SOURCENODE_ADAPTER" \
357}
358
359compile_time_assert((HPI_SOURCENODE_LAST_INDEX - HPI_SOURCENODE_NONE + 1) ==
360	(12), sourcenode_strings_match_defs);
361
362#define HPI_DESTNODE_STRINGS \
363{ \
364	"no destination", \
365	"HPI_DESTNODE_ISTREAM", \
366	"HPI_DESTNODE_LINEOUT", \
367	"HPI_DESTNODE_AESEBU_OUT", \
368	"HPI_DESTNODE_RF", \
369	"HPI_DESTNODE_SPEAKER", \
370	"HPI_DESTNODE_COBRANET", \
371	"HPI_DESTNODE_ANALOG" \
372}
373compile_time_assert((HPI_DESTNODE_LAST_INDEX - HPI_DESTNODE_NONE + 1) == (8),
374	destnode_strings_match_defs);
375
376#define HPI_CONTROL_CHANNEL_MODE_STRINGS \
377{ \
378	"XXX HPI_CHANNEL_MODE_ERROR XXX", \
379	"HPI_CHANNEL_MODE_NORMAL", \
380	"HPI_CHANNEL_MODE_SWAP", \
381	"HPI_CHANNEL_MODE_LEFT_ONLY", \
382	"HPI_CHANNEL_MODE_RIGHT_ONLY" \
383}
384
385#endif				/* _HPIDEBUG_H  */
386