linux/sound/pci/asihpi/hpidebug.h
<<
>>
Prefs
   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