libsr.axera / include /ax_devices.h
zheqiushui's picture
Upload 19 files
e3513f8 verified
#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__