46 [[nodiscard]]
auto IsValid() const ->
bool {
52 [[nodiscard]]
auto Data() const -> uint8_t* {
53 return static_cast<uint8_t*
>(
virt);
66 [[nodiscard]]
auto SubRegion(
size_t offset,
size_t len)
const
68 if (offset >
size || len >
size - offset) {
72 .
virt =
static_cast<uint8_t*
>(
virt) + offset,
96 [[nodiscard]]
auto GetBuffer() const ->
std::span<const uint8_t>;
112 [[nodiscard]] auto
IsValid() const ->
bool;
auto GetBuffer() const -> std::span< const uint8_t >
获取缓冲区数据与大小 (只读)
auto ToDmaRegion(VirtToPhysFunc v2p=IdentityVirtToPhys) const -> DmaRegion
创建此缓冲区的 DmaRegion 视图
auto IsValid() const -> bool
检查缓冲区是否有效
static constexpr size_t kDefaultAlignment
IO 缓冲区的默认对齐大小(如页大小)
std::expected< T, Error > Expected
std::expected 别名模板
auto IdentityVirtToPhys(uintptr_t virt) -> uintptr_t
恒等映射:物理地址 == 虚拟地址(早期启动 / 无 MMU 时的默认实现)
auto(*)(uintptr_t virt) -> uintptr_t VirtToPhysFunc
虚拟地址到物理地址转换回调类型
auto Data() const -> uint8_t *
获取虚拟基地址的类型化指针
void * virt
虚拟(CPU 可访问)基地址
auto SubRegion(size_t offset, size_t len) const -> Expected< DmaRegion >
在指定偏移处创建子区域
auto IsValid() const -> bool
检查区域是否有效(非空指针且大小非零)
uintptr_t phys
物理(总线/DMA)基地址