特殊场景1-不支持SVA但是使能IOMMU,所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景
在这种场景下,和特殊场景1-不支持SVA但是使能IOMMU,所有注册到UACCE框架的设备都是支持PASID和支持IOMMU的场景一致。
算法层没有新增接口。
在涉及到内存操作时要稍作调整,具体包括:
- 调用算法操作前,指针需要传递给硬件的话,在默认场景的第4步之前,声明一个struct wd_blkpool_setup变量,确定使用多大的内存池,这块内存池里面又切分成多少块,每块内存是多大。
1 2 3 4 5 6
struct wd_blkpool_setup { __u32 block_size;/* Block buffer size */ __u32 block_num;/* Block buffer number */ __u32 align_size;/* Block buffer startging address align size */ struct wd_mm_br br;/* memory from user if don't use WD memory */ };
- 调用算法操作前,指针需要传递给硬件的话,取struct wd_blkpool_setup变量地址作为参数,调用void *wd_blkpool_create(struct wd_queue *q, struct wd_blkpool_setup *setup)接口预留出相应大小的内存,如果成功则返回内存池起始地址,失败则返回空指针。函数内部会调用wd_reserve_memory来预留内存。
- 调用算法操作前,指针需要传递给硬件的话,在默认场景中的第4步中,涉及到需要传给硬件的地址,都通过wd_alloc_blk从预留的内存池中分配出来。
- 数据处理完后,在默认场景中的第6步中,释放内存时,使用wd_free_blk释放。
- 释放队列前,在默认场景中的第7步后,把预留内存池起始地址作为参数,调用wd_blkpool_destroy释放预留的内存。
父主题: 算法层接口