Serenity Operating System
at master 48 lines 1.6 kB view raw
1/* 2 * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#pragma once 8 9#include <AK/OwnPtr.h> 10#include <AK/Types.h> 11#include <Kernel/Arch/IRQController.h> 12#include <Kernel/Interrupts/GenericInterruptHandler.h> 13 14namespace Kernel { 15 16class SpuriousInterruptHandler final : public GenericInterruptHandler { 17public: 18 static void initialize(u8 interrupt_number); 19 static void initialize_for_disabled_master_pic(); 20 static void initialize_for_disabled_slave_pic(); 21 virtual ~SpuriousInterruptHandler(); 22 virtual bool handle_interrupt(RegisterState const& regs) override; 23 24 void register_handler(GenericInterruptHandler&); 25 void unregister_handler(GenericInterruptHandler&); 26 27 virtual bool eoi() override; 28 29 virtual size_t sharing_devices_count() const override { return 1; } 30 virtual bool is_shared_handler() const override { return false; } 31 virtual bool is_sharing_with_others() const override { return false; } 32 33 virtual HandlerType type() const override { return HandlerType::SpuriousInterruptHandler; } 34 virtual StringView purpose() const override; 35 virtual StringView controller() const override; 36 37 void enable_interrupt_vector_for_disabled_pic(); 38 39private: 40 void enable_interrupt_vector(); 41 void disable_interrupt_vector(); 42 explicit SpuriousInterruptHandler(u8 interrupt_number); 43 bool m_enabled { false }; 44 bool m_real_irq { false }; 45 NonnullLockRefPtr<IRQController> m_responsible_irq_controller; 46 OwnPtr<GenericInterruptHandler> m_real_handler; 47}; 48}