/**
 * 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 "queue_process_host.h"
#include "log_inner.h"
#include "runtime/mem.h"
#include "runtime/rt_mem_queue.h"
#include "runtime/dev.h"
#include "queue_schedule/qs_client.h"
#include "utils/math_utils.h"

namespace acl {
aclError QueueProcessorHost::acltdtCreateQueue(const acltdtQueueAttr* const attr, uint32_t* const qid)
{
    ACL_LOG_INFO("Start to acltdtCreateQueue");
    ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(qid);
    int32_t deviceId = 0;
    ACL_REQUIRES_RTS_OK(rtGetDevice(&deviceId));
    const std::lock_guard<std::recursive_mutex> lk(muForQueueCtrl_);
    const rtError_t ret = rtMemQueueInit(deviceId);
    if ((ret != ACL_RT_SUCCESS) && (ret != ACL_ERROR_RT_REPEATED_INIT)) {
        return ret;
    }
    ACL_REQUIRES_OK(acltdtCreateQueueWithAttr(deviceId, attr, qid));
    ACL_LOG_INFO("Successfully to execute acltdtCreateQueue, qid is %u", *qid);
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::acltdtDestroyQueue(const uint32_t qid)
{
    int32_t deviceId = 0;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtGetDevice(&deviceId), rtGetDevice);
    // get qs id
    int32_t qsPid = 0;
    size_t routeNum = 0UL;
    const std::lock_guard<std::recursive_mutex> lk(muForQueueCtrl_);
    if (GetDstInfo(deviceId, QS_PID, qsPid) == RT_ERROR_NONE) {
        rtEschedEventSummary_t eventSum = {0, 0U, 0, 0U, 0U, nullptr, 0U, 0};
        rtEschedEventReply_t ack = {nullptr, 0U, 0U};
        bqs::QsProcMsgRsp qsRsp = {0UL, 0, 0U, 0U, 0U, {0}};
        int32_t cpPid = 0;
        ACL_REQUIRES_OK(GetDstInfo(deviceId, CP_PID, cpPid));
        eventSum.pid = cpPid;
        eventSum.grpId = 0U;
        eventSum.eventId = RT_MQ_SCHED_EVENT_QS_MSG;
        eventSum.dstEngine = static_cast<uint32_t>(RT_MQ_DST_ENGINE_ACPU_DEVICE);
        ack.buf = reinterpret_cast<char_t*>(&qsRsp);
        ack.bufLen = sizeof(qsRsp);
        acltdtQueueRouteQueryInfo queryInfo = {bqs::BQS_QUERY_TYPE_SRC_OR_DST, qid, qid, true, true, true};
        ACL_REQUIRES_OK(GetQueueRouteNum(&queryInfo, deviceId, eventSum, ack, routeNum));
    }
    if (routeNum > 0UL) {
        ACL_LOG_ERROR("qid [%u] can not be destroyed, it needs to be unbound first.", qid);
        return ACL_ERROR_FAILURE;
    }
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtMemQueueDestroy(deviceId, qid), rtMemQueueDestroy);
    DeleteMutexForData(qid);
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::acltdtBindQueueRoutes(acltdtQueueRouteList* const qRouteList)
{
    ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(qRouteList);
    ACL_LOG_INFO("Start to acltdtBindQueueRoutes, queue route is %zu", qRouteList->routeList.size());
    int32_t deviceId = 0;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtGetDevice(&deviceId), rtGetDevice);
    ACL_REQUIRES_OK(InitQueueSchedule(deviceId));
    // get dst pid
    int32_t dstPid = 0;
    ACL_REQUIRES_OK(GetDstInfo(deviceId, CP_PID, dstPid));
    rtEschedEventSummary_t eventSum = {0, 0U, 0, 0U, 0U, nullptr, 0U, 0};
    rtEschedEventReply_t ack = {nullptr, 0U, 0U};
    bqs::QsProcMsgRsp qsRsp = {0UL, 0, 0U, 0U, 0U, {0}};
    eventSum.pid = dstPid;
    eventSum.grpId = 0U;
    eventSum.eventId = RT_MQ_SCHED_EVENT_QS_MSG;
    eventSum.dstEngine = static_cast<uint32_t>(RT_MQ_DST_ENGINE_ACPU_DEVICE);
    ack.buf = reinterpret_cast<char_t*>(&qsRsp);
    ack.bufLen = sizeof(qsRsp);
    const std::lock_guard<std::recursive_mutex> lk(muForQueueCtrl_);
    if (!isQsInit_) {
        ACL_REQUIRES_OK(SendConnectQsMsg(deviceId, eventSum, ack));
        isQsInit_ = true;
    }
    ACL_REQUIRES_OK(SendBindUnbindMsg(deviceId, qRouteList, true, eventSum, ack));
    ACL_LOG_INFO("Successfully to execute acltdtBindQueueRoutes, queue route is %zu", qRouteList->routeList.size());
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::acltdtUnbindQueueRoutes(acltdtQueueRouteList* const qRouteList)
{
    ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(qRouteList);
    ACL_LOG_INFO("Start to acltdtUnBindQueueRoutes, queue route is %zu", qRouteList->routeList.size());
    int32_t deviceId = 0;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtGetDevice(&deviceId), rtGetDevice);
    // get dst pid
    int32_t dstPid = 0;
    ACL_REQUIRES_OK(GetDstInfo(deviceId, CP_PID, dstPid));
    rtEschedEventSummary_t eventSum = {0, 0U, 0, 0U, 0U, nullptr, 0U, 0};
    rtEschedEventReply_t ack = {nullptr, 0U, 0U};
    bqs::QsProcMsgRsp qsRsp = {0UL, 0, 0U, 0U, 0U, {0}};
    eventSum.pid = dstPid;
    eventSum.grpId = 0U;
    eventSum.eventId = RT_MQ_SCHED_EVENT_QS_MSG;
    eventSum.dstEngine = static_cast<uint32_t>(RT_MQ_DST_ENGINE_ACPU_DEVICE);
    ack.buf = reinterpret_cast<char_t*>(&qsRsp);
    ack.bufLen = sizeof(qsRsp);
    const std::lock_guard<std::recursive_mutex> lk(muForQueueCtrl_);
    ACL_REQUIRES_OK(SendBindUnbindMsg(deviceId, qRouteList, false, eventSum, ack));
    ACL_LOG_INFO("Successfully to execute acltdtUnBindQueueRoutes, queue route is %zu", qRouteList->routeList.size());
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::acltdtQueryQueueRoutes(
    const acltdtQueueRouteQueryInfo* const queryInfo, acltdtQueueRouteList* const qRouteList)
{
    ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(queryInfo);
    ACL_REQUIRES_NOT_NULL_WITH_INPUT_REPORT(qRouteList);
    ACL_LOG_INFO("Start to acltdtQueryQueueRoutes");
    int32_t deviceId = 0;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtGetDevice(&deviceId), rtGetDevice);
    // get dst id
    int32_t dstPid = 0;
    ACL_REQUIRES_OK(GetDstInfo(deviceId, CP_PID, dstPid));
    rtEschedEventSummary_t eventSum = {0, 0U, 0, 0U, 0U, nullptr, 0U, 0};
    rtEschedEventReply_t ack = {nullptr, 0U, 0U};
    bqs::QsProcMsgRsp qsRsp = {0UL, 0, 0U, 0U, 0U, {0}};
    eventSum.pid = dstPid;
    eventSum.grpId = 0U;
    eventSum.eventId = RT_MQ_SCHED_EVENT_QS_MSG;
    eventSum.dstEngine = static_cast<uint32_t>(RT_MQ_DST_ENGINE_ACPU_DEVICE);
    ack.buf = reinterpret_cast<char_t*>(&qsRsp);
    ack.bufLen = sizeof(qsRsp);
    const std::lock_guard<std::recursive_mutex> lk(muForQueueCtrl_);
    size_t routeNum = 0UL;
    ACL_REQUIRES_OK(GetQueueRouteNum(queryInfo, deviceId, eventSum, ack, routeNum));
    ACL_REQUIRES_OK(QueryQueueRoutes(deviceId, queryInfo, routeNum, eventSum, ack, qRouteList));
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::SendBindUnbindMsg(
    const int32_t deviceId, acltdtQueueRouteList* const qRouteList, const bool isBind, rtEschedEventSummary_t& eventSum,
    rtEschedEventReply_t& ack) const
{
    ACL_LOG_INFO("start to send bind or unbind msg");
    // send bind or unbind msg
    size_t routeListBody = 0U;
    ACL_CHECK_ASSIGN_SIZET_MULTI(qRouteList->routeList.size(), sizeof(bqs::QueueRoute), routeListBody);
    size_t routeSize = 0U;
    ACL_CHECK_ASSIGN_SIZET_ADD(sizeof(bqs::QsRouteHead), routeListBody, routeSize);
    ACL_LOG_INFO("route size is %zu, queue route num is %zu", routeSize, qRouteList->routeList.size());
    void* devPtr = nullptr;
    constexpr uint32_t flags = RT_MEMORY_DEFAULT | RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtMalloc(&devPtr, routeSize, flags, acl::ACL_MODE_ID_U16), rtMalloc);
    ACL_CHECK_MALLOC_RESULT(devPtr);
    (void)rtMemset(devPtr, routeSize, 0U, routeSize);
    bqs::QsRouteHead head = {0U, 0U, 0U, 0UL};
    head.length = routeSize;
    head.routeNum = qRouteList->routeList.size();
    head.subEventId =
        isBind ? static_cast<uint32_t>(bqs::ACL_BIND_QUEUE) : static_cast<uint32_t>(bqs::ACL_UNBIND_QUEUE);
    auto ret = rtMemcpy(devPtr, routeSize, &head, sizeof(head), RT_MEMCPY_HOST_TO_DEVICE);
    if (ret != ACL_RT_SUCCESS) {
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ret;
    }
    size_t offset = sizeof(bqs::QsRouteHead);
    for (size_t i = 0UL; i < qRouteList->routeList.size(); ++i) {
        bqs::QueueRoute tmpRoute = {0U, 0U, 0, 0, 0, 0UL, 0UL, {0}};
        tmpRoute.srcId = qRouteList->routeList[i].srcId;
        tmpRoute.dstId = qRouteList->routeList[i].dstId;
        ret = rtMemcpy(
            (static_cast<uint8_t*>(devPtr) + offset), (routeSize - offset), &tmpRoute, sizeof(tmpRoute),
            RT_MEMCPY_HOST_TO_DEVICE);
        if (ret != ACL_RT_SUCCESS) {
            (void)rtFree(devPtr);
            devPtr = nullptr;
            return ret;
        }
        offset += sizeof(bqs::QueueRoute);
    }

    bqs::QueueRouteList bqsBindUnbindMsg = {0U, 0U, {0}};
    bqsBindUnbindMsg.routeListMsgAddr = reinterpret_cast<uintptr_t>(devPtr);
    eventSum.subeventId =
        isBind ? static_cast<uint32_t>(bqs::ACL_BIND_QUEUE) : static_cast<uint32_t>(bqs::ACL_UNBIND_QUEUE);
    eventSum.msgLen = sizeof(bqsBindUnbindMsg);
    eventSum.msg = reinterpret_cast<char_t*>(&bqsBindUnbindMsg);
    ret = rtEschedSubmitEventSync(deviceId, &eventSum, &ack);
    eventSum.msgLen = 0U;
    eventSum.msg = nullptr;
    if (ret != RT_ERROR_NONE) {
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ret;
    }
    bqs::QsProcMsgRsp* const rsp = reinterpret_cast<bqs::QsProcMsgRsp*>(ack.buf);
    if (rsp->retCode != 0) {
        ACL_LOG_INNER_ERROR("send connect qs failed, ret code is %d", rsp->retCode);
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ACL_ERROR_FAILURE;
    }
    offset = sizeof(bqs::QsRouteHead);
    for (size_t i = 0UL; i < qRouteList->routeList.size(); ++i) {
        bqs::QueueRoute retRoute = {0U, 0U, 0, 0, 0, 0UL, 0UL, {0}};
        ret = rtMemcpy(
            &retRoute, sizeof(retRoute), (static_cast<uint8_t*>(devPtr) + offset), sizeof(retRoute),
            RT_MEMCPY_DEVICE_TO_HOST);
        if (ret != ACL_RT_SUCCESS) {
            (void)rtFree(devPtr);
            devPtr = nullptr;
            return ret;
        }
        qRouteList->routeList[i].status = retRoute.status;
        ACL_LOG_INFO(
            "route %zu, srcqid is %u, dst pid is %u, status is %d", i, qRouteList->routeList[i].srcId,
            qRouteList->routeList[i].dstId, qRouteList->routeList[i].status);
        offset += sizeof(bqs::QueueRoute);
    }
    (void)rtFree(devPtr);
    devPtr = nullptr;
    return ret;
}

aclError QueueProcessorHost::QueryQueueRoutes(
    const int32_t deviceId, const acltdtQueueRouteQueryInfo* const queryInfo, const size_t routeNum,
    rtEschedEventSummary_t& eventSum, rtEschedEventReply_t& ack, acltdtQueueRouteList* const qRouteList) const
{
    ACL_LOG_INFO("start to query queue route %zu", routeNum);
    if (routeNum == 0U) {
        return ACL_SUCCESS;
    }
    size_t routeListBody = 0U;
    ACL_CHECK_ASSIGN_SIZET_MULTI(routeNum, sizeof(bqs::QueueRoute), routeListBody);
    size_t routeSize = 0U;
    ACL_CHECK_ASSIGN_SIZET_ADD((sizeof(bqs::QsRouteHead) + sizeof(bqs::QueueRouteQuery)), routeListBody, routeSize);
    ACL_LOG_INFO("route size is %zu, queue route num is %zu", routeSize, qRouteList->routeList.size());
    void* devPtr = nullptr;
    constexpr uint32_t flags = RT_MEMORY_DEFAULT | RT_MEMORY_POLICY_DEFAULT_PAGE_ONLY;
    ACL_REQUIRES_RTS_OK_WARN_NOT_SUPPORT(rtMalloc(&devPtr, routeSize, flags, acl::ACL_MODE_ID_U16), rtMalloc);
    ACL_CHECK_MALLOC_RESULT(devPtr);
    (void)rtMemset(devPtr, routeSize, 0U, routeSize);
    bqs::QsRouteHead head = {0U, 0U, 0U, 0UL};
    head.length = routeSize;
    head.routeNum = routeNum;
    head.subEventId = bqs::ACL_QUERY_QUEUE;
    auto ret = rtMemcpy(devPtr, routeSize, &head, sizeof(head), RT_MEMCPY_HOST_TO_DEVICE);
    if (ret != ACL_RT_SUCCESS) {
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ret;
    }
    size_t offset = sizeof(bqs::QsRouteHead);
    bqs::QueueRouteQuery routeQuery = {0UL, 0U, 0U, 0U, 0, 0, 0UL, {0}};
    routeQuery.queryType = static_cast<uint32_t>(queryInfo->mode);
    routeQuery.srcId = queryInfo->srcId;
    routeQuery.dstId = queryInfo->dstId;
    ret = rtMemcpy(
        (static_cast<uint8_t*>(devPtr) + offset), (routeSize - offset), &routeQuery, sizeof(routeQuery),
        RT_MEMCPY_HOST_TO_DEVICE);
    if (ret != ACL_RT_SUCCESS) {
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ret;
    }

    bqs::QueueRouteList qsCommonMsg = {0U, 0U, {0}};
    qsCommonMsg.routeListMsgAddr = reinterpret_cast<uintptr_t>(devPtr);
    eventSum.subeventId = bqs::ACL_QUERY_QUEUE;
    eventSum.msgLen = sizeof(qsCommonMsg);
    eventSum.msg = reinterpret_cast<char_t*>(&qsCommonMsg);

    ret = rtEschedSubmitEventSync(deviceId, &eventSum, &ack);
    eventSum.msgLen = 0U;
    eventSum.msg = nullptr;
    if (ret != RT_ERROR_NONE) {
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ret;
    }
    bqs::QsProcMsgRsp* const rsp = reinterpret_cast<bqs::QsProcMsgRsp*>(ack.buf);
    if (rsp->retCode != 0) {
        ACL_LOG_INNER_ERROR("query queue route failed, ret code is %d", rsp->retCode);
        (void)rtFree(devPtr);
        devPtr = nullptr;
        return ACL_ERROR_FAILURE;
    }
    offset = sizeof(bqs::QsRouteHead) + sizeof(bqs::QueueRouteQuery);
    for (size_t i = 0UL; i < routeNum; ++i) {
        bqs::QueueRoute retRoute = {0U, 0U, 0, 0, 0, 0UL, 0UL, {0}};
        ret = rtMemcpy(
            &retRoute, sizeof(retRoute), (static_cast<uint8_t*>(devPtr) + offset), sizeof(retRoute),
            RT_MEMCPY_DEVICE_TO_HOST);
        if (ret != ACL_RT_SUCCESS) {
            (void)rtFree(devPtr);
            devPtr = nullptr;
            return ret;
        }
        const acltdtQueueRoute tmpQueueRoute = {retRoute.srcId, retRoute.dstId, retRoute.status};
        qRouteList->routeList.push_back(tmpQueueRoute);
        ACL_LOG_INFO(
            "route %zu, srcqid is %u, dst pid is %u, status is %d", i, qRouteList->routeList[i].srcId,
            qRouteList->routeList[i].dstId, qRouteList->routeList[i].status);
        offset += sizeof(bqs::QueueRoute);
    }
    (void)rtFree(devPtr);
    devPtr = nullptr;
    ACL_LOG_INFO("Successfully to execute acltdtQueryQueueRoutes, queue route is %zu", qRouteList->routeList.size());
    return ACL_SUCCESS;
}

aclError QueueProcessorHost::acltdtEnqueue(const uint32_t qid, const acltdtBuf buf, const int32_t timeout)
{
    (void)(qid);
    (void)(buf);
    (void)(timeout);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtEnqueue is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtDequeue(const uint32_t qid, acltdtBuf* const buf, const int32_t timeout)
{
    (void)(qid);
    (void)(buf);
    (void)(timeout);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtDequeue is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtAllocBuf(const size_t size, const uint32_t type, acltdtBuf* const buf)
{
    (void)(size);
    (void)(type);
    (void)(buf);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtAllocBuf is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtFreeBuf(acltdtBuf buf)
{
    (void)(buf);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtFreeBuf is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtGetBufData(const acltdtBuf buf, void** const dataPtr, size_t* const size)
{
    (void)(buf);
    (void)(dataPtr);
    (void)(size);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtGetBufData is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtGetBufUserData(
    const acltdtBuf buf, void* dataPtr, const size_t size, const size_t offset)
{
    (void)(buf);
    (void)(dataPtr);
    (void)(size);
    (void)(offset);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtGetBufUserData is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtSetBufUserData(
    acltdtBuf buf, const void* dataPtr, const size_t size, const size_t offset)
{
    (void)(buf);
    (void)(dataPtr);
    (void)(size);
    (void)(offset);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtSetBufUserData is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtCopyBufRef(const acltdtBuf buf, acltdtBuf* const newBuf)
{
    (void)(buf);
    (void)(newBuf);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtCopyBufRef is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtSetBufDataLen(const acltdtBuf buf, const size_t len)
{
    (void)(buf);
    (void)(len);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtSetBufDataLen is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtGetBufDataLen(const acltdtBuf buf, size_t* const len)
{
    (void)(buf);
    (void)(len);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtGetBufDataLen is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtAppendBufChain(const acltdtBuf headBuf, const acltdtBuf buf)
{
    (void)(buf);
    (void)(headBuf);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtAppendBufChain is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtGetBufChainNum(const acltdtBuf headBuf, uint32_t* const num)
{
    (void)(headBuf);
    (void)(num);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtGetBufChainNum is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}

aclError QueueProcessorHost::acltdtGetBufFromChain(const acltdtBuf headBuf, const uint32_t index, acltdtBuf* const buf)
{
    (void)(buf);
    (void)(headBuf);
    (void)(index);
    ACL_LOG_ERROR("[Unsupported][Feature]acltdtGetBufFromChain is not supported in this version. Please check.");
    const char_t* argList[] = {"func"};
    const char_t* argVal[] = {__func__};
    acl::AclErrorLogManager::ReportInputErrorWithChar(acl::UNSUPPORTED_SYSTEM_MSG, argList, argVal, 1UL);
    return ACL_ERROR_FEATURE_UNSUPPORTED;
}
} // namespace acl