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