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