* Copyright (c) 2025 Huawei Technologies Co., Ltd.
* This program is free software, you can redistribute it and/or modify it under the terms and conditions of
* CANN Open Software License Agreement Version 2.0 (the "License").
* Please refer to the License for details. You may not use this file except in compliance with the License.
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED,
* INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE.
* See LICENSE in the root of the software repository for the full text of the License.
*/
#include <stdint.h>
#include "ascend_hal_error.h"
#include "ascend_hal.h"
#ifdef ENABLE_BUILD_PRODUCT
#include "drv_user_common.h"
#endif
typedef enum tagdrvErrorCode_t {
DRV_ERRCOED_NONE = 0,
DRV_ERRCOED_NO_DEVICE = 1,
DRV_ERRCOED_INVALID_DEVICE = 2,
DRV_ERRCOED_INVALID_ARGUMENT = 3,
DRV_ERRCOED_MALLOC_FAIL = 4,
DRV_ERRCOED_RESOURCES_BUSY = 5,
DRV_ERRCOED_NO_RESOURCES = 6,
DRV_ERRCOED_OPER_NOT_PERMITTED = 7,
DRV_ERRCOED_NO_EVENT_RESOURCES = 8,
DRV_ERRCOED_NO_STREAM_RESOURCES = 9,
DRV_ERRCOED_NO_NOTIFY_RESOURCES = 10,
DRV_ERRCOED_NO_MODEL_RESOURCES = 11,
DRV_ERRCOED_QUEUE_FULL = 12,
DRV_ERRCOED_CDQ_RESOURCES = 13,
DRV_ERRCOED_NOT_SUPPORT = 14,
DRV_ERRCOED_UNAUTHORIZED_ACCESS_DEVICE = 15,
DRV_ERRCOED_QUEUE_EMPTY = 16,
DRV_ERRCOED_NO_PROCESS = 17,
DRV_ERRCODE_WAIT_TIMEOUT = 18,
DRV_ERRCODE_NOT_EXIST = 19,
DRV_ERRCOED_INNER = 9999,
} drvErrorCode_t;
static const int32_t g_error_code_map[] = {
[DRV_ERROR_NONE] = DRV_ERRCOED_NONE,
[DRV_ERROR_NO_DEVICE] = DRV_ERRCOED_NO_DEVICE,
[DRV_ERROR_INVALID_DEVICE] = DRV_ERRCOED_INVALID_DEVICE,
[DRV_ERROR_INVALID_VALUE] = DRV_ERRCOED_INVALID_ARGUMENT,
[DRV_ERROR_INVALID_HANDLE] = DRV_ERRCOED_INVALID_ARGUMENT,
[DRV_ERROR_INVALID_MALLOC_TYPE] = DRV_ERRCOED_INNER,
[DRV_ERROR_OUT_OF_MEMORY] = DRV_ERRCOED_MALLOC_FAIL,
[DRV_ERROR_INNER_ERR] = DRV_ERRCOED_INNER,
[DRV_ERROR_PARA_ERROR] = DRV_ERRCOED_INVALID_ARGUMENT,
[DRV_ERROR_UNINIT] = DRV_ERRCOED_INNER,
[DRV_ERROR_REPEATED_INIT] = DRV_ERRCOED_INNER,
[DRV_ERROR_NOT_EXIST] = DRV_ERRCODE_NOT_EXIST,
[DRV_ERROR_REPEATED_USERD] = DRV_ERRCOED_INNER,
[DRV_ERROR_BUSY] = DRV_ERRCOED_RESOURCES_BUSY,
[DRV_ERROR_NO_RESOURCES] = DRV_ERRCOED_NO_RESOURCES,
[DRV_ERROR_OUT_OF_CMD_SLOT] = DRV_ERRCOED_INNER,
[DRV_ERROR_WAIT_TIMEOUT] = DRV_ERRCODE_WAIT_TIMEOUT,
[DRV_ERROR_IOCRL_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_CREATE] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_CONNECT] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_BIND] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_LISTEN] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_ACCEPT] = DRV_ERRCOED_INNER,
[DRV_ERROR_CLIENT_BUSY] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_SET] = DRV_ERRCOED_INNER,
[DRV_ERROR_SOCKET_CLOSE] = DRV_ERRCOED_INNER,
[DRV_ERROR_RECV_MESG] = DRV_ERRCOED_INNER,
[DRV_ERROR_SEND_MESG] = DRV_ERRCOED_INNER,
[DRV_ERROR_SERVER_BUSY] = DRV_ERRCOED_INNER,
[DRV_ERROR_CONFIG_READ_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_STATUS_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_SERVER_CREATE_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_WAIT_INTERRUPT] = DRV_ERRCOED_INNER,
[DRV_ERROR_BUS_DOWN] = DRV_ERRCOED_INNER,
[DRV_ERROR_DEVICE_NOT_READY] = DRV_ERRCOED_INNER,
[DRV_ERROR_REMOTE_NOT_LISTEN] = DRV_ERRCOED_INNER,
[DRV_ERROR_NON_BLOCK] = DRV_ERRCOED_INNER,
[DRV_ERROR_OVER_LIMIT] = DRV_ERRCOED_INNER,
[DRV_ERROR_FILE_OPS] = DRV_ERRCOED_INNER,
[DRV_ERROR_MBIND_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_MALLOC_FAIL] = DRV_ERRCOED_MALLOC_FAIL,
[DRV_ERROR_REPEATED_SUBSCRIBED] = DRV_ERRCOED_INNER,
[DRV_ERROR_PROCESS_EXIT] = DRV_ERRCOED_INNER,
[DRV_ERROR_DEV_PROCESS_HANG] = DRV_ERRCOED_INNER,
[DRV_ERROR_REMOTE_NO_SESSION] = DRV_ERRCOED_INNER,
[DRV_ERROR_HOT_RESET_IN_PROGRESS] = DRV_ERRCOED_INNER,
[DRV_ERROR_OPER_NOT_PERMITTED] = DRV_ERRCOED_OPER_NOT_PERMITTED,
[DRV_ERROR_NO_EVENT_RESOURCES] = DRV_ERRCOED_NO_EVENT_RESOURCES,
[DRV_ERROR_NO_STREAM_RESOURCES] = DRV_ERRCOED_NO_STREAM_RESOURCES,
[DRV_ERROR_NO_NOTIFY_RESOURCES] = DRV_ERRCOED_NO_NOTIFY_RESOURCES,
[DRV_ERROR_NO_MODEL_RESOURCES] = DRV_ERRCOED_NO_MODEL_RESOURCES,
[DRV_ERROR_TRY_AGAIN] = DRV_ERRCOED_INNER,
[DRV_ERROR_DST_PATH_ILLEGAL] = DRV_ERRCOED_INNER,
[DRV_ERROR_OPEN_FAILED] = DRV_ERRCOED_INNER,
[DRV_ERROR_NO_FREE_SPACE] = DRV_ERRCOED_INNER,
[DRV_ERROR_LOCAL_ABNORMAL_FILE] = DRV_ERRCOED_INNER,
[DRV_ERROR_DST_PERMISSION_DENIED] = DRV_ERRCOED_INNER,
[DRV_ERROR_DST_NO_SUCH_FILE] = DRV_ERRCOED_INNER,
[DRV_ERROR_MEMORY_OPT_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_RUNTIME_ON_OTHER_PLAT] = DRV_ERRCOED_INNER,
[DRV_ERROR_SQID_FULL] = DRV_ERRCOED_INNER,
[DRV_ERROR_SERVER_HAS_BEEN_CREATED] = DRV_ERRCOED_INNER,
[DRV_ERROR_NO_PROCESS] = DRV_ERRCOED_NO_PROCESS,
[DRV_ERROR_NO_SUBSCRIBE_THREAD] = DRV_ERRCOED_INNER,
[DRV_ERROR_NON_SCHED_GRP_MUL_THREAD] = DRV_ERRCOED_INNER,
[DRV_ERROR_NO_GROUP] = DRV_ERRCOED_INNER,
[DRV_ERROR_GROUP_EXIST] = DRV_ERRCOED_INNER,
[DRV_ERROR_THREAD_EXCEEDS_SPEC] = DRV_ERRCOED_INNER,
[DRV_ERROR_THREAD_NOT_RUNNIG] = DRV_ERRCOED_INNER,
[DRV_ERROR_PROCESS_NOT_MATCH] = DRV_ERRCOED_INNER,
[DRV_ERROR_EVENT_NOT_MATCH] = DRV_ERRCOED_INNER,
[DRV_ERROR_PROCESS_REPEAT_ADD] = DRV_ERRCOED_INNER,
[DRV_ERROR_GROUP_NON_SCHED] = DRV_ERRCOED_INNER,
[DRV_ERROR_NO_EVENT] = DRV_ERRCOED_INNER,
[DRV_ERROR_COPY_USER_FAIL] = DRV_ERRCOED_INNER,
[DRV_ERROR_QUEUE_EMPTY] = DRV_ERRCOED_QUEUE_EMPTY,
[DRV_ERROR_QUEUE_FULL] = DRV_ERRCOED_QUEUE_FULL,
[DRV_ERROR_RUN_IN_ILLEGAL_CPU] = DRV_ERRCOED_INNER,
[DRV_ERROR_SUBSCRIBE_THREAD_TIMEOUT] = DRV_ERRCOED_INNER,
[DRV_ERROR_BAD_ADDRESS] = DRV_ERRCOED_INNER,
[DRV_ERROR_DST_FILE_IS_BEING_WRITTEN] = DRV_ERRCOED_INNER,
[DRV_ERROR_EPOLL_CLOSE] = DRV_ERRCOED_INNER,
[DRV_ERROR_CDQ_ABNORMAL] = DRV_ERRCOED_INNER,
[DRV_ERROR_CDQ_NOT_EXIST] = DRV_ERRCOED_INNER,
[DRV_ERROR_NO_CDQ_RESOURCES] = DRV_ERRCOED_CDQ_RESOURCES,
[DRV_ERROR_CDQ_QUIT] = DRV_ERRCOED_INNER,
[DRV_ERROR_PARTITION_NOT_RIGHT] = DRV_ERRCOED_INNER,
[DRV_ERROR_RESOURCE_OCCUPIED] = DRV_ERRCOED_RESOURCES_BUSY,
[DRV_ERROR_PERMISSION] = DRV_ERRCOED_OPER_NOT_PERMITTED,
[DRV_ERROR_RESUME] = DRV_ERRCOED_INNER,
[DEV_ERROR_UNAUTHORIZED_ACCESS_DEVICE] = DRV_ERRCOED_UNAUTHORIZED_ACCESS_DEVICE,
};
int32_t halMapErrorCode(drvError_t code)
{
if ((uint32_t)code < sizeof(g_error_code_map) / sizeof(int32_t)) {
return g_error_code_map[code];
} else if (code == DRV_ERROR_NOT_SUPPORT) {
return (int32_t)DRV_ERRCOED_NOT_SUPPORT;
}
return (int32_t)DRV_ERRCOED_INNER;
}
#ifdef ENABLE_BUILD_PRODUCT
#define ERROR_CODE_MAX_NUM 128
int error_code_filter(unsigned int *errorcode, int *errorcount)
{
int index = 0;
bool isDuplicate;
int i, j;
if (errorcode == NULL || errorcount == NULL || *errorcount < 0
|| *errorcount > ERROR_CODE_MAX_NUM) {
return DRV_ERRCOED_INVALID_ARGUMENT;
}
for (i = 0; i < *errorcount; i++) {
isDuplicate = false;
for (j = 0; j < index; j++) {
if (errorcode[i] == errorcode[j]) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
errorcode[index++] = errorcode[i];
}
}
*errorcount = index;
return DRV_ERRCOED_NONE;
}
#endif