1 /* 2 * Copyright (c) 2015, Xilinx Inc. and Contributors. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /* 8 * @file log.h 9 * @brief Logging support for libmetal. 10 */ 11 12 #ifndef __METAL_METAL_LOG__H__ 13 #define __METAL_METAL_LOG__H__ 14 15 #ifdef __cplusplus 16 extern "C" { 17 #endif 18 19 /** \defgroup logging Library Logging Interfaces 20 * @{ */ 21 22 /** Log message priority levels for libmetal. */ 23 enum metal_log_level { 24 METAL_LOG_EMERGENCY, /**< system is unusable. */ 25 METAL_LOG_ALERT, /**< action must be taken immediately. */ 26 METAL_LOG_CRITICAL, /**< critical conditions. */ 27 METAL_LOG_ERROR, /**< error conditions. */ 28 METAL_LOG_WARNING, /**< warning conditions. */ 29 METAL_LOG_NOTICE, /**< normal but significant condition. */ 30 METAL_LOG_INFO, /**< informational messages. */ 31 METAL_LOG_DEBUG, /**< debug-level messages. */ 32 }; 33 34 /** Log message handler type. */ 35 typedef void (*metal_log_handler)(enum metal_log_level level, 36 const char *format, ...); 37 38 /** 39 * @brief Set libmetal log handler. 40 * @param[in] handler log message handler. 41 * @return 0 on success, or -errno on failure. 42 */ 43 extern void metal_set_log_handler(metal_log_handler handler); 44 45 /** 46 * @brief Get the current libmetal log handler. 47 * @return Current log handler. 48 */ 49 extern metal_log_handler metal_get_log_handler(void); 50 51 /** 52 * @brief Set the level for libmetal logging. 53 * @param[in] level log message level. 54 */ 55 extern void metal_set_log_level(enum metal_log_level level); 56 57 /** 58 * @brief Get the current level for libmetal logging. 59 * @return Current log level. 60 */ 61 extern enum metal_log_level metal_get_log_level(void); 62 63 /** 64 * @brief Default libmetal log handler. This handler prints libmetal log 65 * mesages to stderr. 66 * @param[in] level log message level. 67 * @param[in] format log message format string. 68 * @return 0 on success, or -errno on failure. 69 */ 70 extern void metal_default_log_handler(enum metal_log_level level, 71 const char *format, ...); 72 73 74 /** 75 * Emit a log message if the log level permits. 76 * 77 * @param level Log level. 78 * @param ... Format string and arguments. 79 */ 80 #define metal_log(level, ...) \ 81 ((level <= _metal.common.log_level && _metal.common.log_handler) \ 82 ? (void)_metal.common.log_handler(level, __VA_ARGS__) \ 83 : (void)0) 84 85 /** @} */ 86 87 #ifdef __cplusplus 88 } 89 #endif 90 91 #include <metal/system/generic/log.h> 92 93 #endif /* __METAL_METAL_LOG__H__ */ 94