SimpleKernel 1.17.0
Loading...
Searching...
No Matches
DmaRegion Struct Reference

DMA 可访问内存区域的非拥有描述符 More...

#include <io_buffer.hpp>

Collaboration diagram for DmaRegion:
Collaboration graph

Public Member Functions

auto IsValid () const -> bool
 检查区域是否有效(非空指针且大小非零)
 
auto Data () const -> uint8_t *
 获取虚拟基地址的类型化指针
 
auto SubRegion (size_t offset, size_t len) const -> Expected< DmaRegion >
 在指定偏移处创建子区域
 

Public Attributes

void * virt {nullptr}
 虚拟(CPU 可访问)基地址
 
uintptr_t phys {0}
 物理(总线/DMA)基地址
 
size_t size {0}
 区域大小(字节)
 

Detailed Description

DMA 可访问内存区域的非拥有描述符

将虚拟地址、物理(总线)地址和大小封装为单一值类型。 不拥有内存所有权——生命周期由分配器(如 IoBuffer)管理。

Note
类 POD 类型,可平凡拷贝,可安全按值或 const 引用传递。

Definition at line 37 of file io_buffer.hpp.

Member Function Documentation

◆ Data()

auto DmaRegion::Data ( ) const -> uint8_t*
inline

获取虚拟基地址的类型化指针

Returns
uint8_t* 缓冲区数据指针

Definition at line 52 of file io_buffer.hpp.

52 {
53 return static_cast<uint8_t*>(virt);
54 }
void * virt
虚拟(CPU 可访问)基地址
Definition io_buffer.hpp:39
Here is the caller graph for this function:

◆ IsValid()

auto DmaRegion::IsValid ( ) const -> bool
inline

检查区域是否有效(非空指针且大小非零)

Definition at line 46 of file io_buffer.hpp.

46 {
47 return virt != nullptr && size > 0;
48 }
size_t size
区域大小(字节)
Definition io_buffer.hpp:43
Here is the caller graph for this function:

◆ SubRegion()

auto DmaRegion::SubRegion ( size_t  offset,
size_t  len 
) const -> Expected<DmaRegion>
inline

在指定偏移处创建子区域

Parameters
offset相对于当前区域起始处的字节偏移
len子区域的字节长度
Returns
成功返回子区域,越界则返回错误
Precondition
offset + len <= size
Postcondition
返回的区域与当前区域共享同一底层内存

Definition at line 66 of file io_buffer.hpp.

67 {
68 if (offset > size || len > size - offset) {
69 return std::unexpected(Error{ErrorCode::kInvalidArgument});
70 }
71 return DmaRegion{
72 .virt = static_cast<uint8_t*>(virt) + offset,
73 .phys = phys + offset,
74 .size = len,
75 };
76 }
@ kInvalidArgument
DMA 可访问内存区域的非拥有描述符
Definition io_buffer.hpp:37
uintptr_t phys
物理(总线/DMA)基地址
Definition io_buffer.hpp:41
错误类型,用于 std::expected
Definition expected.hpp:343

Member Data Documentation

◆ phys

uintptr_t DmaRegion::phys {0}

物理(总线/DMA)基地址

Definition at line 41 of file io_buffer.hpp.

41{0};

◆ size

size_t DmaRegion::size {0}

区域大小(字节)

Definition at line 43 of file io_buffer.hpp.

43{0};

◆ virt

void* DmaRegion::virt {nullptr}

虚拟(CPU 可访问)基地址

Definition at line 39 of file io_buffer.hpp.

39{nullptr};

The documentation for this struct was generated from the following file: