* 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 "api_c.h"
#include "api.hpp"
#include "api_handle_guard.h"
#include "device_enum_desc.hpp"
#include "errcode_manage.hpp"
#include "error_code.h"
#include "driver/ascend_hal.h"
#include "osal.hpp"
#include "prof_map_ge_model_device.hpp"
#include "runtime_keeper.h"
#include "global_state_manager.hpp"
using namespace cce::runtime;
#ifdef __cplusplus
extern "C" {
#endif
VISIBILITY_DEFAULT
rtError_t rtOpenNetService(const rtNetServiceOpenArgs* args)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->OpenNetService(args);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtCloseNetService()
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->CloseNetService();
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDeviceIDs(uint32_t* devices, uint32_t len)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDeviceIDs(devices, len);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsSetDevice(int32_t devId) { return rtSetDevice(devId); }
VISIBILITY_DEFAULT
rtError_t rtSetDevice(int32_t devId)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->SetDevice(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDevice(int32_t* devId)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDevice(devId);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_CONTEXT_NULL, ACL_ERROR_RT_CONTEXT_NULL);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsGetDevice(int32_t* devId) { return rtGetDevice(devId); }
VISIBILITY_DEFAULT
rtError_t rtGetVisibleDeviceIdByLogicDeviceId(const int32_t logicDeviceId, int32_t* const visibleDeviceId)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetVisibleDeviceIdByLogicDeviceId(logicDeviceId, visibleDeviceId);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_CONTEXT_NULL, ACL_ERROR_RT_CONTEXT_NULL);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceReset(int32_t devId)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceReset(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsResetDevice(int32_t devId) { return rtDeviceReset(devId); }
VISIBILITY_DEFAULT
rtError_t rtsDeviceResetForce(int32_t devId) { return rtDeviceResetForce(devId); }
VISIBILITY_DEFAULT
rtError_t rtsGetRunMode(rtRunMode* runMode) { return rtGetRunMode(runMode); }
VISIBILITY_DEFAULT
rtError_t rtsGetDeviceUtilizations(const int32_t devId, const rtTypeUtil_t kind, uint8_t* const util)
{
return rtGetAllUtilizations(devId, kind, util);
}
VISIBILITY_DEFAULT
rtError_t rtsGetSocVersion(char_t* ver, const uint32_t maxLen) { return rtGetSocVersion(ver, maxLen); }
VISIBILITY_DEFAULT
rtError_t rtsSetOpWaitTimeOut(uint32_t timeout) { return rtSetOpWaitTimeOut(timeout); }
VISIBILITY_DEFAULT
rtError_t rtDeviceSetLimit(int32_t devId, rtLimitType_t type, uint32_t val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceSetLimit(devId, type, val);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceGetLimit(rtLimitType_t type, uint32_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceGetLimit(type, val);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceSynchronize(void)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceSynchronize();
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceSynchronizeWithTimeout(int32_t timeout)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceSynchronize(timeout);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceGetStreamPriorityRange(int32_t* leastPriority, int32_t* greatestPriority)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceGetStreamPriorityRange(leastPriority, greatestPriority);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceGetStreamPriorityRange(int32_t* leastPriority, int32_t* greatestPriority)
{
return rtDeviceGetStreamPriorityRange(leastPriority, greatestPriority);
}
VISIBILITY_DEFAULT
rtError_t rtGetDeviceInfo(uint32_t deviceId, int32_t moduleType, int32_t infoType, int64_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDeviceInfo(deviceId, moduleType, infoType, val);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetPhyDeviceInfo(uint32_t phyId, int32_t moduleType, int32_t infoType, int64_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetPhyDeviceInfo(phyId, moduleType, infoType, val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsSetTsDevice(uint32_t tsId) { return rtSetTSDevice(tsId); }
VISIBILITY_DEFAULT
rtError_t rtSetTSDevice(uint32_t tsId)
{
DevProperties prop;
const Runtime* const rtInstance = Runtime::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(rtInstance);
rtError_t ret = GET_DEV_PROPERTIES(rtInstance->GetChipType(), prop);
ERROR_RETURN_WITH_EXT_ERRCODE(ret);
if (prop.tsCount == 1U) {
return ACL_RT_SUCCESS;
}
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceSetTsId(tsId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetTSDevice(uint32_t* tsId)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceGetTsId(tsId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDeviceIdByGeModelIdx(uint32_t geModelIdx, uint32_t* deviceId)
{
RT_LOG(RT_LOG_DEBUG, "geModelIdx:%u", geModelIdx);
PARAM_NULL_RETURN_ERROR_WITH_EXT_ERRCODE(deviceId, RT_ERROR_INVALID_VALUE);
uint32_t drvDeviceId;
rtError_t error = ProfMapGeModelDevice::Instance().GetDeviceIdByGeModelIdx(geModelIdx, &drvDeviceId);
if (error != RT_ERROR_NONE) {
RT_LOG_OUTER_MSG_IMPL(
ErrorCode::EE1011, __func__, std::to_string(geModelIdx), "geModelIdx",
"The device of geModelIdx does not exist");
ERROR_RETURN_WITH_EXT_ERRCODE(error);
}
int32_t userDeviceId;
error = rtGetUserDevIdByLogicDevId(static_cast<int32_t>(drvDeviceId), &userDeviceId);
COND_RETURN_ERROR_MSG_INNER(
error != RT_ERROR_NONE, error, "Failed to get userDeviceId by drv devId:%u, retCode=%#x.", drvDeviceId,
static_cast<uint32_t>(error));
*deviceId = static_cast<uint32_t>(userDeviceId);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtSetDeviceEx(int32_t devId)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->SetDevice(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceResetEx(int32_t devId)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceReset(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceGetBareTgid(uint32_t* pid)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceGetBareTgid(pid);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceGetBareTgid(uint32_t* pid) { return rtDeviceGetBareTgid(pid); }
VISIBILITY_DEFAULT
rtError_t rtDeviceResetWithoutTsd(int32_t devId)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance(API_ENV_FLAGS_NO_TSD);
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceReset(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDeviceCapability(int32_t deviceId, int32_t moduleType, int32_t featureType, int32_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDeviceCapability(deviceId, moduleType, featureType, val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceGetCapability(int32_t deviceId, int32_t devFeatureType, int32_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
rtError_t error = RT_ERROR_NONE;
COND_RETURN_EXT_ERRCODE_AND_MSG_OUTER_WITH_PARAM_NAME(
(devFeatureType >= static_cast<int32_t>(RT_DEV_FEATURE_MAX)) || (devFeatureType < 0), RT_ERROR_INVALID_VALUE,
DevFeatureTypeToString(devFeatureType), "devFeatureType", "[0, " + std::to_string(RT_DEV_FEATURE_MAX) + ")");
if (devFeatureType == static_cast<int32_t>(RT_FEATURE_TSCPU_TASK_UPDATE_SUPPORT_AIC_AIV)) {
error = apiInstance->GetDeviceCapability(
deviceId, static_cast<int32_t>(RT_MODULE_TYPE_TSCPU), static_cast<int32_t>(FEATURE_TYPE_MODEL_TASK_UPDATE),
val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
switch (*val) {
case static_cast<int32_t>(RT_DEV_CAP_SUPPORT):
*val = static_cast<int32_t>(FEATURE_SUPPORT);
break;
case static_cast<int32_t>(RT_DEV_CAP_NOT_SUPPORT):
*val = static_cast<int32_t>(FEATURE_NOT_SUPPORT);
break;
default:
*val = static_cast<int32_t>(FEATURE_NOT_SUPPORT);
break;
}
} else if (devFeatureType == static_cast<int32_t>(RT_FEATURE_SYSTEM_MEMQ_EVENT_CROSS_DEV)) {
error = apiInstance->GetDeviceCapability(
deviceId, static_cast<int32_t>(RT_MODULE_TYPE_SYSTEM),
static_cast<int32_t>(FEATURE_TYPE_MEMQ_EVENT_CROSS_DEV), val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
} else if (devFeatureType == static_cast<int32_t>(RT_FEATURE_AICPU_SCHEDULE_TYPE)) {
error = apiInstance->GetDeviceCapability(
deviceId, static_cast<int32_t>(MODULE_TYPE_AICPU), static_cast<int32_t>(FEATURE_TYPE_SCHE), val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
} else if (devFeatureType == static_cast<int32_t>(RT_FEATURE_SYSTEM_TASKID_BIT_WIDTH)) {
error = apiInstance->GetDeviceCapability(
deviceId, static_cast<int32_t>(RT_MODULE_TYPE_SYSTEM), devFeatureType, val);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
} else {
RT_LOG_OUTER_MSG_WITH_FUNC(
ErrorCode::EE1003, DevFeatureTypeToString(devFeatureType), "devFeatureType",
"[" + std::to_string(RT_FEATURE_TSCPU_TASK_UPDATE_SUPPORT_AIC_AIV) + ", " +
std::to_string(RT_DEV_FEATURE_MAX) + ")");
return ACL_ERROR_RT_PARAM_INVALID;
}
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDevMsg(rtGetDevMsgType_t getMsgType, rtGetMsgCallback callback)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDevMsg(getMsgType, callback);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
RTS_API rtError_t rtGetDeviceSatMode(rtFloatOverflowMode_t* floatOverflowMode)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t ret = apiInstance->GetDeviceSatMode(floatOverflowMode);
ERROR_RETURN_WITH_EXT_ERRCODE(ret);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
RTS_API rtError_t rtGetDeviceSatModeForStream(rtStream_t stm, rtFloatOverflowMode_t* floatOverflowMode)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
RT_VALIDATE_AND_UNWRAP_OBJECT(stm, Stream, targetStm);
const rtError_t ret = apiInstance->GetDeviceSatModeForStream(targetStm, floatOverflowMode);
ERROR_RETURN_WITH_EXT_ERRCODE(ret);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
RTS_API rtError_t rtDeviceStatusQuery(const uint32_t devId, rtDeviceStatus* deviceStatus)
{
Runtime* rtInstance = (IsRuntimeKeeperExiting() ? nullptr : Runtime::Instance());
NULL_RETURN_WARNING_WITH_EXT_ERRCODE(rtInstance, RT_ERROR_INSTANCE_NULL);
Api* const apiInstance = Api::Instance();
NULL_RETURN_WARNING_WITH_EXT_ERRCODE(apiInstance, RT_ERROR_API_NULL);
const rtError_t error = apiInstance->DeviceStatusQuery(devId, deviceStatus);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceTaskAbort(int32_t devId, uint32_t timeout)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceTaskAbort(devId, timeout);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtSetDeviceFailureMode(uint64_t failureMode)
{
const Runtime* const rtInstance = Runtime::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(rtInstance);
if (!IS_SUPPORT_CHIP_FEATURE(
rtInstance->GetChipType(), RtOptionalFeatureType::RT_FEATURE_DEVICE_FAILURE_MODE_SET)) {
RT_LOG_OUTER_MSG_WITH_FUNC(ErrorCode::EE1005);
return GetRtExtErrCodeAndSetGlobalErr(RT_ERROR_FEATURE_NOT_SUPPORT);
}
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->SetDeviceFailureMode(failureMode);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetDeviceStatus(const int32_t devId, rtDevStatus_t* const status)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDeviceStatus(devId, status);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtHdcServerCreate(const int32_t devId, const rtHdcServiceType_t type, rtHdcServer_t* const server)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->HdcServerCreate(devId, type, server);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtHdcServerDestroy(rtHdcServer_t const server)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->HdcServerDestroy(server);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtHdcSessionConnect(
const int32_t peerNode, const int32_t peerDevId, rtHdcClient_t const client, rtHdcSession_t* const session)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->HdcSessionConnect(peerNode, peerDevId, client, session);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtHdcSessionClose(rtHdcSession_t const session)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->HdcSessionClose(session);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetHostCpuDevId(int32_t* const devId)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetHostCpuDevId(devId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDebugSetDumpMode(const uint64_t mode)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DebugSetDumpMode(mode);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDebugGetStalledCore(rtDbgCoreInfo_t* const coreInfo)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DebugGetStalledCore(coreInfo);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDebugReadAICore(rtDebugMemoryParam_t* const param)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DebugReadAICore(param);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetBinBuffer(const rtBinHandle binHandle, const rtBinBufferType_t type, void** bin, uint32_t* binSize)
{
Api* apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
RT_VALIDATE_AND_UNWRAP_OBJECT_WITH_VALIDATOR(binHandle, Program, realProgram, ValidateProgramHandleForApi);
const rtError_t error = apiInstance->GetBinBuffer(RtPtrToPtr<rtBinHandle>(realProgram), type, bin, binSize);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtGetStackBuffer(
const rtBinHandle binHandle, uint32_t deviceId, const uint32_t stackType, const uint32_t coreType,
const uint32_t coreId, const void** stack, uint32_t* stackSize)
{
Api* apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
RT_VALIDATE_AND_UNWRAP_OBJECT_WITH_VALIDATOR(binHandle, Program, realProgram, ValidateProgramHandleForApi);
const rtError_t error = apiInstance->GetStackBuffer(
RtPtrToPtr<rtBinHandle>(realProgram), deviceId, stackType, coreType, coreId, stack, stackSize);
if (error == RT_ERROR_FEATURE_NOT_SUPPORT) {
return GetRtExtErrCodeAndSetGlobalErr(error);
}
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceStatusQuery(const uint32_t devId, rtDeviceStatus* deviceStatus)
{
return rtDeviceStatusQuery(devId, deviceStatus);
}
VISIBILITY_DEFAULT
rtError_t rtSetDefaultDeviceId(const int32_t deviceId)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->SetDefaultDeviceId(deviceId);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsSetDefaultDeviceId(const int32_t deviceId) { return rtSetDefaultDeviceId(deviceId); }
VISIBILITY_DEFAULT
RTS_API rtError_t rtsSetSysParamOpt(const rtSysParamOpt configOpt, const int64_t configVal)
{
return rtSetSysParamOpt(configOpt, configVal);
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceSynchronize(int32_t timeout) { return rtDeviceSynchronizeWithTimeout(timeout); }
VISIBILITY_DEFAULT
rtError_t rtsDeviceTaskAbort(int32_t devId, uint32_t timeout) { return rtDeviceTaskAbort(devId, timeout); }
VISIBILITY_DEFAULT
rtError_t rtsSetOpExecuteTimeOut(uint32_t timeout) { return rtSetOpExecuteTimeOut(timeout); }
VISIBILITY_DEFAULT
rtError_t rtsGetOpExecuteTimeOut(uint32_t* const timeout) { return rtGetOpExecuteTimeOut(timeout); }
VISIBILITY_DEFAULT
rtError_t rtsSetOpExecuteTimeOutWithMs(uint32_t timeout) { return rtSetOpExecuteTimeOutWithMs(timeout); }
VISIBILITY_DEFAULT
rtError_t rtsGetSysParamOpt(const rtSysParamOpt configOpt, int64_t* const configVal)
{
return rtGetSysParamOpt(configOpt, configVal);
}
VISIBILITY_DEFAULT
rtError_t rtsGetErrorVerbose(const uint32_t deviceId, rtErrorInfo* const errorInfo)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const Runtime* const rtInstance = Runtime::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(rtInstance);
if (!IS_SUPPORT_CHIP_FEATURE(rtInstance->GetChipType(), RtOptionalFeatureType::RT_FEATURE_DFX_ERR_GET_AND_REPAIR)) {
RT_LOG(
RT_LOG_WARNING, "Chip type(%d) does not support rtsGetErrorVerbose api.",
static_cast<int32_t>(rtInstance->GetChipType()));
return GetRtExtErrCodeAndSetGlobalErr(RT_ERROR_FEATURE_NOT_SUPPORT);
}
const rtError_t error = apiInstance->GetErrorVerbose(deviceId, errorInfo);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsRepairError(const uint32_t deviceId, const rtErrorInfo* const errorInfo)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const Runtime* const rtInstance = Runtime::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(rtInstance);
if (!IS_SUPPORT_CHIP_FEATURE(rtInstance->GetChipType(), RtOptionalFeatureType::RT_FEATURE_DFX_ERR_GET_AND_REPAIR)) {
RT_LOG(
RT_LOG_WARNING, "Chip type(%d) does not support rtsRepairError api.",
static_cast<int32_t>(rtInstance->GetChipType()));
return GetRtExtErrCodeAndSetGlobalErr(RT_ERROR_FEATURE_NOT_SUPPORT);
}
const rtError_t error = apiInstance->RepairError(deviceId, errorInfo);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDebugSetDumpMode(const uint64_t mode) { return rtDebugSetDumpMode(mode); }
VISIBILITY_DEFAULT
rtError_t rtsDebugGetStalledCore(rtDbgCoreInfo_t* const coreInfo) { return rtDebugGetStalledCore(coreInfo); }
VISIBILITY_DEFAULT
rtError_t rtsBinaryGetDevAddress(const rtBinHandle binHandle, void** bin, uint32_t* binSize)
{
return rtGetBinBuffer(binHandle, RT_BIN_DEVICE_ADDR, bin, binSize);
}
VISIBILITY_DEFAULT
rtError_t rtsDebugReadAICore(rtDebugMemoryParam* const param)
{
rtDebugMemoryParam_t debugParam = {};
debugParam.coreId = param->coreId;
debugParam.reserve = param->reserve;
debugParam.coreType = static_cast<uint32_t>(param->coreType);
debugParam.debugMemType = static_cast<rtDebugMemoryType_t>(static_cast<uint16_t>(param->debugMemType));
debugParam.elementSize = param->elementSize;
debugParam.reserved = param->reserved;
debugParam.srcAddr = param->srcAddr;
debugParam.dstAddr = param->dstAddr;
debugParam.memLen = param->memLen;
return rtDebugReadAICore(&debugParam);
}
VISIBILITY_DEFAULT
rtError_t rtSetDeviceWithFlags(int32_t deviceId, uint64_t flags)
{
GLOBAL_STATE_WAIT_IF_LOCKED();
rtError_t error;
if (flags == RT_DEVICE_FLAG_DEFAULT) {
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
error = apiInstance->SetDevice(deviceId);
} else if (flags == RT_DEVICE_FLAG_NOT_START_CPU_SCHED) {
Api* const apiInstanceNoTSD = Api::Instance(API_ENV_FLAGS_NO_TSD);
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstanceNoTSD);
error = apiInstanceNoTSD->SetDevice(deviceId);
} else {
RT_LOG_OUTER_MSG_INVALID_PARAM(flags, "RT_DEVICE_FLAG_DEFAULT or RT_DEVICE_FLAG_NOT_START_CPU_SCHED");
error = RT_ERROR_INVALID_VALUE;
}
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtDeviceGetCcMode(int32_t deviceId, int32_t* mode)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->DeviceGetCcMode(deviceId, mode);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
VISIBILITY_DEFAULT
rtError_t rtsDeviceGetInfo(uint32_t deviceId, rtDevAttr attr, int64_t* val)
{
Api* const apiInstance = Api::Instance();
NULL_RETURN_ERROR_WITH_EXT_ERRCODE(apiInstance);
const rtError_t error = apiInstance->GetDeviceInfoByAttr(deviceId, attr, val);
COND_RETURN_WITH_NOLOG(error == RT_ERROR_FEATURE_NOT_SUPPORT, ACL_ERROR_RT_FEATURE_NOT_SUPPORT);
ERROR_RETURN_WITH_EXT_ERRCODE(error);
return ACL_RT_SUCCESS;
}
#ifdef __cplusplus
}
#endif