Newer
Older
minerva / Kernel / Bus / VirtIO / Transport / PCIe / InterruptHandler.h
@minerva minerva on 13 Jul 897 bytes Initial commit
/*
 * Copyright (c) 2023, Liav A. <liavalb@hotmail.co.il>
 *
 * SPDX-License-Identifier: BSD-2-Clause
 */

#pragma once

#include <Kernel/Bus/VirtIO/Device.h>
#include <Kernel/Bus/VirtIO/Transport/InterruptHandler.h>
#include <Kernel/Bus/VirtIO/Transport/PCIe/TransportLink.h>
#include <Kernel/Interrupts/PCIIRQHandler.h>

namespace Kernel::VirtIO {

class PCIeTransportInterruptHandler final
    : public TransportInterruptHandler
    , public PCI::IRQHandler {
public:
    static ErrorOr<NonnullOwnPtr<PCIeTransportInterruptHandler>> create(PCIeTransportLink&, VirtIO::Device&, u8 irq);
    virtual ~PCIeTransportInterruptHandler() override = default;

    virtual StringView purpose() const override { return "VirtIO PCI IRQ Handler"sv; }

private:
    PCIeTransportInterruptHandler(PCIeTransportLink&, VirtIO::Device&, u8 irq);

    //^ IRQHandler
    virtual bool handle_irq() override;
};
}