The Pedigree Project 0.1
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
NvmeQueue Class Reference
+ Collaboration diagram for NvmeQueue:

Classes

struct  Slot
 

Public Types

enum class  Result { Success , CommandError , TransportError }
 

Public Member Functions

bool initialise (IoBase *registers, uint16_t id, uint16_t depth, size_t stride, size_t transferBytes, Device *dmaDevice)
 
Result execute (Nvme::Command command, void *buffer, size_t bytes, bool writing, bool interrupts, size_t timeoutSeconds, uint32_t *result=nullptr, bool interruptProbe=false, bool cacheFill=false, physical_uintptr_t directWritePhysical=0, PciBus::DmaMapping *directReadMapping=nullptr)
 
bool complete (bool fromInterrupt)
 
void stop ()
 
void releaseDma ()
 
size_t interruptCompletions () const
 
size_t maximumOutstanding () const
 
uint64_t submissionAddress () const
 
uint64_t completionAddress () const
 
uint16_t depth () const
 

Private Member Functions

bool observe (bool fromInterrupt, bool interruptsEnabled=false)
 
void stopLocked ()
 

Private Attributes

IoBase * m_Registers
 
Device * m_DmaDevice
 
MemoryRegion m_Submission
 
MemoryRegion m_Completion
 
PciBus::DmaMapping m_SubmissionDma
 
PciBus::DmaMapping m_CompletionDma
 
Slot m_Slots [Nvme::QueueDepth - 1]
 
Mutex m_Lock
 
Semaphore m_Available
 
size_t m_Stride
 
size_t m_TransferBytes
 
uint16_t m_Id
 
uint16_t m_Depth
 
uint16_t m_Tail
 
uint16_t m_Head
 
uint16_t m_SubmissionHead
 
bool m_Phase
 
bool m_Online
 
bool m_PolledInterrupt
 
size_t m_InterruptCompletions
 
size_t m_Outstanding
 
size_t m_MaximumOutstanding
 

Detailed Description

Definition at line 12 of file NvmeQueue.h.

Member Enumeration Documentation

◆ Result

enum class NvmeQueue::Result
strong

Definition at line 14 of file NvmeQueue.h.

Constructor & Destructor Documentation

◆ NvmeQueue()

NvmeQueue::NvmeQueue ( )

Definition at line 22 of file NvmeQueue.cc.

Member Function Documentation

◆ complete()

bool NvmeQueue::complete ( bool  fromInterrupt)

Definition at line 176 of file NvmeQueue.cc.

◆ completionAddress()

uint64_t NvmeQueue::completionAddress ( ) const
inline

Definition at line 31 of file NvmeQueue.h.

◆ depth()

uint16_t NvmeQueue::depth ( ) const
inline

Definition at line 34 of file NvmeQueue.h.

◆ execute()

NvmeQueue::Result NvmeQueue::execute ( Nvme::Command  command,
void *  buffer,
size_t  bytes,
bool  writing,
bool  interrupts,
size_t  timeoutSeconds,
uint32_t *  result = nullptr,
bool  interruptProbe = false,
bool  cacheFill = false,
physical_uintptr_t  directWritePhysical = 0,
PciBus::DmaMapping *  directReadMapping = nullptr 
)

Definition at line 181 of file NvmeQueue.cc.

◆ initialise()

bool NvmeQueue::initialise ( IoBase *  registers,
uint16_t  id,
uint16_t  depth,
size_t  stride,
size_t  transferBytes,
Device *  dmaDevice 
)

Definition at line 42 of file NvmeQueue.cc.

◆ interruptCompletions()

size_t NvmeQueue::interruptCompletions ( ) const

Definition at line 316 of file NvmeQueue.cc.

◆ maximumOutstanding()

size_t NvmeQueue::maximumOutstanding ( ) const

Definition at line 320 of file NvmeQueue.cc.

◆ observe()

bool NvmeQueue::observe ( bool  fromInterrupt,
bool  interruptsEnabled = false 
)
private

Definition at line 129 of file NvmeQueue.cc.

◆ releaseDma()

void NvmeQueue::releaseDma ( )

Release mappings after the controller has stopped DMA and drained commands.

Definition at line 118 of file NvmeQueue.cc.

◆ stop()

void NvmeQueue::stop ( )

Definition at line 113 of file NvmeQueue.cc.

◆ stopLocked()

void NvmeQueue::stopLocked ( )
private

Definition at line 103 of file NvmeQueue.cc.

◆ submissionAddress()

uint64_t NvmeQueue::submissionAddress ( ) const
inline

Definition at line 28 of file NvmeQueue.h.

Member Data Documentation

◆ m_Available

Semaphore NvmeQueue::m_Available
private

Definition at line 62 of file NvmeQueue.h.

◆ m_Completion

MemoryRegion NvmeQueue::m_Completion
private

Definition at line 57 of file NvmeQueue.h.

◆ m_CompletionDma

PciBus::DmaMapping NvmeQueue::m_CompletionDma
private

Definition at line 59 of file NvmeQueue.h.

◆ m_Depth

uint16_t NvmeQueue::m_Depth
private

Definition at line 66 of file NvmeQueue.h.

◆ m_DmaDevice

Device* NvmeQueue::m_DmaDevice
private

Definition at line 55 of file NvmeQueue.h.

◆ m_Head

uint16_t NvmeQueue::m_Head
private

Definition at line 68 of file NvmeQueue.h.

◆ m_Id

uint16_t NvmeQueue::m_Id
private

Definition at line 65 of file NvmeQueue.h.

◆ m_InterruptCompletions

size_t NvmeQueue::m_InterruptCompletions
private

Definition at line 73 of file NvmeQueue.h.

◆ m_Lock

Mutex NvmeQueue::m_Lock
mutableprivate

Definition at line 61 of file NvmeQueue.h.

◆ m_MaximumOutstanding

size_t NvmeQueue::m_MaximumOutstanding
private

Definition at line 75 of file NvmeQueue.h.

◆ m_Online

bool NvmeQueue::m_Online
private

Definition at line 71 of file NvmeQueue.h.

◆ m_Outstanding

size_t NvmeQueue::m_Outstanding
private

Definition at line 74 of file NvmeQueue.h.

◆ m_Phase

bool NvmeQueue::m_Phase
private

Definition at line 70 of file NvmeQueue.h.

◆ m_PolledInterrupt

bool NvmeQueue::m_PolledInterrupt
private

Definition at line 72 of file NvmeQueue.h.

◆ m_Registers

IoBase* NvmeQueue::m_Registers
private

Definition at line 54 of file NvmeQueue.h.

◆ m_Slots

Slot NvmeQueue::m_Slots[Nvme::QueueDepth - 1]
private

Definition at line 60 of file NvmeQueue.h.

◆ m_Stride

size_t NvmeQueue::m_Stride
private

Definition at line 63 of file NvmeQueue.h.

◆ m_Submission

MemoryRegion NvmeQueue::m_Submission
private

Definition at line 56 of file NvmeQueue.h.

◆ m_SubmissionDma

PciBus::DmaMapping NvmeQueue::m_SubmissionDma
private

Definition at line 58 of file NvmeQueue.h.

◆ m_SubmissionHead

uint16_t NvmeQueue::m_SubmissionHead
private

Definition at line 69 of file NvmeQueue.h.

◆ m_Tail

uint16_t NvmeQueue::m_Tail
private

Definition at line 67 of file NvmeQueue.h.

◆ m_TransferBytes

size_t NvmeQueue::m_TransferBytes
private

Definition at line 64 of file NvmeQueue.h.


The documentation for this class was generated from the following files: