mirror of
https://github.com/RGBCube/serenity
synced 2026-01-13 18:11:00 +00:00
Introduce a new Struct Doorbell that encapsulates the mmio doorbell register. This commit does not introduce any functional changes and it is added in preparation to adding shadow doorbell support.
30 lines
1.2 KiB
C++
30 lines
1.2 KiB
C++
/*
|
|
* Copyright (c) 2022, Pankaj R <pankydev8@gmail.com>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <Kernel/Devices/Storage/NVMe/NVMeQueue.h>
|
|
#include <Kernel/Interrupts/PCIIRQHandler.h>
|
|
|
|
namespace Kernel {
|
|
|
|
class NVMeInterruptQueue : public NVMeQueue
|
|
, public PCIIRQHandler {
|
|
public:
|
|
static ErrorOr<NonnullLockRefPtr<NVMeInterruptQueue>> try_create(PCI::Device& device, NonnullOwnPtr<Memory::Region> rw_dma_region, NonnullRefPtr<Memory::PhysicalPage> rw_dma_page, u16 qid, u8 irq, u32 q_depth, OwnPtr<Memory::Region> cq_dma_region, OwnPtr<Memory::Region> sq_dma_region, Doorbell db_regs);
|
|
void submit_sqe(NVMeSubmission& submission) override;
|
|
virtual ~NVMeInterruptQueue() override {};
|
|
virtual StringView purpose() const override { return "NVMe"sv; }
|
|
void initialize_interrupt_queue();
|
|
|
|
protected:
|
|
NVMeInterruptQueue(PCI::Device& device, NonnullOwnPtr<Memory::Region> rw_dma_region, NonnullRefPtr<Memory::PhysicalPage> rw_dma_page, u16 qid, u8 irq, u32 q_depth, OwnPtr<Memory::Region> cq_dma_region, OwnPtr<Memory::Region> sq_dma_region, Doorbell db_regs);
|
|
|
|
private:
|
|
virtual void complete_current_request(u16 cmdid, u16 status) override;
|
|
bool handle_irq(RegisterState const&) override;
|
|
};
|
|
}
|