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