File size: 3,696 Bytes
e3513f8 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
#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__ |