* 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 DEVDRV_SHM_COMM_H
#define DEVDRV_SHM_COMM_H
#include <sys/types.h>
#include "tsdrv_user_common.h"
#include "devmng_common.h"
#define OUT_OF_RANGE(value, min, max) ((((min) <= (value)) && ((value) <= (max))) ? (0) : (1))
#define DEVDRV_SHARED_MEMORY_INITED (1)
#define DEVDRV_SHARED_MEMORY_NOT_INITED (0)
#define DEVDRV_MAX_SQ_SLOT_NUM (DEVDRV_MAX_SQ_DEPTH)
#define DEVDRV_MAX_CQ_SLOT_NUM (DEVDRV_MAX_CQ_DEPTH)
#define DEVDRV_SQ_PER_SLOT_SIZE (DEVDRV_SQ_SLOT_SIZE)
#define DEVDRV_CQ_PER_SLOT_SIZE (DEVDRV_CQ_SLOT_SIZE)
#define DEVDRV_SQ_SIZE (DEVDRV_SQ_SLOT_SIZE * DEVDRV_MAX_SQ_SLOT_NUM)
#define DEVDRV_CQ_SIZE (DEVDRV_CQ_SLOT_SIZE * DEVDRV_MAX_CQ_SLOT_NUM)
#define DEVDRV_SQ_INFO_NUM DEVDRV_MAX_SQ_NUM
#define DEVDRV_CQ_INFO_NUM DEVDRV_MAX_CQ_NUM
#define DEVDRV_SQ_INFO_SIZE (sizeof(struct devdrv_ts_sq_info))
#define DEVDRV_CQ_INFO_SIZE (sizeof(struct devdrv_ts_cq_info))
#define DEVDRV_STREAM_ID_NUM (DEVDRV_MAX_STREAM_ID)
#define DEVDRV_EVENT_ID_NUM (DEVDRV_MAX_SW_EVENT_ID)
#define DEVDRV_NOTIFY_ID_NUM (DEVDRV_MAX_NOTIFY_ID)
#define DEVDRV_MODEL_ID_NUM (DEVDRV_MAX_MODEL_ID)
#define DEVDRV_CMO_ID_NUM (DEVDRV_MAX_CMO_ID)
#define DEVDRV_SQ_INFO_OFFSET (0)
#define DEVDRV_CQ_INFO_OFFSET (DEVDRV_SQ_INFO_OFFSET + DEVDRV_SQ_INFO_SIZE * DEVDRV_SQ_INFO_NUM)
#define DEVDRV_PHASE_TOGGLE_STATE_0 (0)
#define DEVDRV_PHASE_TOGGLE_STATE_1 (1)
#define DEVDRV_REPORT_IRQ_WAIT (1)
#define DEVDRV_REPORT_POLL_WAIT (0)
#define DEVDRV_SIG_PROCESS_MODULE_NUM (32)
struct tsdrv_user_info {
int devdrv_process_cq;
pthread_mutex_t devdrv_sqcq_mutex;
struct devdrv_ts_sq_info sq_info[DEVDRV_MAX_SQ_NUM];
struct devdrv_ts_cq_info cq_info[DEVDRV_MAX_CQ_NUM];
};
u32 devdrv_get_bind_cq_id(u32 devid, u32 tsid, u32 sq_id);
void devdrv_set_bind_cq_id(u32 devid, u32 tsid, u32 sq_id, u32 cq_id);
struct devdrv_ts_sq_info *devdrv_get_sq_info(u32 devid, u32 tsid, u32 sq_index);
struct devdrv_ts_cq_info *devdrv_get_cq_info(u32 devid, u32 tsid, u32 cq_index);
u8 *devdrv_get_sq_slot(u32 devid, u32 tsid, u32 sq_index, u32 slot_index);
u8 *devdrv_get_cq_slot(u32 slot_index, struct devdrv_ts_cq_info *cq_info);
void devdrv_init_struct(u32 tsid);
drvError_t tsdrv_init_user_info(u32 devid, u32 tsid);
void tsdrv_deinit_user_info(u32 devid, u32 tsid);
int devdrv_is_shared_memory_inited(u32 devid, u32 tsid);
int devdrv_init_cq_uio(u32 devid, u32 tsid, struct devdrv_ts_cq_info *cq_info);
int devdrv_exit_cq_uio(u32 devid, u32 tsid, struct devdrv_ts_cq_info *cq_info);
int devdrv_init_sq_uio(u32 devid, u32 tsid, struct devdrv_ts_sq_info *sq_info);
void devdrv_exit_sq_uio(u32 devid, u32 tsid, struct devdrv_ts_sq_info *sq_info);
extern void devdrv_flush_cache(uint64_t base, uint32_t len);
extern void mb(void);
#endif