---
title: 内存通用接口
description: "Defined by enum wd_buff_type:"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0039.html
sourcePath: /source/zh/kunpengboostkithistory/252RC1/accel/kunpengaccel_17_0039.html
indexId: d09bd3235534f72217acefeb6b4a06e6ebb887c21b98b0c0bfadeae96313f6b872
---
# 内存通用接口

Defined by enum wd_buff_type:

| BUF类型名称 | 类型含义 | 类型值 |
| --- | --- | --- |
| WD\_FLAT\_BUF | 通用buffer类型 | 0 |
| WD\_SGL\_BUF | 母子散列链表buffer | 1 |


SGL格式请参考SGL内存格式接口。


| 函数原型 | typedef void \*(\*wd\_alloc)(void \*usr, size\_t size); |
| --- | --- |
| 函数功能 | 通过用户的内存机制usr申请大小为size的内存 |
| 输入说明 | usr：用户的内存机制句柄 size：需要申请内存的大小 |
| 输出说明 | 无。 |
| 返回值说明 | 非NULL：内存起始地址，SUCCESS NULL：失败 |
| 使用说明 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，SVA场景下不需要该接口 |
| 注意事项 | 需要支持多线程 |


| 函数原型 | typedef void (\*wd\_free)(void \*usr, void \*va); |
| --- | --- |
| 函数功能 | 基于用户的内存机制usr释放起始地址va的内存 |
| 输入说明 | usr：用户的内存机制 va：需释放的内存起始地址 |
| 输出说明 | 无。 |
| 返回值说明 | 无。 |
| 使用说明 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，SVA场景下不需要该接口。 |
| 注意事项 | 需要支持多线程 |


| 函数原型 | typedef void \*(\* wd\_map)(void \*usr, void \*va, size\_t sz); |
| --- | --- |
| 函数功能 | 基于用户的内存机制usr对起始地址va的sz大小内存进行iova map |
| 输入说明 | usr：用户的内存机制 va：需做iova map的内存起始地址 sz：内存大小 |
| 输出说明 | 无。 |
| 返回值说明 | 返回对应va的iova |
| 使用说明 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，SVA场景下不需要该接口 南向接口 |
| 注意事项 | 需要支持多线程 |


| 函数原型 | typedef void (\*wd\_unmap)(void \*usr, void \*va, void \*iova, size\_t sz); |
| --- | --- |
| 函数功能 | 基于用户的内存机制usr对起始地址va/iova的sz大小内存进行iova unmap |
| 输入说明 | usr：用户的内存机制 va：需iova unmap的内存起始地址 iova：起始的iova地址 sz：内存大小 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，SVA场景下不需要该接口 南向接口 |
| 注意事项 | 需要支持多线程 |


```
/* Memory brigde from user, it is given at ctx. While SVA, this interface is in no need */
struct wd_mm_br {
wd_alloc alloc;/* Memory allocation */
wd_free free;/* Memory free */
wd_map iova_map;     /* get iova from user space VA */
wd_unmap iova_unmap;    /* destroy the mapping between the PA of VA and iova */
void *usr; /* data for the above operations */
};

/* Warpdrive data buffer */
struct wd_dtb {
char *data;/* data/buffer start address */
__u32 dsize;/* data size */
__u32 bsize;/* buffer size */
};
```

| 函数原型 | void \*wd\_iova\_map(struct wd\_queue \*q, void \*va, size\_t sz); |
| --- | --- |
| 函数功能 | 基于Warpdrive queue对用户态的va地址大小为sz的内存进行iova map |
| 输入说明 | q：源队列 va：用户态虚拟地址 sz：从va开始的内存大小 |
| 输出说明 | 无。 |
| 返回值说明 | 非NULL：iova地址 NULL：失败 |
| 使用说明 | 南向接口 |
| 注意事项 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，no\-iommu模式下仅进行了虚实转换。 |


| 函数原型 | void wd\_iova\_unmap(struct wd\_queue \*q, void \*va, void \*iova, size\_t sz); |
| --- | --- |
| 函数功能 | 基于Warpdrive queue对用户态的va(iova)地址大小为sz的内存进行iova unmap |
| 输入说明 | q：源队列 va：用户态虚拟地址va iova：用户态iova地址 sz：内存大小 |
| 输出说明 | 无 |
| 返回值说明 | 无 |
| 使用说明 | 南向接口 |
| 注意事项 | 目前为了支持no\-iommu与iommu\-passthrough场景的接口，no\-iommu模式下无任何操作 |
