xref: /rk3399_ARM-atf/include/common/debug.h (revision 7f56e9a31c91099cd0147883a0282ec89ae0b346)
14ecca339SDan Handley /*
251faada7SDouglas Raillard  * Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
34ecca339SDan Handley  *
482cb2c1aSdp-arm  * SPDX-License-Identifier: BSD-3-Clause
54ecca339SDan Handley  */
64ecca339SDan Handley 
74ecca339SDan Handley #ifndef __DEBUG_H__
84ecca339SDan Handley #define __DEBUG_H__
94ecca339SDan Handley 
10289c28a8SDan Handley /* The log output macros print output to the console. These macros produce
11289c28a8SDan Handley  * compiled log output only if the LOG_LEVEL defined in the makefile (or the
12289c28a8SDan Handley  * make command line) is greater or equal than the level required for that
13289c28a8SDan Handley  * type of log output.
14289c28a8SDan Handley  * The format expected is the same as for printf(). For example:
154ecca339SDan Handley  * INFO("Info %s.\n", "message")    -> INFO:    Info message.
16289c28a8SDan Handley  * WARN("Warning %s.\n", "message") -> WARNING: Warning message.
174ecca339SDan Handley  */
18289c28a8SDan Handley 
19289c28a8SDan Handley #define LOG_LEVEL_NONE			0
20289c28a8SDan Handley #define LOG_LEVEL_ERROR			10
21289c28a8SDan Handley #define LOG_LEVEL_NOTICE		20
22289c28a8SDan Handley #define LOG_LEVEL_WARNING		30
23289c28a8SDan Handley #define LOG_LEVEL_INFO			40
24289c28a8SDan Handley #define LOG_LEVEL_VERBOSE		50
25289c28a8SDan Handley 
261319e7b1SSoby Mathew #ifndef __ASSEMBLY__
272d7e8282SSoby Mathew #include <stdarg.h>
281319e7b1SSoby Mathew #include <stdio.h>
29289c28a8SDan Handley 
30*7f56e9a3SSoby Mathew /*
31*7f56e9a3SSoby Mathew  * Define Log Markers corresponding to each log level which will
32*7f56e9a3SSoby Mathew  * be embedded in the format string and is expected by tf_log() to determine
33*7f56e9a3SSoby Mathew  * the log level.
34*7f56e9a3SSoby Mathew  */
35*7f56e9a3SSoby Mathew #define LOG_MARKER_ERROR		"\xa"	/* 10 */
36*7f56e9a3SSoby Mathew #define LOG_MARKER_NOTICE		"\x14"	/* 20 */
37*7f56e9a3SSoby Mathew #define LOG_MARKER_WARNING		"\x1e"	/* 30 */
38*7f56e9a3SSoby Mathew #define LOG_MARKER_INFO			"\x28"	/* 40 */
39*7f56e9a3SSoby Mathew #define LOG_MARKER_VERBOSE		"\x32"	/* 50 */
40*7f56e9a3SSoby Mathew 
41289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_NOTICE
42*7f56e9a3SSoby Mathew # define NOTICE(...)	tf_log(LOG_MARKER_NOTICE __VA_ARGS__)
434ecca339SDan Handley #else
44289c28a8SDan Handley # define NOTICE(...)
45289c28a8SDan Handley #endif
46289c28a8SDan Handley 
47289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_ERROR
48*7f56e9a3SSoby Mathew # define ERROR(...)	tf_log(LOG_MARKER_ERROR __VA_ARGS__)
49289c28a8SDan Handley #else
50289c28a8SDan Handley # define ERROR(...)
51289c28a8SDan Handley #endif
52289c28a8SDan Handley 
53289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_WARNING
54*7f56e9a3SSoby Mathew # define WARN(...)	tf_log(LOG_MARKER_WARNING __VA_ARGS__)
55289c28a8SDan Handley #else
564ecca339SDan Handley # define WARN(...)
574ecca339SDan Handley #endif
584ecca339SDan Handley 
59289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_INFO
60*7f56e9a3SSoby Mathew # define INFO(...)	tf_log(LOG_MARKER_INFO __VA_ARGS__)
61289c28a8SDan Handley #else
62289c28a8SDan Handley # define INFO(...)
63289c28a8SDan Handley #endif
64289c28a8SDan Handley 
65289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_VERBOSE
66*7f56e9a3SSoby Mathew # define VERBOSE(...)	tf_log(LOG_MARKER_VERBOSE __VA_ARGS__)
67289c28a8SDan Handley #else
68289c28a8SDan Handley # define VERBOSE(...)
69289c28a8SDan Handley #endif
70289c28a8SDan Handley 
71c6bc0710SDan Handley void __dead2 do_panic(void);
72a43d431bSSoby Mathew #define panic()	do_panic()
73a43d431bSSoby Mathew 
7451faada7SDouglas Raillard /* Function called when stack protection check code detects a corrupted stack */
7551faada7SDouglas Raillard void __dead2 __stack_chk_fail(void);
7651faada7SDouglas Raillard 
77*7f56e9a3SSoby Mathew void tf_log(const char *fmt, ...) __printflike(1, 2);
78dad25049SSandrine Bailleux void tf_printf(const char *fmt, ...) __printflike(1, 2);
79da5241cbSAntonio Nino Diaz int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4);
802d7e8282SSoby Mathew void tf_vprintf(const char *fmt, va_list args);
812d7e8282SSoby Mathew void tf_string_print(const char *str);
82*7f56e9a3SSoby Mathew void tf_log_set_max_level(unsigned int log_level);
83b79af934SSoby Mathew 
841319e7b1SSoby Mathew #endif /* __ASSEMBLY__ */
854ecca339SDan Handley #endif /* __DEBUG_H__ */
86