154568cb3Sopenharmony_ci/*
254568cb3Sopenharmony_ci * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved.
354568cb3Sopenharmony_ci *
454568cb3Sopenharmony_ci * UniProton is licensed under Mulan PSL v2.
554568cb3Sopenharmony_ci * You can use this software according to the terms and conditions of the Mulan PSL v2.
654568cb3Sopenharmony_ci * You may obtain a copy of Mulan PSL v2 at:
754568cb3Sopenharmony_ci *          http://license.coscl.org.cn/MulanPSL2
854568cb3Sopenharmony_ci * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
954568cb3Sopenharmony_ci * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
1054568cb3Sopenharmony_ci * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
1154568cb3Sopenharmony_ci * See the Mulan PSL v2 for more details.
1254568cb3Sopenharmony_ci * Create: 2009-12-22
1354568cb3Sopenharmony_ci * Description: 错误处理内部头文件
1454568cb3Sopenharmony_ci */
1554568cb3Sopenharmony_ci#ifndef PRT_ERR_EXTERNAL_H
1654568cb3Sopenharmony_ci#define PRT_ERR_EXTERNAL_H
1754568cb3Sopenharmony_ci
1854568cb3Sopenharmony_ci#include "prt_err.h"
1954568cb3Sopenharmony_ci
2054568cb3Sopenharmony_ciextern void OsErrHandle(const char *fileName, U32 lineNo, U32 errorNo, U32 paraLen, void *para);
2154568cb3Sopenharmony_ci/*
2254568cb3Sopenharmony_ci * 模块间宏定义
2354568cb3Sopenharmony_ci */
2454568cb3Sopenharmony_ci#define OS_ERR_RECORD_N 3  // 表示保留二进制低n位,计算OS_ERR_RECORD_NUM用,OS_ERR_RECORD_NUM为2的n次方+1
2554568cb3Sopenharmony_ci
2654568cb3Sopenharmony_ci#define OS_ERR_RECORD_NUM \
2754568cb3Sopenharmony_ci    ((1U << OS_ERR_RECORD_N) + 1)  // 2的n次方+1,目前n取3,NUM为9,第一次错误固定记录,后面8个循环记录。
2854568cb3Sopenharmony_ci
2954568cb3Sopenharmony_ci#define OS_ERR_MAGIC_WORD 0xa1b2d4f8
3054568cb3Sopenharmony_ci
3154568cb3Sopenharmony_ci#define OS_ERR_LEVEL_HIGH 0
3254568cb3Sopenharmony_ci#define OS_ERR_LEVEL_LOW 2
3354568cb3Sopenharmony_ci#define OS_LOG_LEVEL_FORCE 0xFF
3454568cb3Sopenharmony_ci
3554568cb3Sopenharmony_ci#define OS_REPORT_ERROR(errNo)                                       \
3654568cb3Sopenharmony_ci    do {                                                             \
3754568cb3Sopenharmony_ci        OsErrHandle("os_file", OS_ERR_MAGIC_WORD, (errNo), 0, NULL); \
3854568cb3Sopenharmony_ci    } while (0)
3954568cb3Sopenharmony_ci
4054568cb3Sopenharmony_ci/* 用于OS_OPTION_NFTL_ERR_POST_PROC */
4154568cb3Sopenharmony_ci#define OS_ERROR_TYPE_NUM (ERRTYPE_FATAL >> 24) /* 中断中需要延后处理的错误类型(所有低于FATAL等级的类型)数 */
4254568cb3Sopenharmony_ci
4354568cb3Sopenharmony_ci/* errno中错误大类的类型掩码 */
4454568cb3Sopenharmony_ci#define OS_ERROR_TYPE_MASK (0xffU << 24)
4554568cb3Sopenharmony_ci
4654568cb3Sopenharmony_ci#define OS_ERROR_LOG_REPORT(traceLevel, format, ...)
4754568cb3Sopenharmony_ci
4854568cb3Sopenharmony_ci#if defined(OS_DBG)
4954568cb3Sopenharmony_ci#define LOG_ADDR_DBG(addr) (addr)
5054568cb3Sopenharmony_ci#define OS_LOG_REPORT_DBG(format, ...) OS_ERROR_LOG_REPORT(OS_ERR_LEVEL_HIGH, (format), ##__VA_ARGS__)
5154568cb3Sopenharmony_ci#else
5254568cb3Sopenharmony_ci#define LOG_ADDR_DBG(addr) ((void)(addr), 0x0U)
5354568cb3Sopenharmony_ci#define OS_LOG_REPORT_DBG(format, ...)
5454568cb3Sopenharmony_ci#endif
5554568cb3Sopenharmony_ci
5654568cb3Sopenharmony_ciextern void OsErrRecordInCda(U32 errorNo);
5754568cb3Sopenharmony_ci
5854568cb3Sopenharmony_ci// 函数返回值void的,都通过此接口记录返回值到cda
5954568cb3Sopenharmony_ci#define OS_ERR_RECORD(errorNo)          \
6054568cb3Sopenharmony_ci    do {                                \
6154568cb3Sopenharmony_ci        U32 errorNo_ = (errorNo);       \
6254568cb3Sopenharmony_ci        if (errorNo_ != OS_OK) {       \
6354568cb3Sopenharmony_ci            OsErrRecordInCda(errorNo_); \
6454568cb3Sopenharmony_ci        }                               \
6554568cb3Sopenharmony_ci    } while (0)
6654568cb3Sopenharmony_ci
6754568cb3Sopenharmony_ci#endif /* PRT_ERR_EXTERNAL_H */
68