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