1/*	$NetBSD: debug.h,v 1.10 2010/08/08 16:27:30 chs Exp $	*/
2
3/*-
4 * Copyright (c) 1999-2002 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by UCHIYAMA Yasushi.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 *    notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 *    notice, this list of conditions and the following disclaimer in the
17 *    documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/*
33 * debug version exports all symbols.
34 */
35#ifdef DEBUG
36#define STATIC
37#else
38#define STATIC static
39#endif
40
41/*
42 * printf control
43 *	sample:
44 * #ifdef FOO_DEBUG
45 * #define DPRINTF_ENABLE
46 * #define DPRINTF_DEBUG	foo_debug
47 * #define DPRINTF_LEVEL	2
48 * #endif
49 */
50#ifdef USE_HPC_DPRINTF
51
52#ifdef DPRINTF_ENABLE
53
54#ifndef DPRINTF_DEBUG
55#error "specify unique debug variable"
56#endif
57
58#ifndef DPRINTF_LEVEL
59#define DPRINTF_LEVEL	1
60#endif
61
62int DPRINTF_DEBUG = DPRINTF_LEVEL;
63#endif /* DPRINTF_ENABLE */
64
65
66#ifdef __DPRINTF_EXT
67/*
68 * printf with function name prepended
69 */
70
71#define	PRINTF(fmt, args...)	do {			\
72		printf("%s: " fmt, __func__ , ##args);	\
73	} while (/* CONSTCOND */0)
74
75#ifdef DPRINTF_ENABLE
76
77#define	DPRINTF(fmt, args...)	do {		\
78		if (DPRINTF_DEBUG)		\
79			PRINTF(fmt, ##args);	\
80	} while (/* CONSTCOND */0)
81
82#define	_DPRINTF(fmt, args...)	do {		\
83		if (DPRINTF_DEBUG)		\
84			printf(fmt, ##args);	\
85	} while (/* CONSTCOND */0)
86
87#define DPRINTFN(n, fmt, args...)	do {	\
88		if (DPRINTF_DEBUG > (n))	\
89			PRINTF(fmt, ##args);	\
90	} while (/* CONSTCOND */0)
91
92#define _DPRINTFN(n, fmt, args...) do {		\
93		if (DPRINTF_DEBUG > (n))	\
94			printf(fmt, ##args);	\
95	} while (/* CONSTCOND */0)
96
97#else  /* !DPRINTF_ENABLE */
98#define	DPRINTF(args...)	do {} while (/* CONSTCOND */ 0)
99#define	_DPRINTF(args...)	do {} while (/* CONSTCOND */ 0)
100#define DPRINTFN(n, args...)	do {} while (/* CONSTCOND */ 0)
101#define _DPRINTFN(n, args...)	do {} while (/* CONSTCOND */ 0)
102#endif /* !DPRINTF_ENABLE */
103
104#else  /* !__DPRINTF_EXT */
105/*
106 * normal debug printf
107 */
108
109#ifdef DPRINTF_ENABLE
110
111#define	DPRINTF(arg)	do {			\
112		if (DPRINTF_DEBUG)		\
113			printf arg;		\
114	} while (/* CONSTCOND */0)
115
116#define DPRINTFN(n, arg)	do {		\
117		if (DPRINTF_DEBUG > (n))	\
118			printf arg;		\
119	} while (/* CONSTCOND */0)
120
121#else  /* !DPRINTF_ENABLE */
122#define	DPRINTF(arg)		do {} while (/* CONSTCOND */ 0)
123#define DPRINTFN(n, arg)	do {} while (/* CONSTCOND */ 0)
124#endif /* !DPRINTF_ENABLE */
125
126#endif /* !__DPRINT_EXT */
127#endif /* USE_HPC_DPRINTF */
128
129
130/*
131 * debug print utility
132 */
133#define DBG_BIT_PRINT_COUNT	(1 << 0)
134#define DBG_BIT_PRINT_QUIET	(1 << 1)
135
136void __dbg_bit_print(uint32_t, int, int, int, const char *, int);
137
138#define dbg_bit_print(a) do {						\
139		__dbg_bit_print((a), sizeof(typeof(a)), 0, 0, NULL,	\
140			DBG_BIT_PRINT_COUNT);				\
141	} while (/* CONSTCOND */0)
142
143#define dbg_bit_print_msg(a, m) do {					\
144		__dbg_bit_print((a), sizeof(typeof(a)), 0, 0, (m),	\
145			DBG_BIT_PRINT_COUNT);				\
146	} while (/* CONSTCOND */0)
147
148#define dbg_bit_display(a) do {						\
149		__dbg_bit_print((a), sizeof(typeof(a)), 0, 0, NULL,	\
150			DBG_BIT_PRINT_QUIET);				\
151	} while (/* CONSTCOND */0)
152
153void dbg_bitmask_print(uint32_t, uint32_t, const char *);
154void dbg_draw_line(int);
155void dbg_banner_title(const char *, size_t);
156void dbg_banner_line(void);
157
158#define dbg_banner_function() do {					\
159		dbg_banner_title(__func__, sizeof(__func__) - 1);	\
160	} while (/* CONSTCOND */ 0)
161
162/* HPC_DEBUG_LCD */
163#define RGB565_BLACK		0x0000
164#define RGB565_RED		0xf800
165#define RGB565_GREEN		0x07e0
166#define RGB565_YELLOW		0xffe0
167#define RGB565_BLUE		0x001f
168#define RGB565_MAGENTA		0xf81f
169#define RGB565_CYAN		0x07ff
170#define RGB565_WHITE		0xffff
171
172void dbg_lcd_test(void);
173