|
|
@@ -0,0 +1,577 @@ |
|
|
|
/* |
|
|
|
* Copyright (c) Huawei Technologies Co., Ltd. 2021. All rights reserved. |
|
|
|
* Description: mbuf and queue interface |
|
|
|
*/ |
|
|
|
|
|
|
|
#ifndef CCE_RUNTIME_RT_MEM_QUEUE_H |
|
|
|
#define CCE_RUNTIME_RT_MEM_QUEUE_H |
|
|
|
|
|
|
|
#include "base.h" |
|
|
|
|
|
|
|
#if defined(__cplusplus) |
|
|
|
extern "C" { |
|
|
|
#endif |
|
|
|
|
|
|
|
#define RT_MQ_MAX_NAME_LEN 128 // same as driver's |
|
|
|
#define RT_MQ_DEPTH_MIN 2U |
|
|
|
#define RT_MQ_MODE_PUSH 1 |
|
|
|
#define RT_MQ_MODE_PULL 2 |
|
|
|
#define RT_MQ_MODE_DEFAULT RT_MQ_MODE_PUSH |
|
|
|
#define RT_EVENT_SUMMARY_RSV 4 |
|
|
|
#define RT_EVENT_MAX_MSG_LEN 128 |
|
|
|
|
|
|
|
typedef struct tagMemQueueInfo { |
|
|
|
int32_t id; |
|
|
|
int32_t size; |
|
|
|
uint32_t depth; |
|
|
|
int32_t status; |
|
|
|
} rtMemQueueInfo_t; |
|
|
|
|
|
|
|
typedef struct tagMemQueueAttr { |
|
|
|
char_t name[RT_MQ_MAX_NAME_LEN]; |
|
|
|
uint32_t depth; |
|
|
|
uint32_t workMode; |
|
|
|
uint32_t flowCtrlDropTime; |
|
|
|
bool flowCtrlFlag; |
|
|
|
bool overWriteFlag; |
|
|
|
} rtMemQueueAttr_t; |
|
|
|
|
|
|
|
typedef struct tagMemQueueShareAttr { |
|
|
|
uint32_t manage : 1; |
|
|
|
uint32_t read : 1; |
|
|
|
uint32_t write : 1; |
|
|
|
uint32_t rsv : 29; |
|
|
|
} rtMemQueueShareAttr_t; |
|
|
|
|
|
|
|
typedef struct tagMemQueueBuffInfo { |
|
|
|
void *addr; |
|
|
|
size_t len; |
|
|
|
} rtMemQueueBuffInfo; |
|
|
|
|
|
|
|
typedef struct tagMemQueueBuff { |
|
|
|
void *contextAddr; |
|
|
|
size_t contextLen; |
|
|
|
rtMemQueueBuffInfo *buffInfo; |
|
|
|
uint32_t buffCount; |
|
|
|
} rtMemQueueBuff_t; |
|
|
|
|
|
|
|
|
|
|
|
typedef enum tagMemQueueQueryCmd { |
|
|
|
RT_MQ_QUERY_QUE_ATTR_OF_CUR_PROC = 0, // input is qid(4bytes), output is rtMemQueueShareAttr_t |
|
|
|
RT_MQ_QUERY_QUES_OF_CUR_PROC = 1, |
|
|
|
RT_MQ_QUERY_CMD_MAX = 2 |
|
|
|
} rtMemQueueQueryCmd_t; |
|
|
|
|
|
|
|
#define RT_MQ_EVENT_QS_MSG 27 // same as driver's |
|
|
|
|
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL0 0 // same as driver's |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL1 1 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL2 2 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL3 3 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL4 4 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL5 5 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL6 6 |
|
|
|
#define RT_MQ_SCHED_PRIORITY_LEVEL7 7 |
|
|
|
|
|
|
|
/* Events can be released between different systems. This parameter specifies the destination type of events |
|
|
|
to be released. The destination type is defined based on the CPU type of the destination system. */ |
|
|
|
#define RT_MQ_DST_ENGINE_ACPU_DEVICE 0 // device AICPU, same as driver's |
|
|
|
#define RT_MQ_DST_ENGINE_ACPU_HOST 1 // Host AICPU |
|
|
|
#define RT_MQ_DST_ENGINE_CCPU_DEVICE 2 // device CtrlCPU |
|
|
|
#define RT_MQ_DST_ENGINE_CCPU_HOST 3 // Host CtrlCPU |
|
|
|
#define RT_MQ_DST_ENGINE_DCPU_DEVICE 4 // device DataCPU |
|
|
|
#define RT_MQ_DST_ENGINE_TS_CPU 5 // device TS CPU |
|
|
|
#define RT_MQ_DST_ENGINE_DVPP_CPU 6 // device DVPP CPU |
|
|
|
|
|
|
|
#define RT_MQ_SCHED_EVENT_QS_MSG 25 // same as driver's EVENT_QS_MSG |
|
|
|
|
|
|
|
/* When the destination engine is AICPU, select a policy. |
|
|
|
ONLY: The command is executed only on the local AICPU. |
|
|
|
FIRST: The local AICPU is preferentially executed. If the local AICPU is busy, the remote AICPU can be used. */ |
|
|
|
#define RT_SCHEDULE_POLICY_ONLY 0 // same as driver's schedule_policy |
|
|
|
#define RT_SCHEDULE_POLICY_FIRST 1 // same as driver's schedule_policy |
|
|
|
|
|
|
|
|
|
|
|
typedef struct tagEschedEventSummary { |
|
|
|
int32_t pid; // dst PID |
|
|
|
uint32_t grpId; |
|
|
|
int32_t eventId; // only RT_MQ_SCHED_EVENT_QS_MSG is supported |
|
|
|
uint32_t subeventId; |
|
|
|
uint32_t msgLen; |
|
|
|
char_t *msg; |
|
|
|
uint32_t dstEngine; // dst system cpu type |
|
|
|
int32_t policy; // RT_SCHEDULE_POLICY_ONLY or RT_SCHEDULE_POLICY_FIRST |
|
|
|
} rtEschedEventSummary_t; |
|
|
|
|
|
|
|
typedef struct tagEschedEventReply { |
|
|
|
char_t *buf; |
|
|
|
uint32_t bufLen; |
|
|
|
uint32_t replyLen; // output, ack msg len, same with msgLen in halEschedAckEvent |
|
|
|
} rtEschedEventReply_t; |
|
|
|
|
|
|
|
#define RT_DEV_PROCESS_CP1 0 |
|
|
|
#define RT_DEV_PROCESS_CP2 1 |
|
|
|
#define RT_DEV_PROCESS_DEV_ONLY 2 |
|
|
|
#define RT_DEV_PROCESS_QS 3 |
|
|
|
#define RT_DEV_PROCESS_SIGN_LENGTH 49 |
|
|
|
|
|
|
|
typedef struct tagBindHostpidInfo { |
|
|
|
int32_t hostPid; |
|
|
|
uint32_t vfid; |
|
|
|
uint32_t chipId; |
|
|
|
int32_t cpType; // type of custom-process, see RT_DEV_PROCESS_XXX |
|
|
|
} rtBindHostpidInfo_t; |
|
|
|
|
|
|
|
#define RT_MEM_BUFF_MAX_CFG_NUM 64 |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
uint32_t cfgId; // cfg id, start from 0 |
|
|
|
uint32_t totalSize; // one zone total size |
|
|
|
uint32_t blkSize; // blk size, 2^n (0, 2M] |
|
|
|
uint32_t maxBufSize; // max size can alloc from zone |
|
|
|
uint32_t pageType; // page type, small page / huge page |
|
|
|
int32_t elasticEnable; // elastic enable |
|
|
|
int32_t elasticRate; |
|
|
|
int32_t elasticRateMax; |
|
|
|
int32_t elasticHighLevel; |
|
|
|
int32_t elasticLowLevel; |
|
|
|
} rtMemZoneCfg_t; |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
rtMemZoneCfg_t cfg[RT_MEM_BUFF_MAX_CFG_NUM]; |
|
|
|
}rtMemBuffCfg_t; |
|
|
|
|
|
|
|
typedef enum rt_queue_work_mode { |
|
|
|
RT_QUEUE_MODE_PUSH = 1, |
|
|
|
RT_QUEUE_MODE_PULL, |
|
|
|
} RT_QUEUE_WORK_MODE; |
|
|
|
|
|
|
|
typedef void *rtMbufPtr_t; |
|
|
|
|
|
|
|
typedef enum rtEventIdType { |
|
|
|
RT_EVENT_RANDOM_KERNEL, /* Random operator event */ |
|
|
|
RT_EVENT_DVPP_MSG, /* operator events commited by DVPP */ |
|
|
|
RT_EVENT_FR_MSG, /* operator events commited by Feature retrieves */ |
|
|
|
RT_EVENT_TS_HWTS_KERNEL, /* operator events commited by ts/hwts */ |
|
|
|
RT_EVENT_AICPU_MSG, /* aicpu activates its own stream events */ |
|
|
|
RT_EVENT_TS_CTRL_MSG, /* controls message events of TS */ |
|
|
|
RT_EVENT_QUEUE_ENQUEUE, /* entry event of Queue(consumer) */ |
|
|
|
RT_EVENT_QUEUE_FULL_TO_NOT_FULL, /* full to non-full events of Queue(producers) */ |
|
|
|
RT_EVENT_QUEUE_EMPTY_TO_NOT_EMPTY, /* empty to non-empty event of Queue(consumer) */ |
|
|
|
RT_EVENT_TDT_ENQUEUE, /* data entry event of TDT */ |
|
|
|
RT_EVENT_TIMER, /* ros timer */ |
|
|
|
RT_EVENT_HCFI_SCHED_MSG, /* scheduling events of HCFI */ |
|
|
|
RT_EVENT_HCFI_EXEC_MSG, /* performs the event of HCFI */ |
|
|
|
RT_EVENT_ROS_MSG_LEVEL0, |
|
|
|
RT_EVENT_ROS_MSG_LEVEL1, |
|
|
|
RT_EVENT_ROS_MSG_LEVEL2, |
|
|
|
RT_EVENT_ACPU_MSG_TYPE0, |
|
|
|
RT_EVENT_ACPU_MSG_TYPE1, |
|
|
|
RT_EVENT_ACPU_MSG_TYPE2, |
|
|
|
RT_EVENT_CCPU_CTRL_MSG, |
|
|
|
RT_EVENT_SPLIT_KERNEL, |
|
|
|
RT_EVENT_DVPP_MPI_MSG, |
|
|
|
RT_EVENT_CDQ_MSG, |
|
|
|
/* Add a new event here */ |
|
|
|
RT_EVENT_TEST, /* Reserve for test */ |
|
|
|
RT_EVENT_MAX_NUM |
|
|
|
} rtEventIdType_t; |
|
|
|
|
|
|
|
typedef enum rtGroupType { |
|
|
|
/* Bound to a AICPU, multiple threads can be woken up simultaneously within a group */ |
|
|
|
RT_GRP_TYPE_BIND_DP_CPU = 1, |
|
|
|
RT_GRP_TYPE_BIND_CP_CPU, /* Bind to the control CPU */ |
|
|
|
RT_GRP_TYPE_BIND_DP_CPU_EXCLUSIVE /* Bound to a AICPU, intra-group threads are mutex awakened */ |
|
|
|
} rtGroupType_t; |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief init queue schedule |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] grpName the name of group, can be nullptr |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueInitQS(int32_t device, const char* grpName); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief create mbuf queue |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] rtMemQueueAttr attribute of queue |
|
|
|
* @param [out] qid queue id |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueCreate(int32_t device, const rtMemQueueAttr_t *queueAttr, uint32_t *qid); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief destroy mbuf queue |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueDestroy(int32_t device, uint32_t qid); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief destroy mbuf queue init |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueInit(int32_t device); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief enqueu mbuf |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [in] mbuf enqueue mbuf |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueEnQueue(int32_t device, uint32_t qid, void *mbuf); |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief enqueu mbuf |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [out] mbuf dequeue mbuf |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueDeQueue(int32_t device, uint32_t qid, void **mbuf); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief enqueu peek |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [out] bufLen length of mbuf in queue |
|
|
|
* @param [in] timeout peek timeout (ms), -1: wait all the time until peeking success |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueuePeek(int32_t device, uint32_t qid, size_t *bufLen, int32_t timeout); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief enqueu buff |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [in] inBuf enqueue buff |
|
|
|
* @param [in] timeout enqueue timeout (ms), -1: wait all the time until enqueue success |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueEnQueueBuff(int32_t device, uint32_t qid, rtMemQueueBuff_t *inBuf, int32_t timeout); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief enqueu buff |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [out] outBuf dequeue buff |
|
|
|
* @param [in] timeout dequeue timeout (ms), -1: wait all the time until dequeue success |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueDeQueueBuff(int32_t device, uint32_t qid, rtMemQueueBuff_t *outBuf, int32_t timeout); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief query current queue info |
|
|
|
* @param [in] device the logical device id |
|
|
|
* @param [in] qid queue id |
|
|
|
* @param [out] queueInfo current queue info |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueQueryInfo(int32_t device, uint32_t qid, rtMemQueueInfo_t *queueInfo); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief query queue status |
|
|
|
* @param [in] device: the logical device id |
|
|
|
* @param [in] cmd: query cmd |
|
|
|
* @param [in] inBuff: input buff |
|
|
|
* @param [in] inLen: the length of input |
|
|
|
* @param [in|out] outBuff: output buff |
|
|
|
* @param [in|out] outLen: the length of output |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueQuery(int32_t device, rtMemQueueQueryCmd_t cmd, const void *inBuff, uint32_t inLen, |
|
|
|
void *outBuff, uint32_t *outLen); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief grant queue |
|
|
|
* @param [in] device: logic devid |
|
|
|
* @param [in] qid: queue id |
|
|
|
* @param [in] pid: pid |
|
|
|
* @param [in] attr: queue share attr |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueGrant(int32_t device, uint32_t qid, int32_t pid, rtMemQueueShareAttr_t *attr); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief attach queue |
|
|
|
* @param [in] device: logic devid |
|
|
|
* @param [in] qid: queue id |
|
|
|
* @param [in] timeOut: timeOut |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueAttach(int32_t device, uint32_t qid, int32_t timeOut); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief Commit the event to a specific process |
|
|
|
* @param [in] device: logic devid |
|
|
|
* @param [in] event: event summary info |
|
|
|
* @param [out] ack: event reply info |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedSubmitEventSync(int32_t device, rtEschedEventSummary_t *event, |
|
|
|
rtEschedEventReply_t *ack); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief query device proccess id |
|
|
|
* @param [in] info: see struct rtBindHostpidInfo_t |
|
|
|
* @param [out] devPid: device proccess id |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtQueryDevPid(rtBindHostpidInfo_t *info, int32_t *devPid); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief device buff init |
|
|
|
* @param [in] cfg, init cfg |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufInit(rtMemBuffCfg_t *cfg); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief alloc buff |
|
|
|
* @param [out] buff: buff addr alloced |
|
|
|
* @param [in] size: The amount of memory space requested |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufAlloc(rtMbufPtr_t *mbuf, uint64_t size); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief free buff |
|
|
|
* @param [in] buff: buff addr to be freed |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufFree(rtMbufPtr_t mbuf); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief get Data addr of Mbuf |
|
|
|
* @param [in] mbuf: Mbuf addr |
|
|
|
* @param [out] buf: Mbuf data addr |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufGetBuffAddr(rtMbufPtr_t mbuf, void **buf); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief get total Buffer size of Mbuf |
|
|
|
* @param [in] mbuf: Mbuf addr |
|
|
|
* @param [out] totalSize: total buffer size of Mbuf |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufGetBuffSize(rtMbufPtr_t mbuf, uint64_t *totalSize); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief Get the address and length of its user_data from the specified Mbuf |
|
|
|
* @param [in] mbuf: Mbuf addr |
|
|
|
* @param [out] priv: address of its user_data |
|
|
|
* @param [out] size: length of its user_data |
|
|
|
* @return RT_ERROR_NONE for ok |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMbufGetPrivInfo (rtMbufPtr_t mbuf, void **priv, uint64_t *size); |
|
|
|
|
|
|
|
// mem group |
|
|
|
typedef struct { |
|
|
|
uint64_t maxMemSize; // max buf size in grp, in KB. = 0 means no limit |
|
|
|
} rtMemGrpConfig_t; |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
uint32_t admin : 1; // admin permission, can add other proc to grp |
|
|
|
uint32_t read : 1; // read only permission |
|
|
|
uint32_t write : 1; // read and write permission |
|
|
|
uint32_t alloc : 1; // alloc permission (have read and write permission) |
|
|
|
uint32_t rsv : 28; |
|
|
|
} rtMemGrpShareAttr_t; |
|
|
|
|
|
|
|
#define RT_MEM_GRP_QUERY_GROUPS_OF_PROCESS 1 // query process all grp |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
int32_t pid; |
|
|
|
} rtMemGrpQueryByProc_t; // cmd: GRP_QUERY_GROUPS_OF_PROCESS |
|
|
|
|
|
|
|
typedef union { |
|
|
|
rtMemGrpQueryByProc_t grpQueryByProc; // cmd: GRP_QUERY_GROUPS_OF_PROCESS |
|
|
|
} rtMemGrpQueryInput_t; |
|
|
|
|
|
|
|
#define RT_MEM_GRP_NAME_LEN 32 // it must be same as driver define BUFF_GRP_NAME_LEN |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
char_t groupName[RT_MEM_GRP_NAME_LEN]; // group name |
|
|
|
rtMemGrpShareAttr_t attr; // process in group attribute |
|
|
|
} rtMemGrpOfProc_t; // cmd: GRP_QUERY_GROUPS_OF_PROCESS |
|
|
|
|
|
|
|
typedef struct { |
|
|
|
rtMemGrpOfProc_t *groupsOfProc; // cmd: GRP_QUERY_GROUPS_OF_PROCESS |
|
|
|
size_t maxNum; // max number of result |
|
|
|
size_t resultNum; // if the number of results exceeds 'maxNum', only 'maxNum' results are filled in buffer |
|
|
|
} rtMemGrpQueryOutput_t; |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief create mem group |
|
|
|
* @attention null |
|
|
|
* @param [in] name, group name |
|
|
|
* @param [in] cfg, group cfg |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemGrpCreate(const char_t *name, const rtMemGrpConfig_t *cfg); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief add process to group |
|
|
|
* @param [in] name, group name |
|
|
|
* @param [in] pid, process id |
|
|
|
* @param [in] attr, process permission in group |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemGrpAddProc(const char_t *name, int32_t pid, const rtMemGrpShareAttr_t *attr); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief attach proccess to check permission in group |
|
|
|
* @param [in] name, group name |
|
|
|
* @param [in] timeout, time out ms |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemGrpAttach(const char_t *name, int32_t timeout); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief buff group query |
|
|
|
* @param [in] cmd, cmd type |
|
|
|
* @param [in] input, query input |
|
|
|
* @param [in|out] output, query output |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemGrpQuery(int32_t cmd, const rtMemGrpQueryInput_t *input, rtMemGrpQueryOutput_t *output); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief buff group query |
|
|
|
* @param [in] device, cdevice id |
|
|
|
* @param [in] name, group name |
|
|
|
* @param [out] qid, queue id |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtMemQueueGetQidByName(int32_t device, const char *name, uint32_t *qId); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched attach device |
|
|
|
* @param [in] device, device id |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedAttachDevice(int32_t device); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched dettach device |
|
|
|
* @param [in] device, device id |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedDettachDevice(int32_t device); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched wait event |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] grpId, group id |
|
|
|
* @param [in] threadId, thread id |
|
|
|
* @param [in] timeout |
|
|
|
* @param [in] event |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedWaitEvent(int32_t device, uint32_t grpId, uint32_t threadId, |
|
|
|
int timeout, rtEschedEventSummary_t *event); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched create group |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] grpId, group id |
|
|
|
* @param [in] type, group type |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedCreateGrp(int32_t device, uint32_t grpId, rtGroupType_t type); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched submit event |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] event |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedSubmitEvent(int32_t device, rtEschedEventSummary_t *event); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rt_mem_queue |
|
|
|
* @brief esched submit event |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] grpId, group id |
|
|
|
* @param [in] threadId, thread id |
|
|
|
* @param [in] eventBitmap |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedSubscribeEvent(int32_t device, uint32_t grpId, uint32_t threadId, uint64_t eventBitmap); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rtEschedAckEvent |
|
|
|
* @brief esched ack event |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] eventId, event type |
|
|
|
* @param [in] subeventId, sub event type |
|
|
|
* @param [in] msg, message info |
|
|
|
* @param [in] len, message length |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtEschedAckEvent(int32_t device, rtEventIdType_t eventId, |
|
|
|
uint32_t subeventId, char *msg, uint32_t len); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rtQueueSubF2NFEvent |
|
|
|
* @brief full to not full event |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] qid, queue id |
|
|
|
* @param [in] groupId, group id |
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtQueueSubF2NFEvent(int32_t device, uint32_t qId, uint32_t groupId); |
|
|
|
|
|
|
|
/** |
|
|
|
* @ingroup rtQueueSubscribe |
|
|
|
* @brief queue subscribe |
|
|
|
* @param [in] device, device id |
|
|
|
* @param [in] qid, queue id |
|
|
|
* @param [in] groupId, group id |
|
|
|
* @param [in] type |
|
|
|
|
|
|
|
* @return 0 for success, others for fail |
|
|
|
*/ |
|
|
|
RTS_API rtError_t rtQueueSubscribe(int32_t device, uint32_t qId, uint32_t groupId, int type); |
|
|
|
|
|
|
|
#if defined(__cplusplus) |
|
|
|
} |
|
|
|
#endif |
|
|
|
#endif // CCE_RUNTIME_RT_MEM_QUEUE_H |