189 lines
6.3 KiB
C
189 lines
6.3 KiB
C
|
/*
|
||
|
* Copyright (C) 2012-2017 ARM Limited or its affiliates.
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License version 2 as
|
||
|
* published by the Free Software Foundation.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||
|
*/
|
||
|
|
||
|
#ifndef _CC_PAL_LOG_H_
|
||
|
#define _CC_PAL_LOG_H_
|
||
|
|
||
|
#include "cc_pal_types.h"
|
||
|
#include "cc_pal_log_plat.h"
|
||
|
|
||
|
/*!
|
||
|
@file
|
||
|
@brief This file contains the PAL layer log definitions, by default the log is disabled.
|
||
|
@defgroup cc_pal_log CryptoCell PAL logging APIs and definitions
|
||
|
@{
|
||
|
@ingroup cc_pal
|
||
|
*/
|
||
|
|
||
|
/* PAL log levels (to be used in CC_PAL_logLevel) */
|
||
|
/*! PAL log level - disabled. */
|
||
|
#define CC_PAL_LOG_LEVEL_NULL (-1) /*!< \internal Disable logging */
|
||
|
/*! PAL log level - error. */
|
||
|
#define CC_PAL_LOG_LEVEL_ERR 0
|
||
|
/*! PAL log level - warning. */
|
||
|
#define CC_PAL_LOG_LEVEL_WARN 1
|
||
|
/*! PAL log level - info. */
|
||
|
#define CC_PAL_LOG_LEVEL_INFO 2
|
||
|
/*! PAL log level - debug. */
|
||
|
#define CC_PAL_LOG_LEVEL_DEBUG 3
|
||
|
/*! PAL log level - trace. */
|
||
|
#define CC_PAL_LOG_LEVEL_TRACE 4
|
||
|
/*! PAL log level - data. */
|
||
|
#define CC_PAL_LOG_LEVEL_DATA 5
|
||
|
|
||
|
#ifndef CC_PAL_LOG_CUR_COMPONENT
|
||
|
/* Setting default component mask in case caller did not define */
|
||
|
/* (a mask that is always on for every log mask value but full masking) */
|
||
|
/*! Default log debugged component.*/
|
||
|
#define CC_PAL_LOG_CUR_COMPONENT 0xFFFFFFFF
|
||
|
#endif
|
||
|
#ifndef CC_PAL_LOG_CUR_COMPONENT_NAME
|
||
|
/*! Default log debugged component.*/
|
||
|
#define CC_PAL_LOG_CUR_COMPONENT_NAME "CC"
|
||
|
#endif
|
||
|
|
||
|
/* Select compile time log level (default if not explicitly specified by caller) */
|
||
|
#ifndef CC_PAL_MAX_LOG_LEVEL /* Can be overriden by external definition of this constant */
|
||
|
#ifdef DEBUG
|
||
|
/*! Default debug log level (when debug is set to on).*/
|
||
|
#define CC_PAL_MAX_LOG_LEVEL CC_PAL_LOG_LEVEL_ERR /*CC_PAL_LOG_LEVEL_DEBUG*/
|
||
|
#else /* Disable logging */
|
||
|
/*! Default debug log level (when debug is set to on).*/
|
||
|
#define CC_PAL_MAX_LOG_LEVEL CC_PAL_LOG_LEVEL_NULL
|
||
|
#endif
|
||
|
#endif /*CC_PAL_MAX_LOG_LEVEL*/
|
||
|
/*! Evaluate CC_PAL_MAX_LOG_LEVEL in case provided by caller */
|
||
|
#define __CC_PAL_LOG_LEVEL_EVAL(level) level
|
||
|
/*! Maximal log level defintion.*/
|
||
|
#define _CC_PAL_MAX_LOG_LEVEL __CC_PAL_LOG_LEVEL_EVAL(CC_PAL_MAX_LOG_LEVEL)
|
||
|
|
||
|
|
||
|
#ifdef ARM_DSM
|
||
|
/*! Log init function. */
|
||
|
#define CC_PalLogInit() do {} while (0)
|
||
|
/*! Log set level function - sets the level of logging in case of debug. */
|
||
|
#define CC_PalLogLevelSet(setLevel) do {} while (0)
|
||
|
/*! Log set mask function - sets the component masking in case of debug. */
|
||
|
#define CC_PalLogMaskSet(setMask) do {} while (0)
|
||
|
#else
|
||
|
#if _CC_PAL_MAX_LOG_LEVEL > CC_PAL_LOG_LEVEL_NULL
|
||
|
/*! Log init function. */
|
||
|
void CC_PalLogInit(void);
|
||
|
/*! Log set level function - sets the level of logging in case of debug. */
|
||
|
void CC_PalLogLevelSet(int setLevel);
|
||
|
/*! Log set mask function - sets the component masking in case of debug. */
|
||
|
void CC_PalLogMaskSet(uint32_t setMask);
|
||
|
/*! Global variable for log level */
|
||
|
extern int CC_PAL_logLevel;
|
||
|
/*! Global variable for log mask */
|
||
|
extern uint32_t CC_PAL_logMask;
|
||
|
#else /* No log */
|
||
|
/*! Log init function. */
|
||
|
static inline void CC_PalLogInit(void) {}
|
||
|
/*! Log set level function - sets the level of logging in case of debug. */
|
||
|
static inline void CC_PalLogLevelSet(int setLevel) {CC_UNUSED_PARAM(setLevel);}
|
||
|
/*! Log set mask function - sets the component masking in case of debug. */
|
||
|
static inline void CC_PalLogMaskSet(uint32_t setMask) {CC_UNUSED_PARAM(setMask);}
|
||
|
#endif
|
||
|
#endif
|
||
|
|
||
|
/*! Filter logging based on logMask and dispatch to platform specific logging mechanism. */
|
||
|
#define _CC_PAL_LOG(level, format, ...) \
|
||
|
if (CC_PAL_logMask & CC_PAL_LOG_CUR_COMPONENT) \
|
||
|
__CC_PAL_LOG_PLAT(CC_PAL_LOG_LEVEL_ ## level, "%s:%s: " format, CC_PAL_LOG_CUR_COMPONENT_NAME, __func__, ##__VA_ARGS__)
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_ERR)
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_ERR(format, ... ) \
|
||
|
_CC_PAL_LOG(ERR, format, ##__VA_ARGS__)
|
||
|
#else
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_ERR( ... ) do {} while (0)
|
||
|
#endif
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_WARN)
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_WARN(format, ... ) \
|
||
|
if (CC_PAL_logLevel >= CC_PAL_LOG_LEVEL_WARN) \
|
||
|
_CC_PAL_LOG(WARN, format, ##__VA_ARGS__)
|
||
|
#else
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_WARN( ... ) do {} while (0)
|
||
|
#endif
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_INFO)
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_INFO(format, ... ) \
|
||
|
if (CC_PAL_logLevel >= CC_PAL_LOG_LEVEL_INFO) \
|
||
|
_CC_PAL_LOG(INFO, format, ##__VA_ARGS__)
|
||
|
#else
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_INFO( ... ) do {} while (0)
|
||
|
#endif
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_DEBUG)
|
||
|
/*! Log messages according to log level.*/
|
||
|
#define CC_PAL_LOG_DEBUG(format, ... ) \
|
||
|
if (CC_PAL_logLevel >= CC_PAL_LOG_LEVEL_DEBUG) \
|
||
|
_CC_PAL_LOG(DEBUG, format, ##__VA_ARGS__)
|
||
|
|
||
|
/*! Log message buffer.*/
|
||
|
#define CC_PAL_LOG_DUMP_BUF(msg, buf, size) \
|
||
|
do { \
|
||
|
int i; \
|
||
|
uint8_t *pData = (uint8_t*)buf; \
|
||
|
\
|
||
|
PRINTF("%s (%d):\n", msg, size); \
|
||
|
for (i = 0; i < size; i++) { \
|
||
|
PRINTF("0x%02X ", pData[i]); \
|
||
|
if ((i & 0xF) == 0xF) { \
|
||
|
PRINTF("\n"); \
|
||
|
} \
|
||
|
} \
|
||
|
PRINTF("\n"); \
|
||
|
} while (0)
|
||
|
#else
|
||
|
/*! Log debug messages.*/
|
||
|
#define CC_PAL_LOG_DEBUG( ... ) do {} while (0)
|
||
|
/*! Log debug buffer.*/
|
||
|
#define CC_PAL_LOG_DUMP_BUF(msg, buf, size) do {} while (0)
|
||
|
#endif
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_TRACE)
|
||
|
/*! Log debug trace.*/
|
||
|
#define CC_PAL_LOG_TRACE(format, ... ) \
|
||
|
if (CC_PAL_logLevel >= CC_PAL_LOG_LEVEL_TRACE) \
|
||
|
_CC_PAL_LOG(TRACE, format, ##__VA_ARGS__)
|
||
|
#else
|
||
|
/*! Log debug trace.*/
|
||
|
#define CC_PAL_LOG_TRACE(...) do {} while (0)
|
||
|
#endif
|
||
|
|
||
|
#if (_CC_PAL_MAX_LOG_LEVEL >= CC_PAL_LOG_LEVEL_TRACE)
|
||
|
/*! Log debug data.*/
|
||
|
#define CC_PAL_LOG_DATA(format, ...) \
|
||
|
if (CC_PAL_logLevel >= CC_PAL_LOG_LEVEL_TRACE) \
|
||
|
_CC_PAL_LOG(DATA, format, ##__VA_ARGS__)
|
||
|
#else
|
||
|
/*! Log debug data.*/
|
||
|
#define CC_PAL_LOG_DATA( ...) do {} while (0)
|
||
|
#endif
|
||
|
/**
|
||
|
@}
|
||
|
*/
|
||
|
|
||
|
#endif /*_CC_PAL_LOG_H_*/
|