/* * Copyright (c) 2020, Liav A. * Copyright (c) 2022, Timon Kruiper * * SPDX-License-Identifier: BSD-2-Clause */ #include #include namespace Kernel { static InterruptManagement* s_interrupt_management; bool InterruptManagement::initialized() { return s_interrupt_management != nullptr; } InterruptManagement& InterruptManagement::the() { VERIFY(InterruptManagement::initialized()); return *s_interrupt_management; } void InterruptManagement::initialize() { VERIFY(!InterruptManagement::initialized()); s_interrupt_management = new InterruptManagement; the().find_controllers(); } void InterruptManagement::find_controllers() { // TODO: Once device tree support is in place, find interrupt controllers using that. m_interrupt_controllers.append(new RPi::InterruptController); } u8 InterruptManagement::acquire_mapped_interrupt_number(u8 interrupt_number) { return interrupt_number; } Vector> const& InterruptManagement::controllers() { return m_interrupt_controllers; } LockRefPtr InterruptManagement::get_responsible_irq_controller(u8) { // TODO: Support more interrupt controllers VERIFY(m_interrupt_controllers.size() == 1); return m_interrupt_controllers[0]; } }