7#include <etl/singleton.h>
37 .match_table = etl::span<const MatchEntry>(
kMatchTable),
38 .match = etl::delegate<bool(
39 DeviceNode&)>::create<&Pl011Driver::MatchStatic>(),
40 .probe = etl::delegate<Expected<void>(
DeviceNode&)>::create<
42 etl::singleton<Pl011Driver>::instance()),
45 etl::singleton<Pl011Driver>::instance()),
58 static constexpr size_t kMinRegisterSpace = 0x48;
59 return node.mmio_base != 0 && node.mmio_size >= kMinRegisterSpace;
71 return std::unexpected(ctx.error());
76 klog::Info(
"Pl011Driver: UART at {:#x} bound", node.mmio_base);
auto operator=(const Pl011Driver &) -> Pl011Driver &=delete
auto operator=(Pl011Driver &&) -> Pl011Driver &=default
auto Probe(DeviceNode &node) -> Expected< void >
初始化 PL011 UART。
auto Remove(DeviceNode &node) -> Expected< void >
卸载驱动
Pl011Driver(Pl011Driver &&)=default
static constexpr MatchEntry kMatchTable[]
static auto MatchStatic(DeviceNode &node) -> bool
硬件检测:MMIO 区域大小是否足够 PL011?
Pl011Driver(const Pl011Driver &)=delete
static auto GetEntry() -> const DriverEntry &
返回用于注册的 DriverEntry
auto GetDevice() -> Pl011Type *
获取 PL011 设备实例
std::expected< T, Error > Expected
std::expected 别名模板
auto Info(etl::format_string< Args... > fmt, Args &&... args) -> void
以 INFO 级别记录日志
auto Prepare(const DeviceNode &node, size_t default_size) -> Expected< ProbeContext >
从节点提取 MMIO base/size 并通过 VirtualMemory 映射该区域。
etl::singleton< Pl011Driver > Pl011DriverSingleton