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