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__