/* * Copyright (c) 2022, Liav A. * * SPDX-License-Identifier: BSD-2-Clause */ #include #include #include #include namespace Kernel { static Singleton s_the; SysFSComponentRegistry& SysFSComponentRegistry::the() { return *s_the; } UNMAP_AFTER_INIT void SysFSComponentRegistry::initialize() { VERIFY(!s_the.is_initialized()); s_the.ensure_instance(); } UNMAP_AFTER_INIT SysFSComponentRegistry::SysFSComponentRegistry() : m_root_directory(SysFSRootDirectory::create()) { } UNMAP_AFTER_INIT void SysFSComponentRegistry::register_new_component(SysFSComponent& component) { SpinlockLocker locker(m_root_directory_lock); MUST(m_root_directory->m_child_components.with([&](auto& list) -> ErrorOr { list.append(component); return {}; })); } SysFSBusDirectory& SysFSComponentRegistry::buses_directory() { return *m_root_directory->m_buses_directory; } void SysFSComponentRegistry::register_new_bus_directory(SysFSDirectory& new_bus_directory) { VERIFY(!m_root_directory->m_buses_directory.is_null()); MUST(m_root_directory->m_buses_directory->m_child_components.with([&](auto& list) -> ErrorOr { list.append(new_bus_directory); return {}; })); } }