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__ 27*2d7e8282SSoby Mathew #include <stdarg.h> 281319e7b1SSoby Mathew #include <stdio.h> 29289c28a8SDan Handley 30289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_NOTICE 31289c28a8SDan Handley # define NOTICE(...) tf_printf("NOTICE: " __VA_ARGS__) 324ecca339SDan Handley #else 33289c28a8SDan Handley # define NOTICE(...) 34289c28a8SDan Handley #endif 35289c28a8SDan Handley 36289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_ERROR 37289c28a8SDan Handley # define ERROR(...) tf_printf("ERROR: " __VA_ARGS__) 38289c28a8SDan Handley #else 39289c28a8SDan Handley # define ERROR(...) 40289c28a8SDan Handley #endif 41289c28a8SDan Handley 42289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_WARNING 43289c28a8SDan Handley # define WARN(...) tf_printf("WARNING: " __VA_ARGS__) 44289c28a8SDan Handley #else 454ecca339SDan Handley # define WARN(...) 464ecca339SDan Handley #endif 474ecca339SDan Handley 48289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_INFO 49289c28a8SDan Handley # define INFO(...) tf_printf("INFO: " __VA_ARGS__) 50289c28a8SDan Handley #else 51289c28a8SDan Handley # define INFO(...) 52289c28a8SDan Handley #endif 53289c28a8SDan Handley 54289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_VERBOSE 55289c28a8SDan Handley # define VERBOSE(...) tf_printf("VERBOSE: " __VA_ARGS__) 56289c28a8SDan Handley #else 57289c28a8SDan Handley # define VERBOSE(...) 58289c28a8SDan Handley #endif 59289c28a8SDan Handley 604ecca339SDan Handley 61c6bc0710SDan Handley void __dead2 do_panic(void); 62a43d431bSSoby Mathew #define panic() do_panic() 63a43d431bSSoby Mathew 6451faada7SDouglas Raillard /* Function called when stack protection check code detects a corrupted stack */ 6551faada7SDouglas Raillard void __dead2 __stack_chk_fail(void); 6651faada7SDouglas Raillard 67dad25049SSandrine Bailleux void tf_printf(const char *fmt, ...) __printflike(1, 2); 68da5241cbSAntonio Nino Diaz int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4); 69*2d7e8282SSoby Mathew void tf_vprintf(const char *fmt, va_list args); 70*2d7e8282SSoby Mathew void tf_string_print(const char *str); 71b79af934SSoby Mathew 721319e7b1SSoby Mathew #endif /* __ASSEMBLY__ */ 734ecca339SDan Handley #endif /* __DEBUG_H__ */ 74