#include "fs/devices/DeviceRegistry.h" #include "Log.h" #include "fs/devices/ConsoleDevice.h" #include "fs/devices/FramebufferDevice.h" #include "fs/devices/NullDevice.h" #include "fs/devices/ZeroDevice.h" #include struct DeviceDescriptor { SharedPtr device; u32 major; u32 minor; }; Vector g_available_devices = {}; namespace DeviceRegistry { Result> fetch_special_device(u32 major, u32 minor) { for (const auto& descriptor : g_available_devices) { if (descriptor.major == major && descriptor.minor == minor) return descriptor.device; } return err(ENODEV); } Result register_special_device(u32 major, u32 minor, SharedPtr device) { for (const auto& descriptor : g_available_devices) { if (descriptor.major == major && descriptor.minor == minor) return err(EEXIST); } kdbgln("DeviceRegistry: registered new device type %u:%u", major, minor); return g_available_devices.try_append(DeviceDescriptor { .device = device, .major = major, .minor = minor }); } Result init() { NullDevice::create(); ZeroDevice::create(); ConsoleDevice::create(); FramebufferDevice::create(); return {}; } }