* 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 __DMS_USER_COMMON_H
#define __DMS_USER_COMMON_H
#include "drv_type.h"
#include "ascend_hal_error.h"
#include "ascend_inpackage_hal.h"
#include "dmc_user_interface.h"
#include "dms_cmd_def.h"
#include "pbl_user_interface.h"
#include "urd_cmd.h"
#include "securec.h"
#ifndef ERESTARTSYS
#define ERESTARTSYS 512
#endif
#define MODULE_DMS "dms"
#define DMS_ERR(fmt, ...) DRV_ERR(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#define DMS_WARN(fmt, ...) DRV_WARN(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#define DMS_INFO(fmt, ...) DRV_INFO(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#define DMS_DEBUG(fmt, ...) DRV_DEBUG(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#define DMS_EVENT(fmt, ...) DRV_RUN_INFO(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#if defined(CFG_FEATURE_DRV_EVENT_LOG)
#define FAULT_DMS_EVENT(fmt, ...) DRV_EVENT(HAL_MODULE_TYPE_DEV_MANAGER, fmt, ##__VA_ARGS__)
#endif
#define DMS_EX_NOTSUPPORT_ERR(ret, fmt, ...) do { \
if (((ret) != (int)DRV_ERROR_NOT_SUPPORT) && ((ret) != (int)EOPNOTSUPP)) { \
DMS_ERR(fmt, ##__VA_ARGS__); \
} \
} while (0)
#define DMS_MAKE_UP_FILTER_DEVICE_INFO(f, main_cmd) do { \
(f)->filter_len = (unsigned int)sprintf_s((f)->filter, sizeof((f)->filter), "main_cmd=0x%x", main_cmd); \
} while (0)
#define DMS_MAKE_UP_FILTER_DEVICE_INFO_EX(f, main_cmd, sub_cmd) do { \
(f)->filter_len = (unsigned int)sprintf_s((f)->filter, sizeof((f)->filter), "main_cmd=0x%x,sub_cmd=0x%x", main_cmd, sub_cmd); \
} while (0)
#define PROC_MOUDULE_FILE_NAME "/proc/modules"
#define DEV_MODULE_INIT_INFO_LEN 1024
#define MAX_FOPEN_RETRY_TIMES 5
int DmsIoctl(int cmd, struct dms_ioctl_arg *ioarg);
drvError_t DmsIoctlConvertErrno(unsigned long cmd, struct urd_ioctl_arg *ioarg);
int DmsGetVirtFlag(void);
int dms_set_virt_flag(int env_virt);
int dms_run_proc(const char **arg);
int drvGetKlogBuf(uint32_t devId, const char *path, unsigned int *p_size);
int dms_ioctl_open(int fd);
drvError_t ioctl_errno_convert(int ret, int errno_param);
#define DMS_VIRT_ADAPT_FUNC(virt_func, phy_func) ((DmsGetVirtFlag() == true) ? (virt_func) : (phy_func))
drvError_t dmsCloseRestoreHandler(uint32_t devid, halDevCloseIn *in);
drvError_t dmsProcResRestoreHandler(halProcResRestoreInfo *info);
drvError_t dms_res_enable_p2p(u32 dev_num);
drvError_t dms_res_rollback_p2p(u32 target_dev_id, u32 target_peer_id, u32 tmp_cnt);
#endif