diff --git a/Kernel/Bus/USB/USBManagement.cpp b/Kernel/Bus/USB/USBManagement.cpp index 53a1c9950c..6c868de957 100644 --- a/Kernel/Bus/USB/USBManagement.cpp +++ b/Kernel/Bus/USB/USBManagement.cpp @@ -1,5 +1,6 @@ /* * Copyright (c) 2021, Luke Wilde + * Copyright (c) 2023, Jesse Buhagiar * * SPDX-License-Identifier: BSD-2-Clause */ @@ -74,6 +75,20 @@ UNMAP_AFTER_INIT void USBManagement::initialize() s_the.ensure_instance(); } +void USBManagement::register_driver(NonnullLockRefPtr driver) +{ + dbgln_if(USB_DEBUG, "Registering driver {}", driver->name()); + m_available_drivers.append(driver); +} + +void USBManagement::unregister_driver(NonnullLockRefPtr driver) +{ + dbgln_if(USB_DEBUG, "Unregistering driver {}", driver->name()); + auto const& found_driver = m_available_drivers.find(driver); + if (!found_driver.is_end()) + m_available_drivers.remove(found_driver.index()); +} + USBManagement& USBManagement::the() { return *s_the; diff --git a/Kernel/Bus/USB/USBManagement.h b/Kernel/Bus/USB/USBManagement.h index 0abcd42632..12337f007d 100644 --- a/Kernel/Bus/USB/USBManagement.h +++ b/Kernel/Bus/USB/USBManagement.h @@ -1,11 +1,13 @@ /* * Copyright (c) 2021, Luke Wilde + * Copyright (c) 2023, Jesse Buhagiar * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once +#include #include #include @@ -19,10 +21,16 @@ public: static void initialize(); static USBManagement& the(); + void register_driver(NonnullLockRefPtr driver); + void unregister_driver(NonnullLockRefPtr driver); + + Vector>& available_drivers() { return m_available_drivers; } + private: void enumerate_controllers(); USBController::List m_controllers; + Vector> m_available_drivers; }; }