#ifndef __AX_DEVICES_H__ #define __AX_DEVICES_H__ #if defined(__cplusplus) extern "C" { #endif #define AX_DEVICES_COUNT 16 #define AX_VERSION_LEN 32 typedef enum { ax_dev_errcode_failed = -1, ax_dev_errcode_success = 0, ax_dev_errcode_sysinit_failed, ax_dev_errcode_sysdeinit_failed, ax_dev_errcode_axcl_sysinit_failed, ax_dev_errcode_axcl_sysdeinit_failed, } ax_dev_errcode_e; typedef enum { unknown_device = 0, host_device = 1, axcl_device = 2 } ax_devive_e; typedef struct { struct { char available; char version[AX_VERSION_LEN]; struct { int remain; int total; } mem_info; } host; struct { char host_version[AX_VERSION_LEN]; char dev_version[AX_VERSION_LEN]; unsigned char count; struct { int temp; int cpu_usage; int npu_usage; struct { int remain; int total; } mem_info; } devices_info[AX_DEVICES_COUNT]; } devices; } ax_devices_t; int ax_dev_enum_devices(ax_devices_t *devices); int ax_dev_sys_init(ax_devive_e dev_type, char devid); int ax_dev_sys_deinit(ax_devive_e dev_type, char devid); /** * @brief 当设备初始化后,申请设备内存 * 当devid>=0,则虚拟地址为host地址(用作对称),物理地址为设备地址 * 当devid=-1,则虚拟地址和物理地址都为CMM地址 * * @param devid 设备id * @param size 内存大小 * @param pVirAddr 虚拟地址 * @param phyAddr 物理地址 * @return int */ int ax_dev_malloc(char devid, int size, void **pVirAddr, unsigned long long int *phyAddr); /** * @brief 当设备初始化后,释放设备内存 * * @param devid 设备id * @param pVirAddr 虚拟地址 * @param phyAddr 物理地址 * @return int */ int ax_dev_free(char devid, void *pVirAddr, unsigned long long int phyAddr); /** * @brief 当设备初始化后,将内存从源地址复制到目标地址(注意,加速卡内存拷贝不会将ax_dev_malloc申请的host内存进行同步,需要用户自己进行同步) * src和dst都是host内存,则执行memcpy * src为host内存,而dst为设备内存,则执行 host2dev memcpy * dst为host内存,而src为设备内存,则执行 dev2host memcpy * src和dst都是设备内存,则执行dev2dev memcpy(仅支持同设备id内 memcpy) * * * @param devid 设备id * @param pSrcVirAddr 源虚拟地址 * @param SrcphyAddr 源物理地址,如果为0,则认为为host的内存 * @param pDstVirAddr 目标虚拟地址 * @param DstphyAddr 目标物理地址,如果为0,则认为为host的内存 * @param size 内存大小 * @return int */ int ax_dev_memcpy(char devid, void *pSrcVirAddr, unsigned long long int SrcphyAddr, void *pDstVirAddr, unsigned long long int DstphyAddr, int size); /** * @brief 当设备初始化后,将内存设置为指定值 * * @param devid 设备id * @param pVirAddr 虚拟地址 * @param phyAddr 物理地址 * @param value 值 * @param size 内存大小 * @return int */ int ax_dev_memset(char devid, void *pVirAddr, unsigned long long int phyAddr, int value, int size); #if defined(__cplusplus) } #endif #endif // __AX_DEVICES_H__