You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
4.5 KiB
138 lines
4.5 KiB
/*
|
|
* Copyright (c) Hisilicon Technologies Co., Ltd.. 2019-2020. All rights reserved.
|
|
* Description: This file contains api definition for Device Management.
|
|
* Author: Hisilicon
|
|
* Create: 2019-11-28
|
|
*/
|
|
|
|
#ifndef MPI_NPU_DRVMM_H
|
|
#define MPI_NPU_DRVMM_H
|
|
|
|
#include "td_type.h"
|
|
#include "npu_common_ext.h"
|
|
|
|
struct DMA_ADDR {
|
|
td_void *src;
|
|
td_void *dst;
|
|
td_u32 len;
|
|
td_u8 flag;
|
|
td_u32 fixed_size;
|
|
td_void *priv;
|
|
};
|
|
|
|
struct DMA_ARG {
|
|
td_u32 devid;
|
|
td_u32 offset;
|
|
};
|
|
|
|
#define DV_MEM_SVM 0x0001
|
|
#define DV_MEM_SVM_HOST 0x0002
|
|
#define DV_MEM_SVM_DEVICE 0x0004
|
|
#define DV_MEM_LOCK_HOST 0x0008
|
|
#define DV_MEM_LOCK_DEV 0x0010
|
|
#define DV_MEM_LOCK_DEV_DVPP 0x0020
|
|
|
|
#define DV_MEM_RESV 8
|
|
struct DVattribute {
|
|
/* *< DV_MEM_SVM_DEVICE : svm memory & mapped device */
|
|
/* *< DV_MEM_SVM_HOST : svm memory & mapped host */
|
|
/* *< DV_MEM_SVM : svm memory & no mapped */
|
|
/* *< DV_MEM_LOCK_HOST : host mapped memory & lock host */
|
|
/* *< DV_MEM_LOCK_DEV : dev mapped memory & lock dev */
|
|
/* *< DV_MEM_LOCK_DEV_DVPP : dev_dvpp mapped memory & lock dev */
|
|
unsigned int mem_type;
|
|
unsigned int resv1;
|
|
unsigned int resv2;
|
|
|
|
unsigned int dev_id;
|
|
unsigned int page_size;
|
|
unsigned int resv[DV_MEM_RESV];
|
|
};
|
|
|
|
#define COMPUTE_GROUP_INFO_RES_NUM 8
|
|
struct capability_group_info {
|
|
unsigned int group_id;
|
|
unsigned int state; // 0: not create, 1: created
|
|
unsigned int extend_attribute; // 0: default group attribute
|
|
unsigned int aicore_number; // 0~9
|
|
unsigned int aivector_number; // 0~7
|
|
unsigned int sdma_number; // 0~15
|
|
unsigned int aicpu_number; // 0~15
|
|
unsigned int active_sq_number;
|
|
unsigned int res[COMPUTE_GROUP_INFO_RES_NUM];
|
|
};
|
|
|
|
struct MemInfo {
|
|
unsigned long normal_total;
|
|
unsigned long normal_free;
|
|
unsigned long huge_total;
|
|
unsigned long huge_free;
|
|
};
|
|
|
|
drvError_t drvMemSmmuQuery(td_u32 device, td_u32 *SSID);
|
|
|
|
drvError_t drvMemAddressTranslate(td_u64 vptr, td_u64 *pptr);
|
|
|
|
drvError_t drvMemsetD8(td_u64 dst, size_t destMax, td_u8 value, size_t size);
|
|
|
|
drvError_t halMemGetInfo(td_u32 device, int type, struct MemInfo *info);
|
|
|
|
drvError_t halMemCtl(int type, void *param_value, size_t param_value_size, void *out_value, size_t *out_size_ret);
|
|
|
|
drvError_t drvMemcpy(td_u64 dst, td_u64 destMax, td_u64 src, td_u64 size);
|
|
|
|
drvError_t halMemAlloc(td_void **pp, td_u64 size, td_u64 flag);
|
|
drvError_t halMemFree(td_void *pp);
|
|
|
|
/* This function is used to judge if program is loaded into L2buf. We do not need this function */
|
|
drvError_t drvLoadProgram(td_u32 deviceId, td_void *program, td_u32 offset, size_t ByteCount, td_void **vPtr);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemConvertAddr(td_u64 pSrc, td_u64 pDst, td_u32 len, td_u32 *out_len, struct DMA_ARG *dma);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemDestroyAddr(struct DMA_ARG dma);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemPrefetchToDevice(td_u64 devPtr, size_t len, td_u32 device);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemGetAttribute(td_u64 vptr, struct DVattribute *addtr);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t halShmemCreateHandle(td_u64 vptr, td_u64 byteCount, td_char *name, td_u32 len);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t halShmemOpenHandle(const char *name, td_u64 *vptr);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t halShmemCloseHandle(td_u64 vptr);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t halShmemDestroyHandle(const td_char *name);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t halShmemSetPidHandle(const char *name, int pid[], int num);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemIonFlushCache(td_u64 addr, size_t ByteCount);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemDeviceOpen(unsigned int devid, int devfd);
|
|
|
|
/* offline need not to support this interface */
|
|
drvError_t drvMemDeviceClose(unsigned int devid);
|
|
|
|
/* We not use L2 buffer */
|
|
drvError_t drvMemAllocL2buffAddr(td_u32 device, td_void **l2buff, td_u64 *pte);
|
|
|
|
/* We not use L2 buffer */
|
|
drvError_t drvMemReleaseL2buffAddr(td_u32 device, td_void *l2buff);
|
|
|
|
drvError_t drvMemcpyDtoH(td_u64 dst, size_t dst_max, td_u64 src, size_t byte_count);
|
|
drvError_t halGetCapabilityGroupInfo(int deviceId, int ownerId, int groupId,
|
|
struct capability_group_info *groupInfo,
|
|
int groupCount);
|
|
|
|
#endif
|