|
SimpleKernel 1.17.0
|
Virtqueue 基类(C++23 Deducing this 编译期多态) More...
#include <virtqueue_base.hpp>


Public Member Functions | |
| auto | SubmitChainWithBarrier (this auto &&self, const IoVec *readable, size_t readable_count, const IoVec *writable, size_t writable_count) -> Expected< uint16_t > |
| 提交 Scatter-Gather 链并通知设备 | |
| template<typename Callback > | |
| auto | ProcessUsedWithCallback (this auto &&self, Callback &&callback) -> uint32_t |
| 处理已完成的缓冲区并释放描述符链 | |
Protected Member Functions | |
构造/析构函数(仅允许派生类使用) | |
| VirtqueueBase ()=default | |
| ~VirtqueueBase ()=default | |
| VirtqueueBase (VirtqueueBase &&) noexcept=default | |
| auto | operator= (VirtqueueBase &&) noexcept -> VirtqueueBase &=default |
| VirtqueueBase (const VirtqueueBase &)=delete | |
| auto | operator= (const VirtqueueBase &) -> VirtqueueBase &=delete |
Virtqueue 基类(C++23 Deducing this 编译期多态)
提供 Split/Packed Virtqueue 共享的通用逻辑接口。 利用 C++23 Deducing this(显式对象参数)在编译期静态分发到 派生类的具体实现,零虚表开销,无需传统 CRTP 的 static_cast。
派生类应提供以下方法(隐式接口):
Definition at line 42 of file virtqueue_base.hpp.
|
protecteddefault |
|
protecteddefault |
|
protecteddefaultnoexcept |
|
protecteddelete |
|
protecteddelete |
|
protecteddefaultnoexcept |
|
inline |
处理已完成的缓冲区并释放描述符链
通用逻辑:从 Used Ring 弹出已完成的元素,对每个元素调用回调函数, 然后释放描述符链。通过 Deducing this 在编译期分发到派生类的 HasUsed/PopUsed/FreeChain。
| Callback | 回调函数类型,签名:void(uint16_t head, uint32_t len) |
| callback | 对每个已完成请求的回调 |
Definition at line 85 of file virtqueue_base.hpp.

|
inline |
提交 Scatter-Gather 链并通知设备
在 SubmitChain 前后自动插入适当的内存屏障。 通过 Deducing this 在编译期分发到派生类的 SubmitChain 实现。
| readable | 设备只读缓冲区数组 |
| readable_count | readable 数组元素数量 |
| writable | 设备可写缓冲区数组 |
| writable_count | writable 数组元素数量 |
Definition at line 58 of file virtqueue_base.hpp.
