1 /*
2  * Copyright (C) 2018-2022 Intel Corporation.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 #ifndef __LOG_H__
8 #define __LOG_H__
9 
10 #include <stdbool.h>
11 #include "types.h"
12 
13 /* Logging severity levels */
14 #define LOG_ERROR		1U
15 #define LOG_WARNING		2U
16 #define LOG_NOTICE		3U
17 #define LOG_INFO			4U
18 #define LOG_DEBUG		5U
19 
20 #define DEFAULT_LOG_LEVEL         4
21 #define MAX_ONE_LOG_SIZE     256
22 
23 struct logger_ops {
24 	const char *name;
25 	bool (*is_enabled)(void);
26 	uint8_t (*get_log_level)(void);
27 	int (*init)(bool enable, uint8_t log_level);
28 	void (*deinit)(void);
29 	void (*output)(const char *fmt, va_list args);
30 };
31 
32 int init_logger_setting(const char *opt);
33 void deinit_loggers(void);
34 void output_log(uint8_t level, const char *fmt, ...);
35 
36 /*
37  * Put all logger instances' addresses into one section named logger_dev_ops
38  * so that DM could enumerate and initialize each of them.
39  */
40 #define DECLARE_LOGGER_SECTION()    SET_DECLARE(logger_dev_ops, struct logger_ops)
41 #define DEFINE_LOGGER_DEVICE(x)    DATA_SET(logger_dev_ops, x)
42 #define FOR_EACH_LOGGER(pp_logger)    SET_FOREACH(pp_logger, logger_dev_ops)
43 
44 
45 #ifndef pr_prefix
46 #define pr_prefix
47 #endif
48 
49 #define pr_err(...) output_log(LOG_ERROR, pr_prefix __VA_ARGS__)
50 #define pr_warn(...) output_log(LOG_WARNING, pr_prefix __VA_ARGS__)
51 #define pr_notice(...) output_log(LOG_NOTICE, pr_prefix __VA_ARGS__)
52 #define pr_info(...) output_log(LOG_INFO, pr_prefix __VA_ARGS__)
53 #define pr_dbg(...) output_log(LOG_DEBUG, pr_prefix __VA_ARGS__)
54 
55 #endif /* __LOG_H__ */
56