SimpleKernel 1.17.0
Loading...
Searching...
No Matches
Pl011Driver Class Reference

PL011 UART 驱动 More...

#include <pl011_driver.hpp>

Collaboration diagram for Pl011Driver:
Collaboration graph

Public Types

using Pl011Type = pl011::Pl011
 

Public Member Functions

auto Probe (DeviceNode &node) -> Expected< void >
 初始化 PL011 UART。
 
auto Remove (DeviceNode &node) -> Expected< void >
 卸载驱动
 
auto GetDevice () -> Pl011Type *
 获取 PL011 设备实例
 
构造/析构函数
 Pl011Driver ()=default
 
 Pl011Driver (const Pl011Driver &)=delete
 
 Pl011Driver (Pl011Driver &&)=default
 
auto operator= (const Pl011Driver &) -> Pl011Driver &=delete
 
auto operator= (Pl011Driver &&) -> Pl011Driver &=default
 
 ~Pl011Driver ()=default
 

Static Public Member Functions

static auto GetEntry () -> const DriverEntry &
 返回用于注册的 DriverEntry
 
static auto MatchStatic (DeviceNode &node) -> bool
 硬件检测:MMIO 区域大小是否足够 PL011?
 

Private Attributes

Pl011Type uart_ {}
 

Static Private Attributes

static constexpr MatchEntry kMatchTable []
 

Detailed Description

PL011 UART 驱动

提供 PL011 UART 设备的驱动程序实现,包括设备检测、初始化和访问接口。

Definition at line 24 of file pl011_driver.hpp.

Member Typedef Documentation

◆ Pl011Type

Definition at line 26 of file pl011_driver.hpp.

Constructor & Destructor Documentation

◆ Pl011Driver() [1/3]

Pl011Driver::Pl011Driver ( )
default
Here is the caller graph for this function:

◆ Pl011Driver() [2/3]

Pl011Driver::Pl011Driver ( const Pl011Driver )
delete

◆ Pl011Driver() [3/3]

Pl011Driver::Pl011Driver ( Pl011Driver &&  )
default

◆ ~Pl011Driver()

Pl011Driver::~Pl011Driver ( )
default

Member Function Documentation

◆ GetDevice()

auto Pl011Driver::GetDevice ( ) -> Pl011Type*
inline

获取 PL011 设备实例

Returns
设备实例指针

Definition at line 94 of file pl011_driver.hpp.

94{ return &uart_; }
Pl011Type uart_

◆ GetEntry()

static auto Pl011Driver::GetEntry ( ) -> const DriverEntry&
inlinestatic

返回用于注册的 DriverEntry

Note
使用 Pl011DriverSingleton::instance() 访问单例。
Returns
DriverEntry 常量引用

Definition at line 34 of file pl011_driver.hpp.

34 {
35 static const DriverEntry entry{
36 .name = "pl011",
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()),
43 .remove = etl::delegate<Expected<void>(DeviceNode&)>::create<
45 etl::singleton<Pl011Driver>::instance()),
46 };
47 return entry;
48 }
Pl011Driver()=default
auto Probe(DeviceNode &node) -> Expected< void >
初始化 PL011 UART。
auto Remove(DeviceNode &node) -> Expected< void >
卸载驱动
static constexpr MatchEntry kMatchTable[]
std::expected< T, Error > Expected
std::expected 别名模板
Definition expected.hpp:365
单个设备的硬件资源描述。
类型擦除的驱动条目 — 每个已注册驱动对应一条。
const char * name
Here is the call graph for this function:

◆ MatchStatic()

static auto Pl011Driver::MatchStatic ( DeviceNode node) -> bool
inlinestatic

硬件检测:MMIO 区域大小是否足够 PL011?

PL011 没有可读的 magic 寄存器,仅验证 MMIO 资源。

Returns
true 如果 mmio_base 非零且 mmio_size 足够

Definition at line 57 of file pl011_driver.hpp.

57 {
58 static constexpr size_t kMinRegisterSpace = 0x48;
59 return node.mmio_base != 0 && node.mmio_size >= kMinRegisterSpace;
60 }
uint64_t mmio_base
第一个 MMIO 区域(需要多 BAR 支持时扩展为数组)
size_t mmio_size

◆ operator=() [1/2]

auto Pl011Driver::operator= ( const Pl011Driver ) -> Pl011Driver &=delete
delete

◆ operator=() [2/2]

auto Pl011Driver::operator= ( Pl011Driver &&  ) -> Pl011Driver &=default
default

◆ Probe()

auto Pl011Driver::Probe ( DeviceNode node) -> Expected<void>
inline

初始化 PL011 UART。

Precondition
node.mmio_base != 0
Postcondition
uart_ 有效;node.type == DeviceType::kChar

Definition at line 68 of file pl011_driver.hpp.

68 {
69 auto ctx = mmio_helper::Prepare(node, 0x1000);
70 if (!ctx) {
71 return std::unexpected(ctx.error());
72 }
73
74 uart_ = Pl011Type(ctx->base);
76 klog::Info("Pl011Driver: UART at {:#x} bound", node.mmio_base);
77 return {};
78 }
pl011::Pl011 Pl011Type
@ kChar
字符设备(串口等)
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 映射该区域。
DeviceType type
Here is the call graph for this function:
Here is the caller graph for this function:

◆ Remove()

auto Pl011Driver::Remove ( DeviceNode node) -> Expected<void>
inline

卸载驱动

Parameters
node设备节点
Returns
Expected<void> 成功返回空值

Definition at line 85 of file pl011_driver.hpp.

86 {
87 return {};
88 }
Here is the caller graph for this function:

Member Data Documentation

◆ kMatchTable

constexpr MatchEntry Pl011Driver::kMatchTable[]
staticconstexprprivate
Initial value:
= {
{BusType::kPlatform, "arm,pl011"},
}

Definition at line 107 of file pl011_driver.hpp.

107 {
108 {BusType::kPlatform, "arm,pl011"},
109 };

◆ uart_

Pl011Type Pl011Driver::uart_ {}
private

Definition at line 111 of file pl011_driver.hpp.

111{};

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