PIC.h 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. /*
  2. * Copyright (c) 2018-2020, Andreas Kling <kling@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <AK/Types.h>
  8. #include <Kernel/Interrupts/IRQController.h>
  9. namespace Kernel {
  10. class PIC final : public IRQController {
  11. public:
  12. PIC();
  13. virtual void enable(const GenericInterruptHandler&) override;
  14. virtual void disable(const GenericInterruptHandler&) override;
  15. virtual void hard_disable() override;
  16. virtual void eoi(const GenericInterruptHandler&) const override;
  17. virtual bool is_vector_enabled(u8 number) const override;
  18. virtual bool is_enabled() const override;
  19. virtual void spurious_eoi(const GenericInterruptHandler&) const override;
  20. virtual u16 get_isr() const override;
  21. virtual u16 get_irr() const override;
  22. virtual u32 gsi_base() const override { return 0; }
  23. virtual size_t interrupt_vectors_count() const override { return 16; }
  24. virtual StringView model() const override { return "Dual i8259"sv; }
  25. virtual IRQControllerType type() const override { return IRQControllerType::i8259; }
  26. private:
  27. u16 m_cached_irq_mask { 0xffff };
  28. void eoi_interrupt(u8 irq) const;
  29. void enable_vector(u8 number);
  30. void remap(u8 offset);
  31. void complete_eoi() const;
  32. virtual void initialize() override;
  33. };
  34. }