内存通用接口
Defined by enum wd_buff_type:
BUF类型名称 |
类型含义 |
类型值 |
---|---|---|
WD_FLAT_BUF |
通用buffer类型 |
0 |
WD_SGL_BUF |
母子散列链表buffer |
1 |
函数原型 |
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 |
使用说明 |
|
注意事项 |
需要支持多线程 |
函数原型 |
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:内存大小 |
输出说明 |
无 |
返回值说明 |
无 |
使用说明 |
|
注意事项 |
需要支持多线程 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | /* 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模式下无任何操作 |