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#define FILE_LINE  SOURCEFILE_NAME ":" __stringify(__LINE__) " "
33#else
34#define FILE_LINE  __FILE__ ":" __stringify(__LINE__) " "
35#endif
36
37#define HPI_DEBUG_ASSERT(expression) \
38	do { \
39		if (!(expression)) { \
40			printk(KERN_ERR  FILE_LINE \
41				"ASSERT " __stringify(expression)); \
42		} \
43	} while (0)
44
45#define HPI_DEBUG_LOG(level, ...) \
46	do { \
47		if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \
48			printk(HPI_DEBUG_FLAG_##level \
49			FILE_LINE  __VA_ARGS__); \
50		} \
51	} while (0)
52
53void hpi_debug_init(void);
54int hpi_debug_level_set(int level);
55int hpi_debug_level_get(void);
56/* needed by Linux driver for dynamic debug level changes */
57extern int hpi_debug_level;
58
59void hpi_debug_message(struct hpi_message *phm, char *sz_fileline);
60
61void hpi_debug_data(u16 *pdata, u32 len);
62
63#define HPI_DEBUG_DATA(pdata, len) \
64	do { \
65		if (hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE) \
66			hpi_debug_data(pdata, len); \
67	} while (0)
68
69#define HPI_DEBUG_MESSAGE(level, phm) \
70	do { \
71		if (hpi_debug_level >= HPI_DEBUG_LEVEL_##level) { \
72			hpi_debug_message(phm, HPI_DEBUG_FLAG_##level \
73				FILE_LINE __stringify(level)); \
74		} \
75	} while (0)
76
77#define HPI_DEBUG_RESPONSE(phr) \
78	do { \
79		if (((hpi_debug_level >= HPI_DEBUG_LEVEL_DEBUG) && \
80			(phr->error)) ||\
81		(hpi_debug_level >= HPI_DEBUG_LEVEL_VERBOSE)) \
82			printk(KERN_DEBUG "HPI_RES%d,%d,%d\n", \
83				phr->version, phr->error, phr->specific_error); \
84	} while (0)
85
86#ifndef compile_time_assert
87#define compile_time_assert(cond, msg) \
88    typedef char msg[(cond) ? 1 : -1]
89#endif
90
91#endif				/* _HPIDEBUG_H_  */
92