/* * Copyright (c) 2021-2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include #include #include #include namespace Kernel { class SysFSUSBBusDirectory final : public SysFSDirectory { public: static void initialize(); static SysFSUSBBusDirectory& the(); virtual StringView name() const override { return "usb"sv; } void plug(USB::Device&); void unplug(USB::Device&); virtual ErrorOr traverse_as_directory(FileSystemID, Function(FileSystem::DirectoryEntryView const&)>) const override; virtual RefPtr lookup(StringView name) override; private: explicit SysFSUSBBusDirectory(SysFSBusDirectory&); RefPtr device_node_for(USB::Device& device); IntrusiveList<&SysFSUSBDeviceInformation::m_list_node> m_device_nodes; mutable Spinlock m_lock; }; }