1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 23:47:45 +00:00

Kernel: Don't register USB devices if USBManagement is not initialized

This commit is contained in:
Andrew Kaster 2023-10-16 15:54:57 -06:00 committed by Andrew Kaster
parent 639051d34e
commit 91816c15f8
4 changed files with 16 additions and 9 deletions

View file

@ -81,22 +81,29 @@ UNMAP_AFTER_INIT void USBManagement::initialize()
void USBManagement::register_driver(NonnullLockRefPtr<Driver> driver)
{
if (!initialized())
return;
dbgln_if(USB_DEBUG, "Registering driver {}", driver->name());
m_available_drivers.append(driver);
the().m_available_drivers.append(driver);
}
LockRefPtr<Driver> USBManagement::get_driver_by_name(StringView name)
{
auto it = m_available_drivers.find_if([name](auto driver) { return driver->name() == name; });
if (!initialized())
return nullptr;
auto it = the().m_available_drivers.find_if([name](auto driver) { return driver->name() == name; });
return it.is_end() ? nullptr : LockRefPtr { *it };
}
void USBManagement::unregister_driver(NonnullLockRefPtr<Driver> driver)
{
if (!initialized())
return;
auto& the_instance = the();
dbgln_if(USB_DEBUG, "Unregistering driver {}", driver->name());
auto const& found_driver = m_available_drivers.find(driver);
auto const& found_driver = the_instance.m_available_drivers.find(driver);
if (!found_driver.is_end())
m_available_drivers.remove(found_driver.index());
the_instance.m_available_drivers.remove(found_driver.index());
}
USBManagement& USBManagement::the()