* 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.
*/
#ifndef CCE_RUNTIME_RT_EXTERNAL_DQS_H
#define CCE_RUNTIME_RT_EXTERNAL_DQS_H
#include "rt_external_base.h"
#if defined(__cplusplus)
extern "C" {
#endif
#define RTS_WEAK __attribute__((weak))
#define RT_DQS_MAX_INPUT_QUEUE_NUM 10U
#define RT_DQS_MAX_OUTPUT_QUEUE_NUM 10U
typedef enum {
RT_DQS_SCHED_TYPE_NN = 1,
RT_DQS_SCHED_TYPE_VPC = 2,
RT_DQS_SCHED_TYPE_DSS = 3,
} rtDqsSchedType;
typedef enum {
RT_DQS_FRAME_MAIN_CHANNEL_ALIGN,
RT_DQS_FRAME_ALL_CHANNEL_ALIGN
} rtDqsFrameAlignMode;
typedef enum {
RT_DQS_DROP_FRAME,
RT_DQS_USE_DEFAULT_FRAME,
RT_DQS_USE_HISTORY_FRAME
} rtDqsFrameAlignTimeoutMode;
typedef enum {
RT_DQS_ZERO_COPY_INPUT,
RT_DQS_ZERO_COPY_OUTPUT,
} rtDqsZeroCopyType;
typedef enum {
RT_DQS_ZERO_COPY_ADDR_ORDER_LOW32_FIRST = 0,
RT_DQS_ZERO_COPY_ADDR_ORDER_HIGH32_FIRST = 1,
} rtDqsZeroCopyAddrOrderType;
typedef struct {
uint8_t type;
uint8_t reserve;
uint8_t inputQueueNum;
uint8_t outputQueueNum;
uint16_t inputQueueIds[RT_DQS_MAX_INPUT_QUEUE_NUM];
uint16_t outputQueueIds[RT_DQS_MAX_OUTPUT_QUEUE_NUM];
} rtDqsSchedCfg_t;
typedef rtDqsSchedCfg_t rtDqsSchedConfig_t;
typedef struct {
rtDqsZeroCopyType copyType;
rtDqsZeroCopyAddrOrderType cpyAddrOrder;
uint16_t queueId;
uint16_t count;
uint32_t rsv;
uint64_t *dest;
uint64_t *offset;
} rtDqsZeroCopyCfg_t;
typedef struct {
uint64_t *condition;
void *dst;
uint64_t destMax;
void *src;
uint64_t cnt;
} rtDqsConditionCopyCfg_t;
typedef struct {
uint32_t mbufHandle;
uint16_t queueId;
uint8_t cqeSize;
uint8_t cqDepth;
uint64_t cqeBaseAddr;
uint64_t cqeCopyAddr;
uint64_t cqHeadRegAddr;
uint64_t cqTailRegAddr;
} rtDqsAdspcTaskCfg_t;
typedef enum {
RT_DQS_TASK_SCHED_CONFIG,
RT_DQS_TASK_NOTIFY_WAIT,
RT_DQS_TASK_DEQUEUE,
RT_DQS_TASK_ZERO_COPY,
RT_DQS_TASK_CONDITION_COPY,
RT_DQS_TASK_PREPARE_OUT,
RT_DQS_TASK_ENQUEUE,
RT_DQS_TASK_FREE,
RT_DQS_TASK_FRAME_ALIGN,
RT_DQS_TASK_SCHED_END,
RT_DQS_TASK_INTER_CHIP_INIT,
RT_DQS_TASK_ADSPC,
RT_DQS_TASK_MAX
} rtDqsTaskType;
typedef struct {
rtDqsTaskType type;
uint32_t rsv;
void *cfg;
} rtDqsTaskCfg_t;
* @ingroup rts_dqs
* @brief Launch dqs task in stream
*
* @param stm the stream to launch task
* @param taskCfg the dqs task cfg
* @return RT_ERROR_NONE for ok
* @return RT_ERROR_INVALID_VALUE for error input
*/
RTS_API rtError_t rtLaunchDqsTask(const rtStream_t stm, const rtDqsTaskCfg_t * const taskCfg) RTS_WEAK;
#if defined(__cplusplus)
}
#endif
#endif