* 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 DRIVER_QUEUE_H
#define DRIVER_QUEUE_H
#include <semaphore.h>
#include "tsch/tsch_defines.h"
#include "cmodel_driver.h"
#ifdef __cplusplus
extern "C" {
#endif
* @ingroup driver-stub
* @brief size of each QoS queue.
*/
#define DRV_QOS_QUEUE_SIZE (512)
* @ingroup driver-stub
* @brief size of each QoS queue.
*/
#define DRV_REPORT_QUEUE_SIZE (64)
#define COMMAND_STRUCT_SIZE (64)
#define DRV_REPORT_STRUCT_SIZE (12)
* @ingroup driver-stub
* @brief each command is 64 byte but we don't care the details.
*/
typedef struct tagDrvCommandStruct {
uint8_t dummy[COMMAND_STRUCT_SIZE];
} drvCommandStruct_t;
* @ingroup driver-stub
* @brief each report is 4 byte but we don't care the details.
*/
typedef struct tagDrvReportStruct {
uint8_t dummy[DRV_REPORT_STRUCT_SIZE];
} drvReportStruct_t;
* @ingroup driver-stub
* @brief driver qos queue.
*/
typedef struct tagDrvQosQueue {
drvCommandStruct_t taskCommand[DRV_QOS_QUEUE_SIZE];
uint16_t headIndex;
uint16_t tailIndex;
} drvQosQueue_t;
* @ingroup driver-stub
* @brief driver qos mgmt.
*/
typedef struct tagDrvQosMgmt {
uint32_t IsSubmit[DRV_QOS_QUEUE_SIZE];
uint32_t IsOccupy[DRV_QOS_QUEUE_SIZE];
uint32_t Credit;
} drvQosMgmt_t;
* @ingroup driver-stub
* @brief driver report queue.
*/
typedef struct tagDrvReportQueue {
drvReportStruct_t retort[DRV_REPORT_QUEUE_SIZE];
uint16_t headIndex;
uint16_t tailIndex;
} drvReportQueue_t;
* @ingroup driver-stub
* @brief bool type of driver.
*/
typedef enum drvBool {
DRV_FALSE = 0,
DRV_TRUE = 1,
} drvBool_t;
typedef sem_t drvSem_t;
extern drvQosQueue_t g_drvQosQueue[MAX_DEV_NUM][TS_TASK_CMD_QUEUE_PRIORITIES_LEVEL];
extern drvQosMgmt_t g_drvQosQueueMgmt[MAX_DEV_NUM][TS_TASK_CMD_QUEUE_PRIORITIES_LEVEL];
extern drvReportQueue_t g_drvReportQueue[MAX_DEV_NUM];
extern drvSem_t g_drvSem[MAX_DEV_NUM];
drvError_t drvQosHandleToId(int32_t deviceId, int8_t *qos, int32_t *qid, const drvCommand_t * const cmd);
drvError_t drvSetTaskCommand(int32_t device, int8_t qos, drvQosQueue_t *queue, drvQosMgmt_t *qMgmt);
drvError_t drvQueueInit(void);
void drvReportIrqTrigger(drvInterruptNum_t irq);
void drvSemWait(drvSem_t *sem);
#ifdef __cplusplus
}
#endif
#endif