11bd4fe43Sopenharmony_ci/*
21bd4fe43Sopenharmony_ci * Copyright (c) 2022 HiSilicon (Shanghai) Technologies CO., LIMITED.
31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License.
51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at
61bd4fe43Sopenharmony_ci *
71bd4fe43Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
81bd4fe43Sopenharmony_ci *
91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and
131bd4fe43Sopenharmony_ci * limitations under the License.
141bd4fe43Sopenharmony_ci */
151bd4fe43Sopenharmony_ci
161bd4fe43Sopenharmony_ci#ifndef __HI_DEBUG_H__
171bd4fe43Sopenharmony_ci#define __HI_DEBUG_H__
181bd4fe43Sopenharmony_ci
191bd4fe43Sopenharmony_ci#ifndef __KERNEL__
201bd4fe43Sopenharmony_ci#include <stdio.h>
211bd4fe43Sopenharmony_ci#include <stdarg.h>
221bd4fe43Sopenharmony_ci#include <assert.h>
231bd4fe43Sopenharmony_ci#endif
241bd4fe43Sopenharmony_ci
251bd4fe43Sopenharmony_ci#include "hi_type.h"
261bd4fe43Sopenharmony_ci#include "hi_common.h"
271bd4fe43Sopenharmony_ci
281bd4fe43Sopenharmony_ci#ifdef __cplusplus
291bd4fe43Sopenharmony_ci#if __cplusplus
301bd4fe43Sopenharmony_ciextern "C" {
311bd4fe43Sopenharmony_ci#endif
321bd4fe43Sopenharmony_ci#endif /* __cplusplus */
331bd4fe43Sopenharmony_ci
341bd4fe43Sopenharmony_ci#define _EX__FILE_LINE(fxx, lxx) "[File]:" fxx"\n[Line]:"#lxx"\n[Info]:"
351bd4fe43Sopenharmony_ci#define EX__FILE_LINE(fxx, lxx) _EX__FILE_LINE(fxx, lxx)
361bd4fe43Sopenharmony_ci#define __FILE_LINE__ EX__FILE_LINE(__FILE__, __LINE__)
371bd4fe43Sopenharmony_ci
381bd4fe43Sopenharmony_ci#define HI_DBG_EMERG      0   /* system is unusable                   */
391bd4fe43Sopenharmony_ci#define HI_DBG_ALERT      1   /* action must be taken immediately     */
401bd4fe43Sopenharmony_ci#define HI_DBG_CRIT       2   /* critical conditions                  */
411bd4fe43Sopenharmony_ci#define HI_DBG_ERR        3   /* error conditions                     */
421bd4fe43Sopenharmony_ci#define HI_DBG_WARN       4   /* warning conditions                   */
431bd4fe43Sopenharmony_ci#define HI_DBG_NOTICE     5   /* normal but significant condition     */
441bd4fe43Sopenharmony_ci#define HI_DBG_INFO       6   /* informational                        */
451bd4fe43Sopenharmony_ci#define HI_DBG_DEBUG      7   /* debug-level messages                 */
461bd4fe43Sopenharmony_ci
471bd4fe43Sopenharmony_citypedef struct hiLOG_LEVEL_CONF_S {
481bd4fe43Sopenharmony_ci    MOD_ID_E  enModId;
491bd4fe43Sopenharmony_ci    HI_S32    s32Level;
501bd4fe43Sopenharmony_ci    HI_CHAR   cModName[16];
511bd4fe43Sopenharmony_ci} LOG_LEVEL_CONF_S;
521bd4fe43Sopenharmony_ci
531bd4fe43Sopenharmony_ci#ifndef __KERNEL__
541bd4fe43Sopenharmony_ci
551bd4fe43Sopenharmony_ci/* For User Mode : HI_PRINT, HI_ASSERT, HI_TRACE */
561bd4fe43Sopenharmony_ci#define HI_PRINT      (hi_void)printf
571bd4fe43Sopenharmony_ci
581bd4fe43Sopenharmony_ci/* #ifdef HI_DEBUG */
591bd4fe43Sopenharmony_ci#ifdef CONFIG_HI_LOG_TRACE_SUPPORT
601bd4fe43Sopenharmony_ci    /* Using samples:   HI_ASSERT(x>y); */
611bd4fe43Sopenharmony_ci    #define HI_ASSERT(expr)               \
621bd4fe43Sopenharmony_ci    do {                                   \
631bd4fe43Sopenharmony_ci        if (!(expr)) {                    \
641bd4fe43Sopenharmony_ci            (hi_void)printf("\nASSERT at:\n"       \
651bd4fe43Sopenharmony_ci                   "  >Function : %s\n"   \
661bd4fe43Sopenharmony_ci                   "  >Line No. : %d\n"   \
671bd4fe43Sopenharmony_ci                   "  >Condition: %s\n",  __FUNCTION__, __LINE__, #expr); \
681bd4fe43Sopenharmony_ci            assert(0); \
691bd4fe43Sopenharmony_ci        } \
701bd4fe43Sopenharmony_ci    } while (0)
711bd4fe43Sopenharmony_ci
721bd4fe43Sopenharmony_ci    /* Using samples:
731bd4fe43Sopenharmony_ci     * HI_TRACE(HI_DBG_DEBUG, HI_ID_CMPI, "Test %d, %s\n", 12, "Test");
741bd4fe43Sopenharmony_ci     */
751bd4fe43Sopenharmony_ci    #define HI_TRACE(level, enModId, fmt...) \
761bd4fe43Sopenharmony_ci        do {                                 \
771bd4fe43Sopenharmony_ci            if (level <= HI_DBG_ERR)         \
781bd4fe43Sopenharmony_ci                (hi_void)fprintf(stderr, ##fmt);       \
791bd4fe43Sopenharmony_ci        } while (0)
801bd4fe43Sopenharmony_ci
811bd4fe43Sopenharmony_ci#else
821bd4fe43Sopenharmony_ci    #define HI_ASSERT(expr)
831bd4fe43Sopenharmony_ci    #define HI_TRACE(level, enModId, fmt...)
841bd4fe43Sopenharmony_ci#endif
851bd4fe43Sopenharmony_ci
861bd4fe43Sopenharmony_ci#else
871bd4fe43Sopenharmony_ci
881bd4fe43Sopenharmony_ci/* For Linux Kernel : HI_PRINT, HI_ASSERT, HI_TRACE */
891bd4fe43Sopenharmony_ci#define HI_PRINT      (hi_void)osal_printk
901bd4fe43Sopenharmony_ci
911bd4fe43Sopenharmony_ciint HI_LOG(HI_S32 level, MOD_ID_E enModId, const char *fmt, ...) __attribute__((format(printf, 3, 4)));
921bd4fe43Sopenharmony_ci
931bd4fe43Sopenharmony_ci/* #ifdef HI_DEBUG */
941bd4fe43Sopenharmony_ci#ifdef CONFIG_HI_LOG_TRACE_SUPPORT
951bd4fe43Sopenharmony_ci    /* Using samples:   HI_ASSERT(x>y); */
961bd4fe43Sopenharmony_ci    #define HI_ASSERT(expr)               \
971bd4fe43Sopenharmony_ci    do {                                   \
981bd4fe43Sopenharmony_ci        if (!(expr)) {                    \
991bd4fe43Sopenharmony_ci            osal_panic("\nASSERT at:\n"   \
1001bd4fe43Sopenharmony_ci                  "  >Function : %s\n"    \
1011bd4fe43Sopenharmony_ci                  "  >Line No. : %d\n"    \
1021bd4fe43Sopenharmony_ci                  "  >Condition: %s\n",   __FUNCTION__, __LINE__, #expr); \
1031bd4fe43Sopenharmony_ci        } \
1041bd4fe43Sopenharmony_ci    } while (0)
1051bd4fe43Sopenharmony_ci
1061bd4fe43Sopenharmony_ci    /* Using samples:
1071bd4fe43Sopenharmony_ci     * HI_TRACE(HI_DBG_DEBUG, HI_ID_CMPI, "Test %d, %s\n", 12, "Test");
1081bd4fe43Sopenharmony_ci     */
1091bd4fe43Sopenharmony_ci    #define HI_TRACE (hi_void)HI_LOG
1101bd4fe43Sopenharmony_ci#else
1111bd4fe43Sopenharmony_ci    #define HI_ASSERT(expr)
1121bd4fe43Sopenharmony_ci    #define HI_TRACE(level, enModId, fmt...)
1131bd4fe43Sopenharmony_ci#endif
1141bd4fe43Sopenharmony_ci
1151bd4fe43Sopenharmony_ci#endif /* end of __KERNEL__ */
1161bd4fe43Sopenharmony_ci
1171bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_EMERG)
1181bd4fe43Sopenharmony_ci#define HI_EMERG_TRACE(mod, fmt...) HI_TRACE(HI_DBG_EMERG, mod, fmt)
1191bd4fe43Sopenharmony_ci#else
1201bd4fe43Sopenharmony_ci#define HI_EMERG_TRACE(mod, fmt...)
1211bd4fe43Sopenharmony_ci#endif
1221bd4fe43Sopenharmony_ci
1231bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_ALERT)
1241bd4fe43Sopenharmony_ci#define HI_ALERT_TRACE(mod, fmt...) HI_TRACE(HI_DBG_ALERT, mod, fmt)
1251bd4fe43Sopenharmony_ci#else
1261bd4fe43Sopenharmony_ci#define HI_ALERT_TRACE(mod, fmt...)
1271bd4fe43Sopenharmony_ci#endif
1281bd4fe43Sopenharmony_ci
1291bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_CRIT)
1301bd4fe43Sopenharmony_ci#define HI_CRIT_TRACE(mod, fmt...) HI_TRACE(HI_DBG_CRIT, mod, fmt)
1311bd4fe43Sopenharmony_ci#else
1321bd4fe43Sopenharmony_ci#define HI_CRIT_TRACE(mod, fmt...)
1331bd4fe43Sopenharmony_ci#endif
1341bd4fe43Sopenharmony_ci
1351bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_ERR)
1361bd4fe43Sopenharmony_ci#define HI_ERR_TRACE(mod, fmt...) HI_TRACE(HI_DBG_ERR, mod, fmt)
1371bd4fe43Sopenharmony_ci#else
1381bd4fe43Sopenharmony_ci#define HI_ERR_TRACE(mod, fmt...)
1391bd4fe43Sopenharmony_ci#endif
1401bd4fe43Sopenharmony_ci
1411bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_WARN)
1421bd4fe43Sopenharmony_ci#define HI_WARN_TRACE(mod, fmt...) HI_TRACE(HI_DBG_WARN, mod, fmt)
1431bd4fe43Sopenharmony_ci#else
1441bd4fe43Sopenharmony_ci#define HI_WARN_TRACE(mod, fmt...)
1451bd4fe43Sopenharmony_ci#endif
1461bd4fe43Sopenharmony_ci
1471bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_NOTICE)
1481bd4fe43Sopenharmony_ci#define HI_NOTICE_TRACE(mod, fmt...) HI_TRACE(HI_DBG_NOTICE, mod, fmt)
1491bd4fe43Sopenharmony_ci#else
1501bd4fe43Sopenharmony_ci#define HI_NOTICE_TRACE(mod, fmt...)
1511bd4fe43Sopenharmony_ci#endif
1521bd4fe43Sopenharmony_ci
1531bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_INFO)
1541bd4fe43Sopenharmony_ci#define HI_INFO_TRACE(mod, fmt...) HI_TRACE(HI_DBG_INFO, mod, fmt)
1551bd4fe43Sopenharmony_ci#else
1561bd4fe43Sopenharmony_ci#define HI_INFO_TRACE(mod, fmt...)
1571bd4fe43Sopenharmony_ci#endif
1581bd4fe43Sopenharmony_ci
1591bd4fe43Sopenharmony_ci#if (CONFIG_HI_LOG_TRACE_LEVEL >= HI_DBG_DEBUG)
1601bd4fe43Sopenharmony_ci#define HI_DEBUG_TRACE(mod, fmt...) HI_TRACE(HI_DBG_DEBUG, mod, fmt)
1611bd4fe43Sopenharmony_ci#else
1621bd4fe43Sopenharmony_ci#define HI_DEBUG_TRACE(mod, fmt...)
1631bd4fe43Sopenharmony_ci#endif
1641bd4fe43Sopenharmony_ci
1651bd4fe43Sopenharmony_ci
1661bd4fe43Sopenharmony_ci#ifdef __cplusplus
1671bd4fe43Sopenharmony_ci#if __cplusplus
1681bd4fe43Sopenharmony_ci}
1691bd4fe43Sopenharmony_ci#endif
1701bd4fe43Sopenharmony_ci#endif /* __cplusplus */
1711bd4fe43Sopenharmony_ci
1721bd4fe43Sopenharmony_ci#endif /* __HI_DEBUG_H__ */
1731bd4fe43Sopenharmony_ci
174