/* * Copyright (c) 2020, Arm Limited. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause * */ #ifndef __TFM_SPM_LOG_H__ #define __TFM_SPM_LOG_H__ #include #include #include "tfm_hal_defs.h" #include "tfm_hal_spm_logdev.h" /* The SPM log levels */ #define TFM_SPM_LOG_LEVEL_DEBUG 3 /* All log APIs output */ #define TFM_SPM_LOG_LEVEL_INFO 2 /* * All log APIs output except SPMLOG_DBG * and SPMLOG_DBGMSGVAL */ #define TFM_SPM_LOG_LEVEL_ERROR 1 /* * Only SPMLOG_ERRMSG and SPMLOG_ERRMSGVAL * APIs output. */ #define TFM_SPM_LOG_LEVEL_SILENCE 0 /* All log APIs are suppressed */ #ifndef TFM_SPM_LOG_LEVEL #error "TFM_SPM_LOG_LEVEL not defined!" #endif #if (TFM_SPM_LOG_LEVEL > TFM_SPM_LOG_LEVEL_DEBUG || \ TFM_SPM_LOG_LEVEL < TFM_SPM_LOG_LEVEL_SILENCE) #error "Incorrect TFM_SPM_LOG_LEVEL value!" #endif #if (TFM_SPM_LOG_LEVEL == TFM_SPM_LOG_LEVEL_DEBUG) #define SPMLOG_DBGMSGVAL(msg, val) spm_log_msgval(msg, sizeof(msg), val) #define SPMLOG_DBGMSG(msg) tfm_hal_output_spm_log(msg, sizeof(msg)) #else #define SPMLOG_DBGMSGVAL(msg, val) #define SPMLOG_DBGMSG(msg) #endif #if (TFM_SPM_LOG_LEVEL >= TFM_SPM_LOG_LEVEL_INFO) #define SPMLOG_INFMSGVAL(msg, val) spm_log_msgval(msg, sizeof(msg), val) #define SPMLOG_INFMSG(msg) tfm_hal_output_spm_log(msg, sizeof(msg)) #else #define SPMLOG_INFMSGVAL(msg, val) #define SPMLOG_INFMSG(msg) #endif #if (TFM_SPM_LOG_LEVEL >= TFM_SPM_LOG_LEVEL_ERROR) #define SPMLOG_ERRMSGVAL(msg, val) spm_log_msgval(msg, sizeof(msg), val) #define SPMLOG_ERRMSG(msg) tfm_hal_output_spm_log(msg, sizeof(msg)) #else #define SPMLOG_ERRMSGVAL(msg, val) #define SPMLOG_ERRMSG(msg) #endif /** * \brief SPM output API to convert digit number into HEX string and call the * HAL API tfm_hal_output_spm_log. * * \param[in] msg A string message * \param[in] len The length of the message * \param[in] value A value need to be output * * \retval >=0 Number of chars output. * \retval <0 TFM HAL error code. */ int32_t spm_log_msgval(const char *msg, size_t len, uint32_t value); #endif /* __TFM_SPM_LOG_H__ */