1 /*
2  * Copyright (c) 2023, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef __PLATFORM_LOG_H__
9 #define __PLATFORM_LOG_H__
10 
11 #define PLAT_LOG_LEVEL_OFF       (0)
12 #define PLAT_LOG_LEVEL_ERROR     (1)
13 #define PLAT_LOG_LEVEL_WARN      (2)
14 #define PLAT_LOG_LEVEL_INFO      (3)
15 #define PLAT_LOG_LEVEL_DEBUG     (4)
16 
17 #ifndef PLAT_LOG_MODULE_NAME
18 #define MODULE_NAME_STR " "
19 #else
20 #define MODULE_NAME_STR "["PLAT_LOG_MODULE_NAME"]: "
21 #endif
22 
23 #ifndef PLAT_LOG_LEVEL
24 #warning "Logging level is not defined, default is PLAT_LOG_LEVEL_ERROR."
25 #define PLAT_LOG_LEVEL   PLAT_LOG_LEVEL_ERROR
26 #endif
27 
28 
29 /* System can override PRINTF with other rich format function*/
30 #ifndef PRINTF
31 #if PLAT_LOG_LEVEL > PLAT_LOG_LEVEL_OFF
32 #include <stdio.h>
33 #define PRINTF printf
34 #endif
35 #endif
36 
37 #if PLAT_LOG_LEVEL >= PLAT_LOG_LEVEL_ERROR
38     #define ERROR(f_, ...) do { PRINTF("\033[31;4m[ERR]:\033[m%s"f_"\r\n", MODULE_NAME_STR, ##__VA_ARGS__);  } while (0)
39 #else
40     #define ERROR(f_, ...) do {  } while(0)
41 #endif
42 #if PLAT_LOG_LEVEL >= PLAT_LOG_LEVEL_WARN
43     #define WARN(f_, ...) do { PRINTF("\033[33;4m[WRN]:\033[m%s"f_"\r\n", MODULE_NAME_STR, ##__VA_ARGS__);  } while (0)
44 #else
45     #define WARN(f_, ...) do {  } while(0)
46 #endif
47 #if PLAT_LOG_LEVEL >= PLAT_LOG_LEVEL_INFO
48     #define INFO(f_, ...) do { PRINTF("[INF]:%s"f_"\r\n", MODULE_NAME_STR, ##__VA_ARGS__);  } while (0)
49 #else
50     #define INFO(f_, ...) do {  } while(0)
51 #endif
52 #if PLAT_LOG_LEVEL >= PLAT_LOG_LEVEL_DEBUG
53     #define VERBOSE(f_, ...) do { PRINTF("[DBG]:%s" f_"\r\n",MODULE_NAME_STR, ##__VA_ARGS__);  } while (0)
54     #define DEBUG(f_, ...) do { PRINTF("[DBG]:%s" f_"\r\n",MODULE_NAME_STR, ##__VA_ARGS__);  } while (0)
55 #else
56     #define VERBOSE(f_, ...) do {  } while(0)
57     #define DEBUG(f_, ...) do {  } while(0)
58 #endif
59 
60 #endif /* __PLATFORM_LOG_H__ */
61