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__ 271319e7b1SSoby Mathew #include <stdio.h> 28289c28a8SDan Handley 29289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_NOTICE 30289c28a8SDan Handley # define NOTICE(...) tf_printf("NOTICE: " __VA_ARGS__) 314ecca339SDan Handley #else 32289c28a8SDan Handley # define NOTICE(...) 33289c28a8SDan Handley #endif 34289c28a8SDan Handley 35289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_ERROR 36289c28a8SDan Handley # define ERROR(...) tf_printf("ERROR: " __VA_ARGS__) 37289c28a8SDan Handley #else 38289c28a8SDan Handley # define ERROR(...) 39289c28a8SDan Handley #endif 40289c28a8SDan Handley 41289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_WARNING 42289c28a8SDan Handley # define WARN(...) tf_printf("WARNING: " __VA_ARGS__) 43289c28a8SDan Handley #else 444ecca339SDan Handley # define WARN(...) 454ecca339SDan Handley #endif 464ecca339SDan Handley 47289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_INFO 48289c28a8SDan Handley # define INFO(...) tf_printf("INFO: " __VA_ARGS__) 49289c28a8SDan Handley #else 50289c28a8SDan Handley # define INFO(...) 51289c28a8SDan Handley #endif 52289c28a8SDan Handley 53289c28a8SDan Handley #if LOG_LEVEL >= LOG_LEVEL_VERBOSE 54289c28a8SDan Handley # define VERBOSE(...) tf_printf("VERBOSE: " __VA_ARGS__) 55289c28a8SDan Handley #else 56289c28a8SDan Handley # define VERBOSE(...) 57289c28a8SDan Handley #endif 58289c28a8SDan Handley 594ecca339SDan Handley 60c6bc0710SDan Handley void __dead2 do_panic(void); 61a43d431bSSoby Mathew #define panic() do_panic() 62a43d431bSSoby Mathew 6351faada7SDouglas Raillard /* Function called when stack protection check code detects a corrupted stack */ 6451faada7SDouglas Raillard void __dead2 __stack_chk_fail(void); 6551faada7SDouglas Raillard 66dad25049SSandrine Bailleux void tf_printf(const char *fmt, ...) __printflike(1, 2); 67*da5241cbSAntonio Nino Diaz int tf_snprintf(char *s, size_t n, const char *fmt, ...) __printflike(3, 4); 68b79af934SSoby Mathew 691319e7b1SSoby Mathew #endif /* __ASSEMBLY__ */ 704ecca339SDan Handley #endif /* __DEBUG_H__ */ 71