xref: /kernel/liteos_m/utils/los_debug.h (revision 3d8536b4)
1/*
2 * Copyright (c) 2013-2019 Huawei Technologies Co., Ltd. All rights reserved.
3 * Copyright (c) 2020-2021 Huawei Device Co., Ltd. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without modification,
6 * are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice, this list of
9 *    conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice, this list
12 *    of conditions and the following disclaimer in the documentation and/or other materials
13 *    provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors may be used
16 *    to endorse or promote products derived from this software without specific prior written
17 *    permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
23 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
26 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
27 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
28 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
29 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/**@defgroup los_debug
33 * @ingroup kernel
34 */
35
36#ifndef _LOS_DEBUG_H
37#define _LOS_DEBUG_H
38
39#include "los_config.h"
40#include "los_compiler.h"
41
42#ifdef __cplusplus
43#if __cplusplus
44extern "C" {
45#endif /* __cplusplus */
46#endif /* __cplusplus */
47
48#if (LOSCFG_PLATFORM_EXC == 1)
49enum MemMangType {
50    MEM_MANG_MEMBOX,
51    MEM_MANG_MEMORY,
52    MEM_MANG_EMPTY
53};
54
55typedef struct {
56    UINT32 type;
57    UINT32 startAddr;
58    UINT32 size;
59    VOID *blkAddrArray;
60} MemInfo;
61
62typedef struct {
63    enum MemMangType type;
64    UINT32 startAddr;
65    UINT32 size;
66    UINT32 free;
67    UINT32 blockSize;
68    UINT32 errorAddr;
69    UINT32 errorLen;
70    UINT32 errorOwner;
71} MemInfoCB;
72#endif
73
74typedef enum {
75    EXC_REBOOT,
76    EXC_ASSERT,
77    EXC_PANIC,
78    EXC_STACKOVERFLOW,
79    EXC_INTERRUPT,
80    EXC_TYPE_END
81} EXC_TYPE;
82
83typedef VOID (*ExcHookFn)(EXC_TYPE excType);
84
85VOID OsExcHookRegister(ExcHookFn excHookFn);
86
87VOID OsDoExcHook(EXC_TYPE excType);
88
89#define LOG_EMG_LEVEL       0
90
91#define LOG_COMMON_LEVEL    (LOG_EMG_LEVEL + 1)
92
93#define LOG_ERR_LEVEL       (LOG_COMMON_LEVEL + 1)
94
95#define LOG_WARN_LEVEL      (LOG_ERR_LEVEL + 1)
96
97#define LOG_INFO_LEVEL      (LOG_WARN_LEVEL + 1)
98
99#define LOG_DEBUG_LEVEL     (LOG_INFO_LEVEL + 1)
100
101#ifndef PRINT_LEVEL
102#define PRINT_LEVEL         LOG_ERR_LEVEL
103#endif
104
105typedef enum {
106    LOG_MODULE_KERNEL,
107    LOG_MODULE_FS,
108    LOS_MODULE_OTHERS
109} LogModuleType;
110
111/**
112 * @ingroup los_printf
113 * @brief Format and print data.
114 *
115 * @par Description:
116 * Print argument(s) according to fmt.
117 *
118 * @attention
119 * <ul>
120 * <li>None</li>
121 * </ul>
122 *
123 * @param type  [IN] Type LogModuleType indicates the log type.
124 * @param level [IN] Type LogLevel indicates the log level.
125 * @param fmt   [IN] Type char* controls the output as in C printf.
126 *
127 * @retval None
128 * @par Dependency:
129 * <ul><li>los_printf.h: the header file that contains the API declaration.</li></ul>
130 * @see LOS_Printf
131 */
132#if (LOSCFG_KERNEL_PRINTF == 1)
133extern INT32 printf(const CHAR *fmt, ...);
134extern INT32 OsLogLevelCheck(INT32 level);
135#define LOS_Printf(type, level, fmt, args...)   do { \
136    if (!OsLogLevelCheck(level)) {                   \
137        printf(fmt, ##args);                         \
138    }                                                \
139} while (0)
140#elif (LOSCFG_KERNEL_PRINTF == 0)
141#define LOS_Printf(type, level, fmt, args...)
142#else
143extern VOID HalConsoleOutput(LogModuleType type, INT32 level, const CHAR *fmt, ...);
144#define LOS_Printf HalConsoleOutput
145#endif
146
147#define PRINT_DEBUG(fmt, args...)    LOS_Printf(LOG_MODULE_KERNEL, LOG_DEBUG_LEVEL, fmt, ##args)
148#define PRINT_INFO(fmt, args...)     LOS_Printf(LOG_MODULE_KERNEL, LOG_INFO_LEVEL, fmt, ##args)
149#define PRINT_WARN(fmt, args...)     LOS_Printf(LOG_MODULE_KERNEL, LOG_WARN_LEVEL, fmt, ##args)
150#define PRINT_ERR(fmt, args...)      LOS_Printf(LOG_MODULE_KERNEL, LOG_ERR_LEVEL, fmt, ##args)
151#define PRINTK(fmt, args...)         LOS_Printf(LOG_MODULE_KERNEL, LOG_COMMON_LEVEL, fmt, ##args)
152#define PRINT_EMG(fmt, args...)      LOS_Printf(LOG_MODULE_KERNEL, LOG_EMG_LEVEL, fmt, ##args)
153
154#if PRINT_LEVEL < LOG_ERR_LEVEL
155#define LOS_ASSERT(judge)
156#else
157#define LOS_ASSERT(judge)                                                          \
158    do {                                                                           \
159        if ((judge) == 0) {                                                        \
160            OsDoExcHook(EXC_ASSERT);                                               \
161            (VOID)LOS_IntLock();                                                   \
162            PRINT_ERR("ASSERT ERROR! %s, %d, %s\n", __FILE__, __LINE__, __func__); \
163            while (1) { }                                                          \
164        }                                                                          \
165    } while (0)
166#endif
167
168typedef VOID (*BACK_TRACE_HOOK)(UINTPTR *LR, UINT32 LRSize, UINT32 jumpCount, UINTPTR SP);
169extern VOID OsBackTraceHookSet(BACK_TRACE_HOOK hook);
170extern VOID OsBackTraceHookCall(UINTPTR *LR, UINT32 LRSize, UINT32 jumpCount, UINTPTR SP);
171
172#ifdef __cplusplus
173#if __cplusplus
174}
175#endif /* __cplusplus */
176#endif /* __cplusplus */
177
178#endif /* _LOS_PRINTF_H */
179