1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-30 17:48:12 +00:00
serenity/Kernel/Interrupts/IRQHandler.h
Daniel Bertalan b97a00d4b1 Kernel: Add missing override specifiers
The `#pragma GCC diagnostic` part is needed because the class has
virtual methods with the same name but different arguments, and Clang
tries to warn us that we are not actually overriding anything with
these.

Weirdly enough, GCC does not seem to care.
2021-07-03 01:56:31 +04:30

47 lines
1.3 KiB
C++

/*
* Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/RefPtr.h>
#include <AK/String.h>
#include <AK/Types.h>
#include <Kernel/Interrupts/GenericInterruptHandler.h>
#include <Kernel/Interrupts/IRQController.h>
namespace Kernel {
class IRQHandler : public GenericInterruptHandler {
public:
virtual ~IRQHandler();
virtual bool handle_interrupt(const RegisterState& regs) override { return handle_irq(regs); }
virtual bool handle_irq(const RegisterState&) = 0;
void enable_irq();
void disable_irq();
virtual bool eoi() override;
virtual HandlerType type() const override { return HandlerType::IRQHandler; }
virtual const char* purpose() const override { return "IRQ Handler"; }
virtual const char* controller() const override { return m_responsible_irq_controller->model(); }
virtual size_t sharing_devices_count() const override { return 0; }
virtual bool is_shared_handler() const override { return false; }
virtual bool is_sharing_with_others() const override { return m_shared_with_others; }
protected:
void change_irq_number(u8 irq);
explicit IRQHandler(u8 irq);
private:
bool m_shared_with_others { false };
bool m_enabled { false };
RefPtr<IRQController> m_responsible_irq_controller;
};
}