1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /***************************************************************************** 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun AudioScience HPI driver 5*4882a593Smuzhiyun Copyright (C) 1997-2011 AudioScience Inc. <support@audioscience.com> 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun Debug macros. 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun *****************************************************************************/ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #ifndef _HPIDEBUG_H 13*4882a593Smuzhiyun #define _HPIDEBUG_H 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #include "hpi_internal.h" 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* Define debugging levels. */ 18*4882a593Smuzhiyun enum { HPI_DEBUG_LEVEL_ERROR = 0, /* always log errors */ 19*4882a593Smuzhiyun HPI_DEBUG_LEVEL_WARNING = 1, 20*4882a593Smuzhiyun HPI_DEBUG_LEVEL_NOTICE = 2, 21*4882a593Smuzhiyun HPI_DEBUG_LEVEL_INFO = 3, 22*4882a593Smuzhiyun HPI_DEBUG_LEVEL_DEBUG = 4, 23*4882a593Smuzhiyun HPI_DEBUG_LEVEL_VERBOSE = 5 /* same printk level as DEBUG */ 24*4882a593Smuzhiyun }; 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun #define HPI_DEBUG_LEVEL_DEFAULT HPI_DEBUG_LEVEL_NOTICE 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun /* an OS can define an extra flag string that is appended to 29*4882a593Smuzhiyun the start of each message, eg see linux kernel hpios.h */ 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun #ifdef SOURCEFILE_NAME 32*4882a593Smuzhiyun #define FILE_LINE SOURCEFILE_NAME ":" __stringify(__LINE__) " " 33*4882a593Smuzhiyun #else 34*4882a593Smuzhiyun #define FILE_LINE __FILE__ ":" __stringify(__LINE__) " " 35*4882a593Smuzhiyun #endif 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun #define HPI_DEBUG_ASSERT(expression) \ 38*4882a593Smuzhiyun do { \ 39*4882a593Smuzhiyun if (!(expression)) { \ 40*4882a593Smuzhiyun printk(KERN_ERR FILE_LINE \ 41*4882a593Smuzhiyun "ASSERT " __stringify(expression)); \ 42*4882a593Smuzhiyun } \ 43*4882a593Smuzhiyun } while (0) 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun #define HPI_DEBUG_LOG(level, ...) \ 46*4882a593Smuzhiyun do { \ 47*4882a593Smuzhiyun if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \ 48*4882a593Smuzhiyun printk(HPI_DEBUG_FLAG_##level \ 49*4882a593Smuzhiyun FILE_LINE __VA_ARGS__); \ 50*4882a593Smuzhiyun } \ 51*4882a593Smuzhiyun } while (0) 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun void hpi_debug_init(void); 54*4882a593Smuzhiyun int hpi_debug_level_set(int level); 55*4882a593Smuzhiyun int hpi_debug_level_get(void); 56*4882a593Smuzhiyun /* needed by Linux driver for dynamic debug level changes */ 57*4882a593Smuzhiyun extern int hpi_debug_level; 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun void hpi_debug_message(struct hpi_message *phm, char *sz_fileline); 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun void hpi_debug_data(u16 *pdata, u32 len); 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun #define HPI_DEBUG_DATA(pdata, len) \ 64*4882a593Smuzhiyun do { \ 65*4882a593Smuzhiyun if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \ 66*4882a593Smuzhiyun hpi_debug_data(pdata, len); \ 67*4882a593Smuzhiyun } while (0) 68*4882a593Smuzhiyun 69*4882a593Smuzhiyun #define HPI_DEBUG_MESSAGE(level, phm) \ 70*4882a593Smuzhiyun do { \ 71*4882a593Smuzhiyun if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \ 72*4882a593Smuzhiyun hpi_debug_message(phm, HPI_DEBUG_FLAG_##level \ 73*4882a593Smuzhiyun FILE_LINE __stringify(level)); \ 74*4882a593Smuzhiyun } \ 75*4882a593Smuzhiyun } while (0) 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun #define HPI_DEBUG_RESPONSE(phr) \ 78*4882a593Smuzhiyun do { \ 79*4882a593Smuzhiyun if (((hpi_debug_level >= HPI_DEBUG_LEVEL_DEBUG) && \ 80*4882a593Smuzhiyun (phr->error)) ||\ 81*4882a593Smuzhiyun (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE)) \ 82*4882a593Smuzhiyun printk(KERN_DEBUG "HPI_RES%d,%d,%d\n", \ 83*4882a593Smuzhiyun phr->version, phr->error, phr->specific_error); \ 84*4882a593Smuzhiyun } while (0) 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun #ifndef compile_time_assert 87*4882a593Smuzhiyun #define compile_time_assert(cond, msg) \ 88*4882a593Smuzhiyun typedef char msg[(cond) ? 1 : -1] 89*4882a593Smuzhiyun #endif 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #endif /* _HPIDEBUG_H_ */ 92