ax_interpreter_external_api.h 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275
  1. /***************************************************************************
  2. *
  3. * Copyright (c) 2019-2020 Aichip Technology Co., Ltd. All Rights Reserved.
  4. *
  5. * This source file is the property of Aichip Technology Co., Ltd. and
  6. * may not be copied or distributed in any isomorphic form without the prior
  7. * written consent of Aichip Technology Co., Ltd.
  8. *
  9. ****************************************************************************/
  10. #ifndef __AX_AX_S32ERPRETER_API_EXTERNAL_H
  11. #define __AX_AX_S32ERPRETER_API_EXTERNAL_H
  12. #include <stdint.h>
  13. #include "ax_base_type.h"
  14. #ifdef __cplusplus
  15. #if __cplusplus
  16. extern "C" {
  17. #endif
  18. #endif /* __cplusplus */
  19. #define AX_NPU_DEV_STATUS_SUCCESS (0)
  20. #define AX_NPU_DEV_STATUS_HANDLE_INVALID (0x80060081)
  21. #define AX_NPU_DEV_STATUS_TASK_INVALID (0x80060082)
  22. #define AX_NPU_DEV_STATUS_NO_INIT (0x80060083)
  23. #define AX_NPU_DEV_STATUS_PARAM_INVALID (0x80060084)
  24. #define AX_NPU_DEV_STATUS_NO_RESOURCES (0x80060085)
  25. #define AX_NPU_DEV_STATUS_MEM_ERROR (0x80060086)
  26. #define AX_NPU_DEV_STATUS_HARD_ERROR (0x80060087)
  27. #define AX_NPU_DEV_STATUS_NOT_SUPPORT (0x80060088)
  28. #define AX_NPU_DEV_STATUS_TASK_BUSY (0x80060089)
  29. #define AX_NPU_TASK_STATUS_SUCCESS (0)
  30. #define AX_NPU_TASK_STATUS_FAILED (0x8006008a)
  31. typedef AX_VOID* AX_NPU_SDK_EX_HANDLE_T;
  32. typedef AX_U32 AX_NPU_SDK_EX_TASK_ID_T;
  33. typedef AX_VOID(*AX_NPU_SDK_EX_FINISH_FUNC)(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_TASK_ID_T taskId, AX_U32 error_code, AX_VOID *userData);
  34. typedef AX_VOID* AX_NPU_SDK_EX_RUNTIME_VAR_T;
  35. typedef AX_VOID* AX_NPU_SDK_EX_PREPROCESS_MICRO_CODE_T;
  36. typedef struct {
  37. AX_ADDR phyAddr;
  38. AX_VOID *pVirAddr;
  39. AX_U32 nSize;
  40. AX_ADDR innerPhyAddr;
  41. AX_VOID *pInnerVirAddr;
  42. AX_U32 nInnerSize;
  43. } AX_NPU_SDK_EX_BUF_T;
  44. typedef struct {
  45. AX_NPU_SDK_EX_BUF_T *pInputs;
  46. AX_U32 nInputSize;
  47. AX_NPU_SDK_EX_BUF_T *pOutputs;
  48. AX_U32 nOutputSize;
  49. } AX_NPU_SDK_EX_IO_T;
  50. typedef struct {
  51. AX_NPU_SDK_EX_IO_T tIo;
  52. AX_NPU_SDK_EX_FINISH_FUNC fnFinishFunc;
  53. AX_VOID *pUserData;
  54. } AX_NPU_SDK_EX_RESOURCE_T;
  55. typedef enum {
  56. AX_NPU_MT_INVALID = 0,
  57. AX_NPU_MT_PHYSICAL = 1,
  58. AX_NPU_MT_VIRTUAL = 2
  59. } AX_NPU_SDK_EX_MEMORY_TYPE_T;
  60. typedef struct {
  61. AX_S8 *pName;
  62. AX_U32 *pShape;
  63. AX_U8 nShapeNDim;
  64. AX_U32 nBit;
  65. AX_U32 nInnerBit;
  66. AX_U32 nSize;
  67. AX_U32 nInnerSize;
  68. AX_NPU_SDK_EX_MEMORY_TYPE_T eMemoryType;
  69. AX_S32 nPreallocOCMStartAddr;
  70. AX_S32 nPreallocOCMEndAddr;
  71. } AX_NPU_SDK_EX_TENSOR_META_T;
  72. typedef struct {
  73. AX_NPU_SDK_EX_TENSOR_META_T *pInputs;
  74. AX_U32 nInputSize;
  75. AX_NPU_SDK_EX_TENSOR_META_T *pOutputs;
  76. AX_U32 nOutputSize;
  77. } AX_NPU_SDK_EX_IO_INFO_T;
  78. typedef enum {
  79. AX_NPU_ABST_DEFAULT = 0,
  80. AX_NPU_ABST_CACHED = 1,
  81. } AX_NPU_SDK_EX_ALLOC_BUFFER_STRATEGY_T;
  82. typedef enum {
  83. AX_NPU_VIRTUAL_DISABLE = 0,
  84. AX_NPU_VIRTUAL_3_1 = 1,
  85. AX_NPU_VIRTUAL_2_2 = 2,
  86. AX_NPU_VIRTUAL_1_1 = 3
  87. } AX_NPU_SDK_EX_HARD_MODE_T;
  88. typedef enum {
  89. AX_NPU_EX_DDR_BW_LIMIT_DISABLE = 0,
  90. AX_NPU_EX_DDR_BW_LIMIT_2P1GB = 1,
  91. AX_NPU_EX_DDR_BW_LIMIT_2P8GB = 2,
  92. AX_NPU_EX_DDR_BW_LIMIT_3P5GB = 3,
  93. AX_NPU_EX_DDR_BW_LIMIT_4P1GB = 4,
  94. AX_NPU_EX_DDR_BW_LIMIT_4P8GB = 5,
  95. AX_NPU_EX_DDR_BW_LIMIT_5P5GB = 6,
  96. AX_NPU_EX_DDR_BW_LIMIT_6P2GB = 7,
  97. AX_NPU_EX_DDR_BW_LIMIT_6P9GB = 8,
  98. AX_NPU_EX_DDR_BW_LIMIT_7P6GB = 9,
  99. AX_NPU_EX_DDR_BW_LIMIT_8P3GB = 10,
  100. AX_NPU_EX_DDR_BW_LIMIT_9P0GB = 11,
  101. AX_NPU_EX_DDR_BW_LIMIT_9P9GB = 12,
  102. AX_NPU_EX_DDR_BW_LIMIT_MAX
  103. } AX_NPU_SDK_EX_DDR_LIM_T;
  104. typedef struct {
  105. AX_NPU_SDK_EX_HARD_MODE_T eHardMode;
  106. } AX_NPU_SDK_EX_ATTR_T;
  107. typedef struct {
  108. AX_NPU_SDK_EX_HARD_MODE_T eHardMode;
  109. AX_NPU_SDK_EX_DDR_LIM_T eDdrBwLimit;
  110. #if defined(__aarch64__)
  111. AX_U64 u64Reserved[8];
  112. #elif defined(__arm__)
  113. AX_U64 u64Reserved[8];
  114. #endif
  115. } AX_NPU_SDK_EX_ATTR_V1_T;
  116. typedef enum {
  117. AX_NPU_MODEL_TYPE_DEFUALT = 0,
  118. AX_NPU_MODEL_TYPE_3_1_1 = 1,
  119. AX_NPU_MODEL_TYPE_3_1_2 = 2,
  120. AX_NPU_MODEL_TYPE_2_2_1 = 3,
  121. AX_NPU_MODEL_TYPE_2_2_2 = 4,
  122. AX_NPU_MODEL_TYPE_1_1_1 = 5,
  123. AX_NPU_MODEL_TYPE_1_1_2 = 6
  124. } AX_NPU_SDK_EX_MODEL_TYPE_T;
  125. typedef struct {
  126. uint64_t total_cycle;
  127. uint32_t eu_cycle[9];
  128. uint32_t valid_eu_num;
  129. } AX_NPU_SDK_EX_WORK_CYCLE_T;
  130. typedef enum {
  131. AX_NPU_RTV_AFFINE = 1,
  132. AX_NPU_RTV_DMA_CCM_AX630A = 2,
  133. AX_NPU_RTV_WB_CLIP = 3,
  134. AX_NPU_RTV_MASK_RATIO = 4,
  135. AX_NPU_RTV_DRC_PARAM = 5,
  136. AX_NPU_RTV_SRC_RATIO = 6,
  137. AX_NPU_RTV_WARP_CCM = 7,
  138. AX_NPU_RTV_WARP_MAT33 = 8,
  139. AX_NPU_RTV_YDRC_CONTEXT = 9,
  140. AX_NPU_RTV_YDRC_OFFSET = 10,
  141. AX_NPU_RTV_YDRC_DITHER = 11,
  142. AX_NPU_RTV_YDRC_LUT = 12,
  143. AX_NPU_RTV_WAIT_IFE_DONE = 13,
  144. AX_NPU_RTV_HAAR_SHRINKAGE_COEFF = 14,
  145. AX_NPU_RTV_HAAR_BLEND_COEFF = 15,
  146. AX_NPU_RTV_HAAR_FTZ = 16,
  147. AX_NPU_RTV_HAAR_BLEND_WEIGHT = 17,
  148. AX_NPU_RTV_HAAR_SHRINKAGE_WEIGHT = 18,
  149. AX_NPU_RTV_HAAR_OFFSET = 19,
  150. AX_NPU_RTV_HSK_OCM_WAIT_ITP_EUS = 20
  151. } AX_NPU_SDK_EX_RTV_TYPE_T;
  152. typedef struct {
  153. AX_NPU_SDK_EX_RTV_TYPE_T eType;
  154. AX_S32 nIndex;
  155. AX_S8 *pName;
  156. AX_U64 u64Reserved[8];
  157. } AX_NPU_SDK_EX_RTV_META_T;
  158. typedef struct {
  159. AX_NPU_SDK_EX_RTV_META_T *pMeta;
  160. AX_U32 nMetaSize;
  161. AX_U64 u64Reserved[8];
  162. } AX_NPU_SDK_EX_RTV_INFO_T;
  163. typedef struct {
  164. AX_NPU_SDK_EX_PREPROCESS_MICRO_CODE_T tPreprocessMicroCode;
  165. AX_NPU_SDK_EX_RUNTIME_VAR_T tRuntimeVar;
  166. AX_U32 nWbtIndex;
  167. AX_U32 nRuntimeVarSize;
  168. #if defined(__aarch64__)
  169. AX_U64 u64Reserved[8];
  170. #elif defined(__arm__)
  171. AX_U64 u64Reserved[9];
  172. #endif
  173. } AX_NPU_SDK_EX_ExtraParameters;
  174. typedef struct {
  175. AX_BOOL bHasPreprocessMicroCode;
  176. AX_BOOL bHasRuntimeVar;
  177. AX_U32 nWbtNum;
  178. #if defined(__aarch64__)
  179. AX_U64 u64Reserved[8];
  180. #elif defined(__arm__)
  181. AX_U64 u64Reserved[8];
  182. #endif
  183. } AX_NPU_SDK_EX_ExtraParametersInfo;
  184. typedef struct {
  185. AX_U32 nModelMcodeSize;
  186. AX_U32 nCvPreProcessMcodeSize;
  187. AX_U32 nWbtSize;
  188. AX_U32 nRingbufferSize;
  189. #if defined(__aarch64__)
  190. AX_U64 u64Reserved[8];
  191. #elif defined(__arm__)
  192. AX_U64 u64Reserved[8];
  193. #endif
  194. } AX_NPU_SDK_EX_MODEL_CMM_INFO_T;
  195. const AX_CHAR* AX_NPU_SDK_EX_GetVersion();
  196. AX_S32 AX_NPU_SDK_EX_Init(AX_VOID);
  197. AX_VOID AX_NPU_SDK_EX_Deinit(AX_VOID);
  198. AX_S32 AX_NPU_SDK_EX_Create_handle(AX_NPU_SDK_EX_HANDLE_T *handle, const AX_VOID *dotNeuAddr, AX_S32 dotNeuLen);
  199. AX_S32 AX_NPU_SDK_EX_Create_handle_prealloc_wbt(
  200. AX_NPU_SDK_EX_HANDLE_T *handle, const AX_VOID *dotNeuAddr, AX_S32 dotNeuLen,
  201. AX_U64 wbt_phy, const AX_VOID* wbt_vir, AX_S32 wbt_size
  202. );
  203. AX_S32 AX_NPU_SDK_EX_Create_handle_prealloc_wbt_v2(
  204. AX_NPU_SDK_EX_HANDLE_T *handle, const AX_VOID *dotNeuAddr, AX_S32 dotNeuLen,
  205. AX_U64 wbt_phy, const AX_VOID* wbt_vir, AX_S32 wbt_size,
  206. const AX_S8 *name);
  207. AX_S32 AX_NPU_SDK_EX_Run_task_async(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_RESOURCE_T *resource, AX_NPU_SDK_EX_TASK_ID_T *taskId);
  208. AX_S32 AX_NPU_SDK_EX_Run_task_sync(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_IO_T *io);
  209. // run task v2 deprecated, please use v3
  210. AX_S32 AX_NPU_SDK_EX_Run_task_async_v2(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_PREPROCESS_MICRO_CODE_T preprocessMicroCode, AX_NPU_SDK_EX_RESOURCE_T *resource, AX_NPU_SDK_EX_TASK_ID_T *taskId);
  211. AX_S32 AX_NPU_SDK_EX_Run_task_sync_v2(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_PREPROCESS_MICRO_CODE_T preprocessMicroCode, AX_NPU_SDK_EX_IO_T *io);
  212. AX_S32 AX_NPU_SDK_EX_Run_task_async_v3(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_RESOURCE_T *resource, AX_NPU_SDK_EX_TASK_ID_T *taskId, AX_NPU_SDK_EX_ExtraParameters *pExtraParamters);
  213. AX_S32 AX_NPU_SDK_EX_Run_task_sync_v3(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_IO_T *io, AX_NPU_SDK_EX_ExtraParameters *pExtraParamters);
  214. AX_S32 AX_NPU_SDK_EX_Cancel_task(AX_NPU_SDK_EX_TASK_ID_T taskId);
  215. AX_S32 AX_NPU_SDK_EX_Destroy_handle(AX_NPU_SDK_EX_HANDLE_T handle);
  216. AX_VOID AX_NPU_SDK_EX_Hard_reset(AX_VOID);
  217. AX_S32 AX_NPU_SDK_EX_Init_with_attr(AX_NPU_SDK_EX_ATTR_T *pNpuAttr);
  218. AX_S32 AX_NPU_SDK_EX_Init_with_attr_v1(AX_NPU_SDK_EX_ATTR_V1_T *pNpuAttr_v1);
  219. AX_S32 AX_NPU_SDK_EX_Get_Attr(AX_NPU_SDK_EX_ATTR_T *pNpuAttr);
  220. AX_S32 AX_NPU_SDK_EX_Alloc_buffer(AX_NPU_SDK_EX_TENSOR_META_T* meta, AX_NPU_SDK_EX_BUF_T *buf, AX_NPU_SDK_EX_ALLOC_BUFFER_STRATEGY_T strategy);
  221. AX_S32 AX_NPU_SDK_EX_Free_buffer(AX_NPU_SDK_EX_BUF_T *buf);
  222. const AX_NPU_SDK_EX_IO_INFO_T* AX_NPU_SDK_EX_Get_io_info(AX_NPU_SDK_EX_HANDLE_T handle);
  223. AX_S32 AX_NPU_SDK_EX_Get_Model_type(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_MODEL_TYPE_T *pModelType);
  224. AX_S32 AX_NPU_SDK_EX_Get_Dot_neu_type(const AX_VOID *dotNeuAddr, AX_S32 dotNeuLen, AX_NPU_SDK_EX_MODEL_TYPE_T *pModelType);
  225. AX_S32 AX_NPU_SDK_EX_Get_Work_Cycle(AX_NPU_SDK_EX_WORK_CYCLE_T *pNpuCycle);
  226. const AX_NPU_SDK_EX_RTV_INFO_T* AX_NPU_SDK_EX_Get_RTV_info(AX_NPU_SDK_EX_HANDLE_T handle);
  227. AX_S32 AX_NPU_SDK_EX_Get_extra_parameters_info(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_ExtraParametersInfo *pExtraInfo);
  228. AX_S32 AX_NPU_SDK_EX_Get_wbt_params_list(AX_NPU_SDK_EX_HANDLE_T handle, AX_CHAR*** pNames, AX_U32* pNameSize);
  229. AX_S32 AX_NPU_SDK_EX_Get_model_cmm_info(AX_NPU_SDK_EX_HANDLE_T handle, AX_NPU_SDK_EX_MODEL_CMM_INFO_T *pCmmInfo);
  230. AX_S32 AX_NPU_SDK_EX_Get_model_vm_consumption(AX_NPU_SDK_EX_HANDLE_T handle, AX_U32 *pPeak, AX_U32 *pPermanent);
  231. #ifdef __cplusplus
  232. #if __cplusplus
  233. }
  234. #endif
  235. #endif /* __cplusplus */
  236. #endif