/***************************************************************************** | |
* | |
* Copyright (c) 2016-2026 by Bitmain Technologies Inc. All rights reserved. | |
* | |
* The material in this file is confidential and contains trade secrets | |
* of Bitmain Technologies Inc. This is proprietary information owned by | |
* Bitmain Technologies Inc. No part of this work may be disclosed, | |
* reproduced, copied, transmitted, or used in any way for any purpose, | |
* without the express written permission of Bitmain Technologies Inc. | |
* | |
*****************************************************************************/ | |
/************************************************************************** | |
* bmlib_runtime defines interfaces that operate TPU devices. | |
* The functions can be divided into serveral categories. | |
* 1) device handle creation and destroy | |
* 2) memory help functions | |
* 3) global memory allocation and free | |
* 4) data transfer between host and device | |
* 5) data transfer within device memory | |
* 6) api send and synchronization | |
* 7) global memory map and coherence | |
* 8) trace and profile | |
* 9) power management | |
* 10) miscellaneous functions | |
*************************************************************************/ | |
extern "C" { | |
typedef enum { | |
MODULE_CDMA = 0, | |
MODULE_GDMA = 1, | |
MODULE_TPU = 2, | |
MODULE_SMMU = 3, | |
MODULE_SRAM = 4, | |
MODULE_END = 5 | |
} MODULE_ID; | |
/* BM function return code definitions */ | |
typedef enum { | |
BM_SUCCESS = 0, | |
BM_ERR_DEVNOTREADY = 1, /* Device not ready yet */ | |
BM_ERR_FAILURE = 2, /* General failure */ | |
BM_ERR_TIMEOUT = 3, /* Timeout */ | |
BM_ERR_PARAM = 4, /* Parameters invalid */ | |
BM_ERR_NOMEM = 5, /* Not enough memory */ | |
BM_ERR_DATA = 6, /* Data error */ | |
BM_ERR_BUSY = 7, /* Busy */ | |
BM_ERR_NOFEATURE = 8, /* Not supported yet */ | |
BM_NOT_SUPPORTED = 9 | |
} bm_status_t; | |
/* BM memory type definitions */ | |
typedef enum { | |
BM_MEM_TYPE_DEVICE = 0, | |
BM_MEM_TYPE_HOST = 1, | |
BM_MEM_TYPE_SYSTEM = 2, | |
BM_MEM_TYPE_INT8_DEVICE = 3, | |
BM_MEM_TYPE_INVALID = 4 | |
} bm_mem_type_t; | |
typedef enum { | |
PERF_MONITOR_GDMA = 0, | |
PERF_MONITOR_TPU = 1 | |
} PERF_MONITOR_ID; | |
typedef enum { | |
BMCPU_IDLE = 0, | |
BMCPU_RUNNING = 1, | |
BMCPU_FAULT = 2 | |
} bm_cpu_status_t; | |
/* | |
* bm performace monitor | |
*/ | |
typedef struct bm_perf_monitor { | |
long long buffer_start_addr; /*buffer address to store perf data*/ | |
int buffer_size; /*buffer size*/ | |
PERF_MONITOR_ID monitor_id; /*PERF_MONITOR_GDMA or PERF_MONITOR_TPU*/ | |
} bm_perf_monitor_t; | |
typedef union { | |
struct { | |
bm_mem_type_t mem_type : 3; | |
unsigned int gmem_heapid : 3; | |
unsigned int reserved : 26; | |
} u; | |
unsigned int rawflags; | |
} bm_mem_flags_t; | |
/* BM memory descriptor definition*/ | |
typedef struct bm_mem_desc { | |
union { | |
struct { | |
unsigned long device_addr; | |
unsigned long long device_addr; | |
unsigned int reserved; | |
int dmabuf_fd; | |
} device; | |
struct { | |
void *system_addr; | |
unsigned int reserved0; | |
int reserved1; | |
} system; | |
} u; | |
bm_mem_flags_t flags; | |
unsigned int size; | |
} bm_mem_desc_t; | |
typedef struct bm_mem_desc bm_device_mem_t; | |
typedef struct bm_mem_desc bm_system_mem_t; | |
typedef struct sg_mem_desc { | |
union { | |
struct { | |
unsigned long device_addr; | |
unsigned long long device_addr; | |
unsigned int reserved; | |
int dmabuf_fd; | |
} device; | |
struct { | |
void *system_addr; | |
unsigned int reserved0; | |
int reserved1; | |
} system; | |
} u; | |
bm_mem_flags_t flags; | |
unsigned long long size; | |
} sg_mem_desc_t; | |
typedef struct sg_mem_desc sg_device_mem_t; | |
typedef struct sg_mem_desc sg_system_mem_t; | |
struct bm_context; | |
typedef struct bm_context *bm_handle_t; | |
typedef struct bm_module | |
{ | |
// void *lib_handle; | |
char lib_name[LIB_MAX_NAME_LEN]; | |
unsigned char md5[MD5SUM_LEN]; | |
}bm_module; | |
typedef struct bm_module *tpu_kernel_module_t; | |
typedef int tpu_kernel_function_t; | |
/** | |
* @name tpu_kernel_load_module_file | |
* @brief To load dyn file | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] module_file dyn file | |
* @retval dyn lib ptr | |
*/ | |
tpu_kernel_module_t tpu_kernel_load_module_file(bm_handle_t handle, const char *module_file); | |
/** | |
* @name tpu_kernel_load_module_file_key | |
* @brief To load dyn file with key | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] module_file dyn file | |
* @param [in] key identification str | |
* @param [in] size key size | |
* @retval dyn lib ptr | |
*/ | |
tpu_kernel_module_t tpu_kernel_load_module_file_key(bm_handle_t handle, const char *module_file, const char *key, int size); | |
/** | |
* @name tpu_kernel_unload_module | |
* @brief To unload dyn file | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] p_module dyn lib ptr | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_unload_module(bm_handle_t handle, tpu_kernel_module_t p_module); | |
/** | |
* @name tpu_kernel_free_module | |
* @brief To free p_module when not use | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] p_module dyn lib ptr | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_free_module(bm_handle_t handle, tpu_kernel_module_t p_module); | |
/** | |
* @name tpu_kernel_load_module | |
* @brief To load dyn module | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] data dyn module | |
* @param [in] length dyn module size | |
* @retval dyn lib ptr | |
*/ | |
tpu_kernel_module_t tpu_kernel_load_module(bm_handle_t handle, const char *data, size_t length); | |
/** | |
* @name tpu_kernel_get_function | |
* @brief To get function from lib | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] module dyn module | |
* @param [in] function funtion name | |
* @retval function id | |
*/ | |
tpu_kernel_function_t tpu_kernel_get_function(bm_handle_t handle, tpu_kernel_module_t module, const char *function); | |
/** | |
* @name tpu_kernel_launch | |
* @brief To launch function with sync | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] function function id | |
* @param [in] args funtion args | |
* @param [in] size args size | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_launch(bm_handle_t handle, tpu_kernel_function_t function, void *args, size_t size); | |
/** | |
* @name tpu_kernel_launch_async | |
* @brief To launch function with async | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] function function id | |
* @param [in] args funtion args | |
* @param [in] size args size | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_launch_async(bm_handle_t handle, tpu_kernel_function_t function, void *args, size_t size); | |
/** | |
* @name tpu_kernel_launch_async_multi_cores | |
* @brief To launch function with async for multi cores | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] func_name function name | |
* @param [in] api_param funtion params | |
* @param [in] api_size params size | |
* @param [in] core_list list of core ids | |
* @param [in] core_num number of cores | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_launch_async_multi_cores(bm_handle_t handle, const char *func_name, const void *api_param, | |
size_t api_size, const int* core_list, const int core_num); | |
/** | |
* @name tpu_kernel_launch_sync_multi_cores | |
* @brief To launch function with sync for multi cores | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] func_name function name | |
* @param [in] api_param funtion params | |
* @param [in] api_size params size | |
* @param [in] core_list list of core ids | |
* @param [in] core_num number of cores | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_launch_sync_multi_cores(bm_handle_t handle, const char *func_name, const void *api_param, | |
size_t api_size, const int* core_list, const int core_num); | |
/** | |
* @name tpu_kernel_sync | |
* @brief To sync | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
bm_status_t tpu_kernel_sync(bm_handle_t handle); | |
void show_md5(unsigned char md5[]); | |
DECL_EXPORT void bmlib_log(const char *tag, int level, const char *fmt, ...); | |
/*******************handle releated functions *********************************/ | |
/** | |
* @name bm_dev_getcount | |
* @brief To get the number of sophon devices in system. | |
* If N is got, valid devid is [0, N-1] | |
* @ingroup bmlib_runtime | |
* | |
* @param [out] count The result number of sophon devices | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_dev_getcount(int *count); | |
/** | |
* @name bm_dev_query | |
* @brief To query if a device is present | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] devid The id of the device to query | |
* @retval BM_SUCCESS Device is present | |
* Other code Devcie is not present | |
*/ | |
DECL_EXPORT bm_status_t bm_dev_query(int devid); | |
/** | |
* @name bm_dev_request | |
* @brief To create a handle for the given device | |
* @ingroup bmlib_runtime | |
* | |
* @param [out] handle The created handle | |
* @param [in] devid Specify on which device to create handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_dev_request(bm_handle_t *handle, int devid); | |
/** | |
* @name bm_get_devid | |
* @brief To get device index for the given handle | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The given handle | |
* @retval int device index that the handle points to. | |
*/ | |
DECL_EXPORT int bm_get_devid(bm_handle_t handle); | |
/** | |
* @name bm_dev_free | |
* @brief To free a handle | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The handle to free | |
*/ | |
DECL_EXPORT void bm_dev_free(bm_handle_t handle); | |
/*******************memory help functions ************************************/ | |
/** | |
* @name bm_mem_get_type | |
* @brief To get a memory descriptor's type | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The memory descriptor queried | |
* @retval BM_MEM_TYPE_DEVICE Device global memory | |
* @retval BM_MEM_TYPE_SYSTEM Host user memory | |
*/ | |
DECL_EXPORT bm_mem_type_t bm_mem_get_type(struct bm_mem_desc mem); | |
/** | |
* @name sg_mem_get_type | |
* @brief To get a memory descriptor's type | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The memory descriptor queried | |
* @retval BM_MEM_TYPE_DEVICE Device global memory | |
* @retval BM_MEM_TYPE_SYSTEM Host user memory | |
*/ | |
DECL_EXPORT bm_mem_type_t sg_mem_get_type(struct sg_mem_desc mem); | |
/** | |
* @name bm_mem_get_device_addr | |
* @brief To get a device memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The device memory descriptor queried | |
* @retval unsigned long long The device memory address | |
*/ | |
DECL_EXPORT unsigned long long bm_mem_get_device_addr(struct bm_mem_desc mem); | |
/** | |
* @name sg_mem_get_device_addr | |
* @brief To get a device memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The device memory descriptor queried | |
* @retval unsigned long long The device memory address | |
*/ | |
DECL_EXPORT unsigned long long sg_mem_get_device_addr(struct sg_mem_desc mem); | |
/** | |
* @name bm_mem_set_device_addr | |
* @brief To set a device memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The device memory descriptor pointer | |
* @param ]in] addr The new device address of the device memory | |
*/ | |
DECL_EXPORT void bm_mem_set_device_addr(struct bm_mem_desc* pmem, unsigned long long addr); | |
/** | |
* @name sg_mem_set_device_addr | |
* @brief To set a device memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The device memory descriptor pointer | |
* @param ]in] addr The new device address of the device memory | |
*/ | |
DECL_EXPORT void sg_mem_set_device_addr(struct sg_mem_desc* pmem, unsigned long long addr); | |
/** | |
* @name bm_mem_get_device_size | |
* @brief To get a device memory descriptor's size | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The device memory descriptor queried | |
* @retval unsigned int The device memory's size in bytes | |
*/ | |
DECL_EXPORT unsigned int bm_mem_get_device_size(struct bm_mem_desc mem); | |
/** | |
* @name sg_mem_get_device_size | |
* @brief To get a device memory descriptor's size | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The device memory descriptor queried | |
* @retval unsigned int The device memory's size in bytes | |
*/ | |
DECL_EXPORT unsigned long long sg_mem_get_device_size(struct sg_mem_desc mem); | |
/** | |
* @name bm_mem_set_device_size | |
* @brief To set a device memory descriptor's size | |
* @ingroup bmlib_runtime | |
* | |
* @param [out] pmem The device memory descriptor pointer | |
* @param [in] size The new device memory size (in bytes) of the device memory | |
*/ | |
DECL_EXPORT void bm_mem_set_device_size(struct bm_mem_desc* pmem, unsigned int size); | |
/** | |
* @name sg_mem_set_device_size | |
* @brief To set a device memory descriptor's size | |
* @ingroup bmlib_runtime | |
* | |
* @param [out] pmem The device memory descriptor pointer | |
* @param [in] size The new device memory size (in bytes) of the device memory | |
*/ | |
DECL_EXPORT void sg_mem_set_device_size(struct sg_mem_desc* pmem, unsigned long long size); | |
/** | |
* @name bm_set_device_mem | |
* @brief To fill in a device memory descriptor with size and address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The device memory descriptor pointer | |
* @param [in] size The device memory descriptor's size | |
* @param [in] addr The device memory descriptor's address | |
*/ | |
DECL_EXPORT void bm_set_device_mem(bm_device_mem_t* pmem, unsigned int size, | |
unsigned long long addr); | |
/** | |
* @name sg_set_device_mem | |
* @brief To fill in a device memory descriptor with size and address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The device memory descriptor pointer | |
* @param [in] size The device memory descriptor's size | |
* @param [in] addr The device memory descriptor's address | |
*/ | |
DECL_EXPORT void sg_set_device_mem(sg_device_mem_t* pmem, unsigned long long size, | |
unsigned long long addr); | |
/** | |
* @name bm_mem_from_device | |
* @brief To create a device memory descriptor from address and size | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] device_addr The device memory address | |
* @param [in] len The device memory size | |
* @retval bm_device_mem_t The device memory descriptor created | |
*/ | |
DECL_EXPORT bm_device_mem_t bm_mem_from_device(unsigned long long device_addr, | |
unsigned int len); | |
/** | |
* @name sg_mem_from_device | |
* @brief To create a device memory descriptor from address and size | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] device_addr The device memory address | |
* @param [in] len The device memory size | |
* @retval bm_device_mem_t The device memory descriptor created | |
*/ | |
DECL_EXPORT sg_device_mem_t sg_mem_from_device(unsigned long long device_addr, | |
unsigned long long len); | |
/** | |
* @name bm_mem_get_system_addr | |
* @brief To get a system memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The system memory descriptor | |
* @retval void * The system memory descriptor's address | |
*/ | |
DECL_EXPORT void *bm_mem_get_system_addr(struct bm_mem_desc mem); | |
/** | |
* @name sg_mem_get_system_addr | |
* @brief To get a system memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] mem The system memory descriptor | |
* @retval void * The system memory descriptor's address | |
*/ | |
DECL_EXPORT void *sg_mem_get_system_addr(struct sg_mem_desc mem); | |
/** | |
* @name bm_mem_set_system_addr | |
* @brief To set a system memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The system memory descriptor pointer | |
* @param [in] addr The system memory address | |
*/ | |
DECL_EXPORT void bm_mem_set_system_addr(struct bm_mem_desc* pmem, void *addr); | |
/** | |
* @name sg_mem_set_system_addr | |
* @brief To set a system memory descriptor's address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] pmem The system memory descriptor pointer | |
* @param [in] addr The system memory address | |
*/ | |
DECL_EXPORT void sg_mem_set_system_addr(struct sg_mem_desc* pmem, void *addr); | |
/** | |
* @name bm_mem_from_system | |
* @brief To create a system memory descriptor with the given system address | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] system_addr The system address in the descriptor | |
* @retval bm_system_mem_t The system memory descriptor created | |
*/ | |
DECL_EXPORT bm_system_mem_t bm_mem_from_system(void *system_addr); | |
/*******************memory alloc and free functions ***************************/ | |
/** | |
* @name bm_mem_null | |
* @brief Return an illegal device memory descriptor | |
* @ingroup bmlib_runtime | |
* | |
* @retval bm_device_mem_t An invalid device memory descriptor | |
*/ | |
DECL_EXPORT bm_device_mem_t bm_mem_null(void); | |
/** | |
* @name bm_malloc_neuron_device | |
* @brief To malloc device memory according to a tensor shape | |
* (each neuron is 32 bits) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result devcie memory descriptor | |
* @param [in] n, c, h, w The shape of the input tensor | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_malloc_neuron_device(bm_handle_t handle, bm_device_mem_t *pmem, | |
int n, int c, int h, int w); | |
/** | |
* @name sg_malloc_neuron_device | |
* @brief To malloc device memory according to a tensor shape | |
* (each neuron is 32 bits) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result devcie memory descriptor | |
* @param [in] n, c, h, w The shape of the input tensor | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_malloc_neuron_device(bm_handle_t handle, sg_device_mem_t *pmem, | |
unsigned long long n, unsigned long long c, | |
unsigned long long h, unsigned long long w); | |
/** | |
* @name bm_malloc_device_dword | |
* @brief To malloc device memory in size of dword (32 bits) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] count The number of dwords(32bits) to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_malloc_device_dword(bm_handle_t handle, bm_device_mem_t *pmem, | |
int count); | |
/** | |
* @name sg_malloc_device_dword | |
* @brief To malloc device memory in size of dword (32 bits) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] count The number of dwords(32bits) to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_malloc_device_dword(bm_handle_t handle, sg_device_mem_t *pmem, | |
unsigned long long count); | |
/** | |
* @name bm_malloc_device_byte | |
* @brief To malloc device memory in size of byte | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_malloc_device_byte(bm_handle_t handle, bm_device_mem_t *pmem, | |
unsigned int size); | |
/** | |
* @name sg_malloc_device_byte | |
* @brief To malloc device memory in size of byte | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_malloc_device_byte(bm_handle_t handle, sg_device_mem_t *pmem, | |
unsigned long long size); | |
/** | |
* @name bm_malloc_device_byte_heap | |
* @brief To malloc device memory in size of byte within the specified heap | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] heap_id The heap where to allocate 0/1/2 | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_malloc_device_byte_heap(bm_handle_t handle, bm_device_mem_t *pmem, | |
int heap_id, unsigned int size); | |
/** | |
* @name sg_malloc_device_byte_heap | |
* @brief To malloc device memory in size of byte within the specified heap | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] heap_id The heap where to allocate 0/1/2 | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_malloc_device_byte_heap(bm_handle_t handle, sg_device_mem_t *pmem, | |
int heap_id, unsigned long long size); | |
/** | |
* @name bm_malloc_device_byte_heap_mask | |
* @brief To malloc device memory in size of byte within the specified heaps | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] heap_id_mask The mask which heaps allocate from. each bit indicate one heap | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_malloc_device_byte_heap_mask(bm_handle_t handle, bm_device_mem_t *pmem, | |
int heap_id_mask, unsigned int size); | |
/** | |
* @name sg_malloc_device_byte_heap_mask | |
* @brief To malloc device memory in size of byte within the specified heaps | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmem The result device memory descriptor | |
* @param [in] heap_id_mask The mask which heaps allocate from. each bit indicate one heap | |
* @param [in] size The number of bytes to allocate | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_malloc_device_byte_heap_mask(bm_handle_t handle, sg_device_mem_t *pmem, | |
int heap_id_mask, unsigned long long size); | |
/** | |
* @name bm_free_device | |
* @brief To free device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] mem The device memory descriptor to free | |
*/ | |
DECL_EXPORT void bm_free_device(bm_handle_t handle, bm_device_mem_t mem); | |
/** | |
* @name sg_free_device | |
* @brief To free device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] mem The device memory descriptor to free | |
*/ | |
DECL_EXPORT void sg_free_device(bm_handle_t handle, sg_device_mem_t mem); | |
/** | |
* @name bm_gmem_arm_reserved_request | |
* @brief To obtain the address of global memory reserved for arm926 | |
* @param [in] handle The device handle | |
* | |
* @retval unsigned long long The absolute address of gmem reserved for arm926 | |
*/ | |
DECL_EXPORT unsigned long long bm_gmem_arm_reserved_request(bm_handle_t handle); | |
/** | |
* @name bm_gmem_arm_reserved_release | |
* @brief To release the global memory reserved for arm926 | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
*/ | |
DECL_EXPORT void bm_gmem_arm_reserved_release(bm_handle_t handle); | |
/*******************memory copy functions *************************************/ | |
/** | |
* @name bm_memcpy_s2d | |
* @brief To copy data from system memory to device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor ) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_s2d(bm_handle_t handle, bm_device_mem_t dst, void *src); | |
/** | |
* @name bm_memcpy_p2p | |
* @brief To copy data from one chip to another chip | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle_src The source device handle | |
* @param [in] src The source memory (device memory descriptor ) | |
* @param [in] handle_dst The destination device handle | |
* @param [in] dst The destination memory (device memory descriptor ) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_p2p(bm_handle_t handle_src, bm_device_mem_t src, bm_handle_t handle_dst,bm_device_mem_t dst); | |
/** | |
* @name sg_memcpy_s2d | |
* @brief To copy data from system memory to device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor ) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_s2d(bm_handle_t handle, sg_device_mem_t dst, void *src); | |
/** | |
* @name bm_memcpy_s2d_partial_offset | |
* @brief To copy specified bytes of data from system memory to device memory | |
* with an offset in device memory address. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* @param [in] size The size of data to copy (in bytes) | |
* @param [in] offset The offset of the device memory address | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_s2d_partial_offset(bm_handle_t handle, | |
bm_device_mem_t dst, void *src, | |
unsigned int size, | |
unsigned int offset); | |
/** | |
* @name sg_memcpy_s2d_partial_offset | |
* @brief To copy specified bytes of data from system memory to device memory | |
* with an offset in device memory address. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* @param [in] size The size of data to copy (in bytes) | |
* @param [in] offset The offset of the device memory address | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_s2d_partial_offset(bm_handle_t handle, | |
sg_device_mem_t dst, void *src, | |
unsigned long long size, | |
unsigned long long offset); | |
/** | |
* @name bm_memcpy_s2d_partial | |
* @brief To copy specified bytes of data from system memory to device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* @param [in] size The size of data to copy (in bytes) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_s2d_partial(bm_handle_t handle, bm_device_mem_t dst, | |
void *src, unsigned int size); | |
/** | |
* @name sg_memcpy_s2d_partial | |
* @brief To copy specified bytes of data from system memory to device memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (device memory descriptor) | |
* @param [in] src The source memory (system memory, a void* pointer) | |
* @param [in] size The size of data to copy (in bytes) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_s2d_partial(bm_handle_t handle, sg_device_mem_t dst, | |
void *src, unsigned long long size); | |
/** | |
* @name bm_memcpy_d2s | |
* @brief To copy data from device memory to system memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2s(bm_handle_t handle, void *dst, bm_device_mem_t src); | |
/** | |
* @name sg_memcpy_d2s | |
* @brief To copy data from device memory to system memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_d2s(bm_handle_t handle, void *dst, sg_device_mem_t src); | |
/** | |
* @name bm_memcpy_d2s_partial_offset | |
* @brief To copy specified bytes of data from device memory to system memory | |
* with an offset in device memory address. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* @param [in] size The size of data to copy (in bytes) | |
* @param [in] offset The offset of the device memory address | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2s_partial_offset(bm_handle_t handle, void *dst, | |
bm_device_mem_t src, unsigned int size, | |
unsigned int offset); | |
/** | |
* @name sg_memcpy_d2s_partial_offset | |
* @brief To copy specified bytes of data from device memory to system memory | |
* with an offset in device memory address. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* @param [in] size The size of data to copy (in bytes) | |
* @param [in] offset The offset of the device memory address | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_d2s_partial_offset(bm_handle_t handle, void *dst, | |
sg_device_mem_t src, unsigned long long size, | |
unsigned long long offset); | |
/** | |
* @name bm_memcpy_d2s_partial | |
* @brief To copy specified bytes of data from device memory to system memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* @param [in] size The size of data to copy (in bytes) | |
* | |
* @retval BM_SUCCESS Data transfer succeeds. | |
* Other code Data transfer fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2s_partial(bm_handle_t handle, void *dst, | |
bm_device_mem_t src, unsigned int size); | |
/** | |
* @name sg_memcpy_d2s_partial | |
* @brief To copy specified bytes of data from device memory to system memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination memory (system memory, a void* pointer) | |
* @param [in] src The source memory (device memory descriptor) | |
* @param [in] size The size of data to copy (in bytes) | |
* | |
* @retval BM_SUCCESS Data transfer succeeds. | |
* Other code Data transfer fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_memcpy_d2s_partial(bm_handle_t handle, void *dst, | |
sg_device_mem_t src, unsigned long long size); | |
/** | |
* @name bm_memcpy_d2d | |
* @brief To copy specified dwords of data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_offset The offset of destination device memory address | |
* @param [in] src The source device memory | |
* @param [in] src_offset The offset of source device memory address | |
* @param [in] len Length of data to copy (in DWORD 4 bytes) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d(bm_handle_t handle, bm_device_mem_t dst, | |
int dst_offset, bm_device_mem_t src, int src_offset, | |
int len); | |
/** | |
* @name bm_memcpy_d2d_with_core | |
* @brief To copy specified dwords of data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_offset The offset of destination device memory address | |
* @param [in] src The source device memory | |
* @param [in] src_offset The offset of source device memory address | |
* @param [in] len Length of data to copy (in DWORD 4 bytes) | |
* @param [in] core_id The core id to copy | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d_with_core(bm_handle_t handle, bm_device_mem_t dst, | |
int dst_offset, bm_device_mem_t src, int src_offset, | |
int len, int core_id); | |
/** | |
* @name bm_memcpy_d2d_byte | |
* @brief To copy specified bytes of data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_offset The offset of destination device memory address (in bytes) | |
* @param [in] src The source device memory | |
* @param [in] src_offset The offset of source device memory address (in bytes) | |
* @param [in] size Size of data to copy (in bytes) | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d_byte(bm_handle_t handle, bm_device_mem_t dst, | |
size_t dst_offset, bm_device_mem_t src, | |
size_t src_offset, size_t size); | |
/** | |
* @name bm_memcpy_d2d_byte_with_core | |
* @brief To copy specified bytes of data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_offset The offset of destination device memory address (in bytes) | |
* @param [in] src The source device memory | |
* @param [in] src_offset The offset of source device memory address (in bytes) | |
* @param [in] size Size of data to copy (in bytes) | |
* @param [in] core_id The core id to copy | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d_byte_with_core(bm_handle_t handle, bm_device_mem_t dst, | |
size_t dst_offset, bm_device_mem_t src, | |
size_t src_offset, size_t size, int core_id); | |
/** | |
* @name bm_memcpy_d2d_stride | |
* @brief To copy specified data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_stride The data stride of destination data | |
* @param [in] src The source device memory | |
* @param [in] src_stride The data stride of source data | |
* @param [in] count Count of data to copy | |
* @param [in] format_size Data format byte size, such as sizeof(uint8_t), sizeof(float), etc. | |
* format_size only support 1/2/4. | |
* | |
* dst_stride MUST be 1, EXCEPT: dst_stride == 4 && src_stride == 1 && format_size ==1 | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d_stride(bm_handle_t handle, | |
bm_device_mem_t dst, | |
int dst_stride, | |
bm_device_mem_t src, | |
int src_stride, | |
int count, | |
int format_size); | |
/** | |
* @name bm_memcpy_d2d_stride | |
* @brief To copy specified data from one piece of device memory | |
* to another piece of device memory within one device. Both source | |
* and destination offsets can be specified. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dst The destination device memory | |
* @param [in] dst_stride The data stride of destination data | |
* @param [in] src The source device memory | |
* @param [in] src_stride The data stride of source data | |
* @param [in] count Count of data to copy | |
* @param [in] format_size Data format byte size, such as sizeof(uint8_t), sizeof(float), etc. | |
* format_size only support 1/2/4. | |
* @param [in] core_id The core id to copy. | |
* | |
* dst_stride MUST be 1, EXCEPT: dst_stride == 4 && src_stride == 1 && format_size ==1 | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_d2d_stride_with_core(bm_handle_t handle, | |
bm_device_mem_t dst, | |
int dst_stride, | |
bm_device_mem_t src, | |
int src_stride, | |
int count, | |
int format_size, | |
int core_id); | |
/** | |
* @name bm_memcpy_c2c | |
* @brief To copy data from one chip to another chip. | |
* (Used in multi-chip card scenario) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] src_handle The source device handle | |
* @param [in] dst_handle The destination device handle | |
* @param [in] src The source device memory descriptor | |
* @param [in] dst The destination device memory descriptor | |
* @param [in] force_dst_cdma If use the CDMA engine of the destination device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memcpy_c2c(bm_handle_t src_handle, bm_handle_t dst_handle, | |
bm_device_mem_t src, bm_device_mem_t dst, | |
bool force_dst_cdma); | |
/** | |
* @name bm_memset_device | |
* @brief To fill in specified device memory with the given value | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] value The value used to fill. (int type) | |
* @param [in] mem The device memory which will be filled in | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memset_device(bm_handle_t handle, const int value, | |
bm_device_mem_t mem); | |
/** | |
* @name bm_memset_device_ext | |
* @brief To fill in specified device memory with the given value and mode | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] value The pointer of value used to fill | |
* @param [in] mode The valid bytes of *value | |
* @param [in] mem The device memory which will be filled in | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_memset_device_ext(bm_handle_t handle, void* value, int mode, | |
bm_device_mem_t mem); | |
/** | |
* @name bm_mem_convert_system_to_device_neuron | |
* @brief To malloc a piece of device memory according to the shape of | |
* neuron(in DWORD 4 bytes); copy neuron from system memory to | |
* device memory if need_copy is true. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory descriptor | |
* @param [in] sys_mem The system memory descriptor | |
* @param [in] need_copy If copy from system to device is needed | |
* @param [in] n,c,h,w Neuron shape size | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_convert_system_to_device_neuron(bm_handle_t handle, | |
struct bm_mem_desc *dev_mem, | |
struct bm_mem_desc sys_mem, | |
bool need_copy, int n, int c, | |
int h, int w); | |
/** | |
* @name bm_mem_convert_system_to_device_neuron_byte | |
* @brief To malloc a piece of device memory according to the shape of | |
* neuron(in bytes); copy neuron from system memory to | |
* device memory if need_copy is true. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory descriptor | |
* @param [in] sys_mem The system memory descriptor | |
* @param [in] need_copy If copy from system to device is needed | |
* @param [in] n,c,h,w Neuron shape size | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_convert_system_to_device_neuron_byte( | |
bm_handle_t handle, struct bm_mem_desc *dev_mem, struct bm_mem_desc sys_mem, | |
bool need_copy, int n, int c, int h, int w); | |
/** | |
* @name bm_mem_convert_system_to_device_coeff | |
* @brief To malloc a piece of device memory according to the size of | |
* coefficient (in DWORD 4 bytes); copy coefficient from system | |
* memory to device memory if need_copy is true. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory descriptor | |
* @param [in] sys_mem The system memory descriptor | |
* @param [in] need_copy If copy from system to device is needed | |
* @param [in] coeff_count Coefficient size | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_convert_system_to_device_coeff(bm_handle_t handle, | |
struct bm_mem_desc *dev_mem, | |
struct bm_mem_desc sys_mem, | |
bool need_copy, | |
int coeff_count); | |
/** | |
* @name bm_mem_convert_system_to_device_coeff_byte | |
* @brief To malloc a piece of device memory according to the size of | |
* coefficient (in bytes); copy coefficient from system | |
* memory to device memory if need_copy is true. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory descriptor | |
* @param [in] sys_mem The system memory descriptor | |
* @param [in] need_copy If copy from system to device is needed | |
* @param [in] coeff_count Coefficient size | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_convert_system_to_device_coeff_byte( | |
bm_handle_t handle, struct bm_mem_desc *dev_mem, struct bm_mem_desc sys_mem, | |
bool need_copy, int coeff_count); | |
/*******************memory map functions *************************************/ | |
/** | |
* @name bm_mem_mmap_device_mem | |
* @brief To map a piece of device memory to user space with cache enabled. | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory to map | |
* @param [out] vmem The virtual address of the mapped device memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_mmap_device_mem(bm_handle_t handle, bm_device_mem_t *dmem, | |
unsigned long long *vmem); | |
/** | |
* @name sg_mem_mmap_device_mem | |
* @brief To map a piece of device memory to user space with cache enabled. | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory to map | |
* @param [out] vmem The virtual address of the mapped device memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_mmap_device_mem(bm_handle_t handle, sg_device_mem_t *dmem, | |
unsigned long long *vmem); | |
/*******************memory map functions *************************************/ | |
/** | |
* @name bm_mem_mmap_device_mem_no_cache | |
* @brief To map a piece of device memory to user space with cache disabled. | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory to map | |
* @param [out] vmem The virtual address of the mapped device memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_mmap_device_mem_no_cache(bm_handle_t handle, bm_device_mem_t *dmem, | |
unsigned long long *vmem); | |
/** | |
* @name sg_mem_mmap_device_mem_no_cache | |
* @brief To map a piece of device memory to user space with cache disabled. | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dev_mem The device memory to map | |
* @param [out] vmem The virtual address of the mapped device memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_mmap_device_mem_no_cache(bm_handle_t handle, sg_device_mem_t *dmem, | |
unsigned long long *vmem); | |
/** | |
* @name bm_mem_vir_to_phy | |
* @brief To get device mem address through the mapped virtual address . | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] vmem The virtual address of the mapped device memory | |
* @param [out] dev_mem The device memory address | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_vir_to_phy(bm_handle_t handle, unsigned long long vmem, | |
unsigned long long *device_mem); | |
/** | |
* @name bm_mem_invalidate_device_mem | |
* @brief To invalidate a piece of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to invalidate | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_invalidate_device_mem(bm_handle_t handle, | |
bm_device_mem_t *dmem); | |
/** | |
* @name sg_mem_invalidate_device_mem | |
* @brief To invalidate a piece of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to invalidate | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_invalidate_device_mem(bm_handle_t handle, | |
sg_device_mem_t *dmem); | |
/** | |
* @name bm_mem_invalidate_partial_device_mem | |
* @brief To invalidate part of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to invalidate | |
* @param [in] offset The offset of device memory address | |
* @param [in] len The length of memory to invalidate in bytes | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_invalidate_partial_device_mem(bm_handle_t handle, | |
bm_device_mem_t *dmem, | |
unsigned int offset, | |
unsigned int len); | |
/** | |
* @name sg_mem_invalidate_partial_device_mem | |
* @brief To invalidate part of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to invalidate | |
* @param [in] offset The offset of device memory address | |
* @param [in] len The length of memory to invalidate in bytes | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_invalidate_partial_device_mem(bm_handle_t handle, | |
sg_device_mem_t *dmem, | |
unsigned long long offset, | |
unsigned long long len); | |
/** | |
* @name bm_mem_flush_device_mem | |
* @brief To flush a piece of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to flush | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_flush_device_mem(bm_handle_t handle, bm_device_mem_t *dmem); | |
/** | |
* @name sg_mem_flush_device_mem | |
* @brief To flush a piece of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to flush | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_flush_device_mem(bm_handle_t handle, sg_device_mem_t *dmem); | |
/** | |
* @name bm_mem_flush_partial_device_mem | |
* @brief To flush part of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to flush | |
* @param [in] offset The offset of device memory address | |
* @param [in] len The length of memory to flush in bytes | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_flush_partial_device_mem(bm_handle_t handle, | |
bm_device_mem_t *dmem, | |
unsigned int offset, | |
unsigned int len); | |
/** | |
* @name sg_mem_flush_partial_device_mem | |
* @brief To flush part of mapped device memory to maintain | |
* cache coherence | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] dmem The device memory to flush | |
* @param [in] offset The offset of device memory address | |
* @param [in] len The length of memory to flush in bytes | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_flush_partial_device_mem(bm_handle_t handle, | |
sg_device_mem_t *dmem, | |
unsigned long long offset, | |
unsigned long long len); | |
/** | |
* @name bm_mem_unmap_device_mem | |
* @brief To unmap a piece of mapped device memory | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] vmem The virtual address of the mapped device memory | |
* @param [in] size The size of unmapped memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_mem_unmap_device_mem(bm_handle_t handle, void *vmem, int size); | |
/** | |
* @name sg_mem_unmap_device_mem | |
* @brief To unmap a piece of mapped device memory | |
* (only valid in SoC mode; Not supported in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] vmem The virtual address of the mapped device memory | |
* @param [in] size The size of unmapped memory | |
* | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_mem_unmap_device_mem(bm_handle_t handle, void *vmem, unsigned long long size); | |
/*******************api(kernel) functions *************************************/ | |
/** | |
* @name bm_flush | |
* @brief To synchronize APIs of the current thread. The thread will block | |
* until all the outstanding APIs of the current thread are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
*/ | |
DECL_EXPORT void bm_flush(bm_handle_t handle); | |
/** | |
* @name bm_device_sync | |
* @brief To synchronize APIs of the device. The thread will block | |
* until all the outstanding APIs of the device are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_device_sync(bm_handle_t handle); | |
/** | |
* @name bm_handle_sync | |
* @brief To synchronize APIs of the handle. The thread will block | |
* until all the outstanding APIs of the handle are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_handle_sync(bm_handle_t handle); | |
/** | |
* @name bm_handle_sync_from_core | |
* @brief To synchronize APIs of the handle. The thread will block | |
* until all the outstanding APIs of the handle are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] core_id The core id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_handle_sync_from_core(bm_handle_t handle, int core_id); | |
/** | |
* @name bm_thread_sync | |
* @brief To synchronize APIs of the current thread. The thread will block | |
* until all the outstanding APIs of the current thread are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_thread_sync(bm_handle_t handle); | |
/** | |
* @name bm_thread_sync_from_core | |
* @brief To synchronize APIs of the current thread. The thread will block | |
* until all the outstanding APIs of the current thread are finished. | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] core_id The core id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_thread_sync_from_core(bm_handle_t handle, int core_id); | |
/*******************trace and profile releated functions **********************/ | |
typedef struct bm_profile { | |
unsigned long cdma_in_time; | |
unsigned long cdma_in_counter; | |
unsigned long cdma_out_time; | |
unsigned long cdma_out_counter; | |
unsigned long tpu_process_time; | |
unsigned long tpu1_process_time; | |
unsigned long sent_api_counter; | |
unsigned long completed_api_counter; | |
unsigned long long cdma_in_time; | |
unsigned long long cdma_in_counter; | |
unsigned long long cdma_out_time; | |
unsigned long long cdma_out_counter; | |
unsigned long long tpu_process_time; | |
unsigned long long tpu1_process_time; | |
unsigned long long sent_api_counter; | |
unsigned long long completed_api_counter; | |
} bm_profile_t; | |
/** | |
* @name bm_get_profile | |
* @brief To get the profile data at the moment | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] profile The result profile data | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_profile(bm_handle_t handle, bm_profile_t *profile); | |
typedef struct bootloader_version{ | |
char *bl1_version; | |
char *bl2_version; | |
char *bl31_version; | |
char *uboot_version; | |
} boot_loader_version; | |
/** | |
* @name bm_get_boot_loader_version | |
* @brief To get the boot_loader_version | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] version The result version data | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_boot_loader_version(bm_handle_t handle, boot_loader_version *version); | |
/** | |
* @name bm_get_vpu_instant_usage | |
* @brief To get vpu usage | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] smi_attr The result vpu usage | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_vpu_instant_usage(bm_handle_t handle, int *vpu_usage); | |
/** | |
* @name bm_get_jpu_core_usage | |
* @brief To get the jpu usage | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] smi_attr The result jpu usage | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_jpu_core_usage(bm_handle_t handle, int *jpu_usage); | |
/** | |
* @name bm_get_vpp_instant_usage | |
* @brief To get the vpp usage | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] smi_attr The result vpp usage | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_vpp_instant_usage(bm_handle_t handle, int *vpp_usage); | |
/** | |
* @name bm_get_last_api_process_time_us | |
* @brief This function is abandoned. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_last_api_process_time_us(bm_handle_t handle, | |
unsigned long *time_us); | |
DECL_EXPORT bm_status_t bm_get_last_api_process_time_us(bm_handle_t handle, | |
unsigned long long *time_us); | |
/*******************tpu clock and module reset releated functions *************/ | |
/** | |
* @name bm_set_clk_tpu_freq | |
* @brief To set the clock frequency of TPU (only valid in PCIE mode). | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] freq The TPU target frequency | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_set_clk_tpu_freq(bm_handle_t handle, int freq); | |
/** | |
* @name bm_get_clk_tpu_freq | |
* @brief To get the clock frequency of TPU | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] freq The current TPU frequency | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_clk_tpu_freq(bm_handle_t handle, int *freq); | |
/*******************misc functions ********************************************/ | |
struct bm_misc_info { | |
int pcie_soc_mode; /*0---pcie; 1---soc*/ | |
int ddr_ecc_enable; /*0---disable; 1---enable*/ | |
long long ddr0a_size; | |
long long ddr0b_size; | |
long long ddr1_size; | |
long long ddr2_size; | |
unsigned int chipid; | |
unsigned long chipid_bit_mask; | |
unsigned long long chipid_bit_mask; | |
unsigned int driver_version; | |
int domain_bdf; | |
int board_version; /*hardware board version [23:16]-mcu sw version, [15:8]-board type, [7:0]-hw version*/ | |
int a53_enable; | |
int dyn_enable; | |
}; | |
/** | |
* @name bm_get_misc_info | |
* @brief To get miscellaneous information of the device | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] pmisc_info The fetched misc info | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_misc_info(bm_handle_t handle, struct bm_misc_info *pmisc_info); | |
/** | |
* @name bm_get_chipid | |
* @brief To get the chipid of the device. (0x1682 / 0x1684 / 0x168?) | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] p_chipid The chip id of the device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_chipid(bm_handle_t handle, unsigned int *p_chipid); | |
/** | |
* @name bmlib_log_get_level | |
* @brief To get the bmlib log level | |
* @ingroup bmlib_log | |
* | |
* @param void | |
* @retval The level of bmlib log level | |
*/ | |
DECL_EXPORT int bmlib_log_get_level(void); | |
/** | |
* @name bmlib_log_set_level | |
* @brief To set the bmlib log level | |
* @ingroup bmlib_log | |
* | |
* @param [in] level The level of bmlib log level | |
* @retval void | |
*/ | |
DECL_EXPORT void bmlib_log_set_level(int level); | |
/** | |
* @name bmlib_log_set_callback | |
* @brief To set callback to get bmlib log | |
* @ingroup bmlib_log | |
* | |
* @param [in] callback The callback function to get bmlib log | |
* @retval void | |
*/ | |
DECL_EXPORT void bmlib_log_set_callback(void (*callback)(const char*, int, const char*, va_list args)); | |
/** | |
* @name bm_set_debug_mode | |
* @brief To set the debug mode for firmware log for tpu | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] mode The debug mode of fw log, 0/1 for disable/enable log | |
* @retval void | |
*/ | |
DECL_EXPORT void bm_set_debug_mode(bm_handle_t handle, int mode); | |
/** | |
* @name bmlib_api_dbg_callback | |
* @brief To set debug callback to get firmware log | |
* @ingroup bmlib_log | |
* | |
* @param [in] bmlib_api_dbg_callback callback to get firmware log | |
* @retval void | |
*/ | |
typedef void (*bmlib_api_dbg_callback)(int, int, int, const char*); | |
// api, result, duratioin, log, third int for api duration for future | |
DECL_EXPORT void bmlib_set_api_dbg_callback(bmlib_api_dbg_callback callback); | |
/** | |
* @name bmcpu_get_cpu_status | |
* @brief Get bmcpu status | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @retval BMCPU_RUNNING bmcpu is running. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_cpu_status_t bmcpu_get_cpu_status(bm_handle_t handle); | |
/** | |
* @name bmcpu_start_cpu | |
* @brief Start cpu in pcie mode | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] boot_file Fip file | |
* @param [in] core_file Itb file | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_start_cpu(bm_handle_t handle, char *boot_file, char *core_file); | |
/** | |
* @name bmcpu_open_process | |
* @brief Open a process to do some work | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] flags Process flags | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval >= 0 process handle | |
* < 0 Other code Fails. | |
*/ | |
DECL_EXPORT int bmcpu_open_process(bm_handle_t handle, unsigned int flags, int timeout); | |
/** | |
* @name bmcpu_load_library | |
* @brief Load a share library(so) to specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] library_file Library file path | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_load_library(bm_handle_t handle, int process_handle, char *library_file, int timeout); | |
/** | |
* @name bmcpu_unload_library | |
* @brief Load a share library(so) to specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] library_file Library file path | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_unload_library(bm_handle_t handle, int process_handle, char *library_file, int timeout); | |
/** | |
* @name bmcpu_exec_function | |
* @brief Execute specific function in specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] function_name Function name | |
* @param [in] function_param Function parameters | |
* @param [in] param_size Parameters size in bytes | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval 0 success. | |
* >0 code fails from bmlib | |
* <0 code fails from function | |
*/ | |
DECL_EXPORT int bmcpu_exec_function(bm_handle_t handle, | |
int process_handle, | |
char *function_name, | |
void *function_param, | |
unsigned int param_size, | |
int timeout); | |
/** | |
* @name bmcpu_exec_function_ext | |
* @brief Execute specific function in specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] function_name Function name | |
* @param [in] function_param Function parameters | |
* @param [in] param_size Parameters size in bytes | |
* @param [in] opt exec options | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval 0 success. | |
* >0 code fails from bmlib | |
* <0 code fails from function | |
*/ | |
DECL_EXPORT int bmcpu_exec_function_ext(bm_handle_t handle, | |
int process_handle, | |
char *function_name, | |
void *function_param, | |
unsigned int param_size, | |
unsigned int opt, | |
int timeout); | |
/** | |
* @name bmcpu_exec_function_async | |
* @brief Execute specific function in specific process asynchronous | |
* user should use bm_query_exec_function_result to query result | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] function_name Function name | |
* @param [in] function_param Function param | |
* @param [in] param_size Param size in bytes | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_exec_function_async(bm_handle_t handle, | |
int process_handle, | |
char *function_name, | |
void *function_param, | |
unsigned int param_size, | |
unsigned long long *api_handle); | |
/** | |
* @name bmcpu_exec_function_async_ext | |
* @brief Execute specific function in specific process asynchronous | |
* user should use bm_query_exec_function_result to query result | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] function_name Function name | |
* @param [in] function_param Function param | |
* @param [in] param_size Param size in bytes | |
* @param [in] opt exec options | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_exec_function_async_ext(bm_handle_t handle, | |
int process_handle, | |
char *function_name, | |
void *function_param, | |
unsigned int param_size, | |
unsigned int opt, | |
unsigned long long *api_handle); | |
/** | |
* @name bmcpu_query_exec_function_result | |
* @brief Query result from function called by bm_exec_function | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] api_handle Api handle return by bm_exec_function_async | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval 0 success. | |
* >0 code fails from bmlib | |
* <0 code fails from function | |
*/ | |
DECL_EXPORT int bmcpu_query_exec_function_result(bm_handle_t handle, unsigned long long api_handle, int timeout); | |
/** | |
* @name bmcpu_map_phys_addr | |
* @brief Map physical address in specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] phys_addr Physical address | |
* @param [in] size Map size in bytes | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval >0 virtual address | |
* 0 fails | |
*/ | |
DECL_EXPORT void *bmcpu_map_phys_addr(bm_handle_t handle, int process_handle, void *phys_addr, unsigned int size, int timeout); | |
/** | |
* @name bmcpu_unmap_phys_addr | |
* @brief Unmap physical address in specific process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] phys_addr Physical address | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval <0 fail | |
* 0 success | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_unmap_phys_addr(bm_handle_t handle, int process_handle, void *phys_addr, int timeout); | |
/** | |
* @name bmcpu_close_process | |
* @brief Close process | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_close_process(bm_handle_t handle, int process_handle, int timeout); | |
/** | |
* @name bmcpu_reset_cpu | |
* @brief Reset cpu in pcie mode | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_reset_cpu(bm_handle_t handle); | |
/** | |
* @name bm_enable_perf_monitor | |
* @brief enable perf monitor to get gdma and tpu performance data | |
* @ingroup bmlib_perf | |
* | |
* @param [in] handle The device handle | |
* @param [in] perf_monitor The monitor to perf | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_enable_perf_monitor(bm_handle_t handle, bm_perf_monitor_t *perf_monitor); | |
/** | |
* @name bm_disable_perf_monitor | |
* @brief disable perf monitor to get gdma and tpu performance data | |
* @ingroup bmlib_perf | |
* | |
* @param [in] handle The device handle | |
* @param [in] perf_monitor The monitor to perf | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_disable_perf_monitor(bm_handle_t handle, bm_perf_monitor_t *perf_monitor); | |
/** | |
* @name bmcpu_set_log | |
* @brief Set cpu log options | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] log_level 0: DEBUG 1:INFO 2:WARN 3:ERROR 4:FATAL | |
* @param [in] log_to_console 1: YES 0: No | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_set_log(bm_handle_t handle, unsigned int log_level, unsigned int log_to_console, int timeout); | |
/** | |
* @name bmcpu_get_log | |
* @brief Get cpu log file | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @param [in] process_handle Process handle | |
* @param [in] log_file save log as file | |
* @param [in] timeout Timeout value in millisecond, -1 means default value of this device | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_get_log(bm_handle_t handle, int process_handle, char *log_file, int timeout); | |
/** | |
* @name bmcpu_sync_time | |
* @brief Sync device cpu time with host | |
* @ingroup bmlib_log | |
* | |
* @param [in] handle The device handle | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmcpu_sync_time(bm_handle_t handle); | |
/*******************trace and profile releated functions **********************/ | |
struct bm_heap_stat { | |
unsigned int mem_total; | |
unsigned int mem_avail; | |
unsigned int mem_used; | |
}; | |
typedef struct bm_heap_stat_byte { | |
unsigned int heap_id; | |
unsigned long long mem_total; | |
unsigned long long mem_avail; | |
unsigned long long mem_used; | |
unsigned long long mem_start_addr; | |
} bm_heap_stat_byte_t; | |
typedef struct bm_dev_stat { | |
int mem_total; | |
int mem_used; | |
int tpu_util; | |
int heap_num; | |
struct bm_heap_stat heap_stat[4]; | |
} bm_dev_stat_t; | |
/** | |
* @name bm_get_stat | |
* @brief To get the stat data at the moment | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] profile The result stat data | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_stat(bm_handle_t handle, bm_dev_stat_t *stat); | |
/** | |
* @name bm_get_gmem_heap_id | |
* @brief To get the heap id of allocated global memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] pmem The allocted global memory | |
* @param [out] heapid The result of get heap id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_gmem_heap_id(bm_handle_t handle, bm_device_mem_t *pmem, unsigned int *heapid); | |
/** | |
* @name sg_get_gmem_heap_id | |
* @brief To get the heap id of allocated global memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] pmem The allocted global memory | |
* @param [out] heapid The result of get heap id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t sg_get_gmem_heap_id(bm_handle_t handle, sg_device_mem_t *pmem, unsigned int *heapid); | |
/** | |
* @name bm_get_gmem_total_heap_num | |
* @brief To get the total heap num of global memory | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] heap_num The result of get total num | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_gmem_total_heap_num(bm_handle_t handle, unsigned int *heap_num); | |
/** | |
* @name bm_get_gmem_heap_stat_byte_by_id | |
* @brief To get the heap stat by heap id | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] heap_id The heap index to get heap status | |
* @param [out] pheap_byte The result of get heap status | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_gmem_heap_stat_byte_by_id(bm_handle_t handle, bm_heap_stat_byte_t *pheap_byte, unsigned int heap_id); | |
DECL_EXPORT bm_status_t bm_load_firmware( | |
bm_handle_t handle, | |
const char *firmware_tcm, | |
const char *firmware_ddr); | |
DECL_EXPORT bm_status_t okkernel_load_firmware( | |
bm_handle_t handle, | |
const char *firmware_tcm, | |
const char *firmware_ddr); | |
DECL_EXPORT bm_status_t okkernel_launch_async( | |
bm_handle_t handle, | |
const char *func_name, | |
const void *args, | |
unsigned int size); | |
DECL_EXPORT bm_status_t okkernel_launch_sync( | |
bm_handle_t handle, | |
const char *func_name, | |
const void *args, | |
unsigned int size); | |
DECL_EXPORT bm_status_t tpu_kernel_launch_sync( | |
bm_handle_t handle, | |
const char *func_name, | |
const void *args, | |
unsigned int size); | |
DECL_EXPORT bm_status_t okkernel_sync(bm_handle_t handle); | |
/** | |
* @name bmkernel_launch | |
* @brief send api to device and launch function | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] api cmd struct pointer | |
* @param [in] api cmd length | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmkernel_launch(bm_handle_t handle, const void *args, | |
unsigned int size); | |
/** | |
* @name bmkernel_load_lookup_table | |
* @brief load lookup table to l2-sram | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [in] table which loaded to l2-sram | |
* @param [in] table size | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bmkernel_load_lookup_table(bm_handle_t handle, const void* table, unsigned int size); | |
/*******************device management api functions ********************************************/ | |
/** | |
* @name bm_get_tpu_current | |
* @brief get tpu current | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] tpuc(mA) The pointer for tpu current | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_current(bm_handle_t handle, unsigned int *tpuc); | |
/** | |
* @name bm_get_board_max_power | |
* @brief get board support max power | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] maxp The pointer for maxp | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_board_max_power(bm_handle_t handle, unsigned int *maxp); | |
/** | |
* @name bm_get_board_power | |
* @brief get board power | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] boardp The pointer for boardp | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_board_power(bm_handle_t handle, unsigned int *boardp); | |
/** | |
* @name bm_get_fan_speed | |
* @brief get board fan speed | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] fan The pointer for fan speed | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_fan_speed(bm_handle_t handle, unsigned int *fan); | |
/** | |
* @name bm_get_ecc_correct_num | |
* @brief get ecc_correct_num | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] ecc_correct_num | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_ecc_correct_num(bm_handle_t handle, unsigned long *ecc_correct_num); | |
DECL_EXPORT bm_status_t bm_get_ecc_correct_num(bm_handle_t handle, unsigned long long *ecc_correct_num); | |
/** | |
* @name bm_get_12v_atx | |
* @brief get atx_12v | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] atx_12v | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_12v_atx(bm_handle_t handle, int *atx_12v); | |
/** | |
* @name bm_get_product_sn | |
* @brief get SE5 sn | |
* @ingroup device management api | |
* | |
* @param [out] product_sn | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_product_sn(char *product_sn); | |
/** | |
* @name bm_get_sn | |
* @brief get sn | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] sn | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_sn(bm_handle_t handle, char *sn); | |
/** | |
* @name bm_get_status | |
* @brief get chip status | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] status The board error status, each bit represents an error state | |
* status == 0x0, borad is nornal, staus > 0, borad is abnormal; | |
* bit0 == 1, tpu is hang | |
* bit1 == 1, pcie link abnormal | |
* bit2 == 1, board temperature is too high | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_status(bm_handle_t handle, int *status); | |
/** | |
* @name bm_get_tpu_maxclk | |
* @brief get tpu_maxclk | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] tpu_maxclk | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_maxclk(bm_handle_t handle, unsigned int *tpu_maxclk); | |
/** | |
* @name bm_get_tpu_minclk | |
* @brief get tpu_minclk | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] tpu_minclk | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_minclk(bm_handle_t handle, unsigned int *tpu_minclk); | |
/** | |
* @name bm_get_driver_version | |
* @brief get driver version | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] driver_version | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_driver_version(bm_handle_t handle, int *driver_version); | |
/** | |
* @name bm_get_board_name | |
* @brief get device board name | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] board_name | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_board_name(bm_handle_t handle, char *name); | |
/** | |
* @name bm_get_board_temp | |
* @brief get board temperature | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] board_temp | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_board_temp(bm_handle_t handle, unsigned int *board_temp); | |
/** | |
* @name bm_get_chip_temp | |
* @brief get chip temperature | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] chip_temp | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_chip_temp(bm_handle_t handle, unsigned int *chip_temp); | |
/** | |
* @name bm_get_tpu_power | |
* @brief get TPU power | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] tpu_power | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_power(bm_handle_t handle, float *tpu_power); | |
/** | |
* @name bm_get_tpu_volt | |
* @brief get TPU voltage | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] tpu_volt | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_volt(bm_handle_t handle, unsigned int *tpu_volt); | |
/** | |
* @name bm_get_card_id | |
* @brief get card id | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] card_id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_card_id(bm_handle_t handle, unsigned int *card_id); | |
/** | |
* @name bm_get_card_num | |
* @brief get card number | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] card_id | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_card_num(unsigned int *card_num); | |
/** | |
* @name bm_get_chip_num_from_card | |
* @brief get chip number and start chip id from card | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] chip_num | |
* @param [out] dev_start_index | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_chip_num_from_card(unsigned int card_id, unsigned int *chip_num, unsigned int *dev_start_index); | |
/** | |
* @name bm_get_dynfreq_status | |
* @brief get chip dynamic freq status | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [out] dynfreq_status | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_dynfreq_status(bm_handle_t handle, int *dynfreq_status); | |
/** | |
* @name bm_change_dynfreq_status | |
* @brief change(enable/disable) chip dynamic freq status | |
* @ingroup device management api | |
* | |
* @param [in] handle The device handle | |
* @param [in] new_status | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_change_dynfreq_status(bm_handle_t handle, int new_status); | |
/** | |
* @name bm_get_tpu_scalar_num | |
* @brief To get the core number of TPU scalar | |
* @ingroup bmlib_runtime | |
* | |
* @param [in] handle The device handle | |
* @param [out] core_num The core number of TPU scalar | |
* @retval BM_SUCCESS Succeeds. | |
* Other code Fails. | |
*/ | |
DECL_EXPORT bm_status_t bm_get_tpu_scalar_num(bm_handle_t handle, unsigned int *core_num); | |
} | |