SimpleKernel 1.17.0
Loading...
Searching...
No Matches
mmio_helper Namespace Reference

Classes

struct  ProbeContext
 映射完成后的 MMIO 区域信息 More...
 

Functions

auto Prepare (const DeviceNode &node, size_t default_size) -> Expected< ProbeContext >
 从节点提取 MMIO base/size 并通过 VirtualMemory 映射该区域。
 

Function Documentation

◆ Prepare()

auto mmio_helper::Prepare ( const DeviceNode node,
size_t  default_size 
) -> Expected<ProbeContext>
inlineprivate

从节点提取 MMIO base/size 并通过 VirtualMemory 映射该区域。

不设置 node.bound — 调用方(驱动的 Probe())负责在 DeviceManager::lock_ 保护下将 node.bound 置为 true。

Parameters
node设备节点(mmio_base 必须非零)
default_size当 node.mmio_size == 0 时使用的默认大小
Returns
Expected<ProbeContext>

Definition at line 148 of file driver_registry.hpp.

149 {
150 assert(
151 node.mmio_base != 0 &&
152 "mmio_helper::Prepare: node has no MMIO base; driver matched wrong node");
153
154 size_t size = node.mmio_size > 0 ? node.mmio_size : default_size;
155 auto map_result =
156 VirtualMemorySingleton::instance().MapMMIO(node.mmio_base, size);
157 if (!map_result.has_value()) {
158 return std::unexpected(map_result.error());
159 }
160
161 return ProbeContext{node.mmio_base, size};
162}
uint64_t mmio_base
第一个 MMIO 区域(需要多 BAR 支持时扩展为数组)
size_t mmio_size
Here is the caller graph for this function: