用户态Vendor驱动对接Warpdrive接口
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | struct wd_drv_dio_if { char *hw_type;/* vendor tag which is used to select right vendor driver */ int (*open)(struct wd_queue *q); /* user space WD queue initiation */ void (*close)(struct wd_queue *q); /* user space WD queue uninitiation */ int (*send)(struct wd_queue *q, void *req); /* Send WCRYPTO message to WD queue */ int (*recv)(struct wd_queue *q, void **resp); /* Receive WCRYPTO msg from WD queue */ }; /* The regions of warpdrve queue, which are from the definition of UACCE(the kernel part of Warpdrive) */ enum uacce_qfrt { UACCE_QFRT_MMIO = 0,/* device mmio region */ UACCE_QFRT_DKO,/* device kernel-only */ UACCE_QFRT_DUS,/* device user share */ UACCE_QFRT_SS,/* static share memory */ UACCE_QFRT_MAX, }; |
函数原型 |
void *wd_drv_mmap_qfr(struct wd_queue *q, enum uacce_qfrt qfrt, enum uacce_qfrt qfrt_next, size_t size); |
---|---|
函数功能 |
映射warpdrive队列的指定区域,并尝试获取起始地址 |
输入说明 |
q:warpdrive queue qfrt:需要映射的指定区域 qfrt_next:指定区域的下一个区域 size:指定区域的大小 |
输出说明 |
无 |
返回值说明 |
The VA of the denoted region |
使用说明 |
南向接口 |
注意事项 |
驱动与队列初始化时获取各个region的虚拟地址区域 |
函数原型 |
void wd_drv_unmmap_qfr(struct wd_queue *q, void *addr, enum uacce_qfrt qfrt, enum uacce_qfrt qfrt_next, size_t size); |
---|---|
函数功能 |
取消映射warpdrive队列的指定区域 |
输入说明 |
q:warpdrive队列 addr:队列中指定区域的起始VA qfrt:需要映射的指定区域 qfrt_next:指定区域的下一个区域 size:指定区域的大小 |
输出说明 |
无 |
返回值说明 |
NA |
使用说明 |
南向接口 |
注意事项 |
队列释放时,驱动进行unmap处理 |
函数原型 |
void *drv_iova_map(struct wd_queue *q, void *va, size_t sz); |
---|---|
函数功能 |
发送到硬件设备之前,通过映射获取虚拟设备的iova |
输入说明 |
q:warpdrive队列 va:指定区域的起始VA sz:VA区域的大小 |
输出说明 |
无 |
返回值说明 |
返回对应VA的iova |
使用说明 |
南向接口 |
注意事项 |
函数原型 |
void drv_iova_unmap(struct wd_queue *q, void *va, void *iova, size_t sz); |
---|---|
函数功能 |
取消之前创建的iova和va之间的映射关系 |
输入说明 |
q:warpdrive队列 va:指定区域的起始VA iova:指定区域的起始IOVA sz:区域的大小 |
输出说明 |
无 |
返回值说明 |
NA |
使用说明 |
南向接口 |
注意事项 |
其他南向接口分布在各个算法的算法层中,均有注明。