xref: /openbmc/u-boot/include/log.h (revision c5404b64)
1 /*
2  * Logging support
3  *
4  * Copyright (c) 2017 Google, Inc
5  * Written by Simon Glass <sjg@chromium.org>
6  *
7  * SPDX-License-Identifier:	GPL-2.0+
8  */
9 
10 #ifndef __LOG_H
11 #define __LOG_H
12 
13 #ifdef DEBUG
14 #define _DEBUG	1
15 #else
16 #define _DEBUG	0
17 #endif
18 
19 #ifdef CONFIG_SPL_BUILD
20 #define _SPL_BUILD	1
21 #else
22 #define _SPL_BUILD	0
23 #endif
24 
25 /*
26  * Output a debug text when condition "cond" is met. The "cond" should be
27  * computed by a preprocessor in the best case, allowing for the best
28  * optimization.
29  */
30 #define debug_cond(cond, fmt, args...)			\
31 	do {						\
32 		if (cond)				\
33 			printf(pr_fmt(fmt), ##args);	\
34 	} while (0)
35 
36 /* Show a message if DEBUG is defined in a file */
37 #define debug(fmt, args...)			\
38 	debug_cond(_DEBUG, fmt, ##args)
39 
40 /* Show a message if not in SPL */
41 #define warn_non_spl(fmt, args...)			\
42 	debug_cond(!_SPL_BUILD, fmt, ##args)
43 
44 /*
45  * An assertion is run-time check done in debug mode only. If DEBUG is not
46  * defined then it is skipped. If DEBUG is defined and the assertion fails,
47  * then it calls panic*( which may or may not reset/halt U-Boot (see
48  * CONFIG_PANIC_HANG), It is hoped that all failing assertions are found
49  * before release, and after release it is hoped that they don't matter. But
50  * in any case these failing assertions cannot be fixed with a reset (which
51  * may just do the same assertion again).
52  */
53 void __assert_fail(const char *assertion, const char *file, unsigned int line,
54 		   const char *function);
55 #define assert(x) \
56 	({ if (!(x) && _DEBUG) \
57 		__assert_fail(#x, __FILE__, __LINE__, __func__); })
58 
59 #endif
60