14 enum class Result { Success, CommandError, TransportError };
16 bool initialise(
IoBase* registers, uint16_t
id, uint16_t depth,
size_t stride,
17 size_t transferBytes,
Device* dmaDevice);
18 Result execute(
Nvme::Command command,
void* buffer,
size_t bytes,
bool writing,
bool interrupts,
19 size_t timeoutSeconds, uint32_t* result =
nullptr,
bool interruptProbe =
false,
20 bool cacheFill =
false, physical_uintptr_t directWritePhysical = 0,
22 bool complete(
bool fromInterrupt);
26 size_t interruptCompletions()
const;
27 size_t maximumOutstanding()
const;
28 uint64_t submissionAddress()
const {
29 return m_SubmissionDma.address();
31 uint64_t completionAddress()
const {
32 return m_CompletionDma.address();
34 uint16_t depth()
const {
42 physical_uintptr_t firstPage = 0;
52 bool observe(
bool fromInterrupt,
bool interruptsEnabled =
false);
60 Slot m_Slots[Nvme::QueueDepth - 1];
64 size_t m_TransferBytes;
69 uint16_t m_SubmissionHead;
72 bool m_PolledInterrupt;
73 size_t m_InterruptCompletions;
75 size_t m_MaximumOutstanding;