MCPcopy Create free account
hub / github.com/Simple-XX/SimpleKernel / RegisterBus

Method RegisterBus

src/device/include/device_manager.hpp:33–61  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31 */
32 template <Bus B>
33 auto RegisterBus(B& bus) -> Expected<void> {
34 LockGuard guard(lock_);
35
36 if (device_count_ >= kMaxDevices) {
37 return std::unexpected(Error(ErrorCode::kOutOfMemory));
38 }
39
40 size_t remaining = kMaxDevices - device_count_;
41 auto result = bus.Enumerate(devices_ + device_count_, remaining);
42 if (!result.has_value()) {
43 klog::Err("DeviceManager: bus '{}' enumeration failed: {}", B::GetName(),
44 result.error().message());
45 return std::unexpected(result.error());
46 }
47
48 size_t count = result.value();
49 for (size_t i = 0; i < count; ++i) {
50 devices_[device_count_ + i].dev_id = next_dev_id_++;
51 if (!name_index_.full()) {
52 name_index_.insert(
53 {devices_[device_count_ + i].name, device_count_ + i});
54 }
55 }
56 device_count_ += count;
57
58 klog::Info("DeviceManager: bus '{}' enumerated {} device(s)", B::GetName(),
59 count);
60 return {};
61 }
62
63 /**
64 * @brief 匹配已注册的驱动程序并探测所有未绑定的设备。

Callers 1

DeviceInitFunction · 0.80

Calls 5

ErrorClass · 0.85
ErrFunction · 0.85
InfoFunction · 0.85
EnumerateMethod · 0.80
messageMethod · 0.80

Tested by

no test coverage detected