The Pedigree Project 0.1
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | Friends | List of all members
NvmeController Class Referencefinal
+ Inheritance diagram for NvmeController:
+ Collaboration diagram for NvmeController:

Public Member Functions

 NvmeController (Device *pci)
 
bool initialiseController ()
 
void shutdown ()
 
bool identify (uint32_t nsid, uint8_t kind, void *buffer, bool interruptProbe=false)
 
bool primaryControllerCapabilities (Nvme::PrimaryControllerCapabilities &capabilities)
 
bool secondaryControllers (uint16_t firstControllerId, Nvme::SecondaryControllerList &controllers)
 
bool virtualizationManagement (uint16_t controllerId, Nvme::VirtualResource resource, Nvme::VirtualizationAction action, uint16_t count, uint16_t *modified=nullptr)
 
bool setNamespaceAttachment (uint32_t nsid, uint16_t controllerId, bool attached)
 
uint16_t controllerId () const
 
bool supportsVirtualizationManagement () const
 
bool readWrite (uint32_t nsid, uint64_t lba, uint32_t blocks, void *buffer, size_t bytes, bool writing)
 
bool flush (uint32_t nsid)
 
size_t interruptCompletions () const
 
size_t maximumOutstanding () const
 
size_t ioQueueCount () const
 
size_t ioQueueInterruptCompletions (size_t queue) const
 
Device * pciDevice () const
 
size_t maxTransfer () const
 
const char * model () const
 
bool supportsConcurrentReads () const override
 
IrqDisposition irq (irq_id_t number) override
 
bool acceptsSpuriousInterrupts () const override
 
bool sendCommand (size_t, uintptr_t, uint8_t, uintptr_t, uint16_t, bool) override
 
- Public Member Functions inherited from ScsiController
 ScsiController (Controller *pDev, bool startWorker=true)
 
bool prepareDiskRemoval ()
 
void cancelDiskRemoval ()
 
virtual uint64_t executeRequest (uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)
 
- Public Member Functions inherited from Controller
 Controller (Device *pDev)
 
virtual Type getType ()
 
virtual void getName (String &str)
 
virtual void dump (String &str)
 
- Public Member Functions inherited from Device
 Device (Device *p)
 
Device * getParent () const
 
void setParent (Device *p)
 
virtual const String & getSpecificType ()
 
virtual void setSpecificType (String str)
 
void setPciPosition (uint32_t bus, uint32_t device, uint32_t func)
 
void setPciIdentifiers (uint8_t classCode, uint8_t subclassCode, uint16_t vendorId, uint16_t deviceId, uint8_t progIf)
 
void setPciConfigHeader (const PciBus::ConfigSpace &space)
 
PciBus::ConfigSpace getPciConfigHeader () const
 
uint8_t getPciClassCode ()
 
uint8_t getPciSubclassCode ()
 
uint16_t getPciVendorId ()
 
uint16_t getPciDeviceId ()
 
uint8_t getPciProgInterface ()
 
uint32_t getPciBusPosition ()
 
uint32_t getPciDevicePosition ()
 
uint32_t getPciFunctionNumber ()
 
Device * getPhysicalFunction () const
 
size_t getVirtualFunctionIndex () const
 
void setVirtualFunction (Device *physicalFunction, size_t index)
 
virtual Vector< Address * > & addresses ()
 
virtual uintptr_t getInterruptNumber ()
 
virtual void setInterruptNumber (uintptr_t n)
 
void addChild (Device *pDevice)
 
Device * getChild (size_t n)
 
size_t getNumChildren ()
 
void removeChild (size_t n)
 
void removeChild (Device *d)
 
void replaceChild (Device *src, Device *dest)
 
- Public Member Functions inherited from RequestQueue
 RequestQueue (const String &name)
 
virtual void initialise ()
 
virtual void destroy ()
 
MUST_USE_RESULT uint64_t addRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
MUST_USE_RESULT uint64_t addRequest (size_t priority, ActionOnDuplicate action, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
uint64_t addAsyncRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
MUST_USE_RESULT bool publishAsyncRequest (size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
bool canWaitForCompletion ()
 
MUST_USE_RESULT bool waitForPreallocated (PreallocatedRequest &request)
 
MUST_USE_RESULT PreallocatedPublishResult publishPreallocated (PreallocatedRequest &request, size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
MUST_USE_RESULT PreallocatedPublishResult republishPreallocatedWhileReleasing (PreallocatedRequest &request, size_t priority, uint64_t p1=0, uint64_t p2=0, uint64_t p3=0, uint64_t p4=0, uint64_t p5=0, uint64_t p6=0, uint64_t p7=0, uint64_t p8=0)
 
MUST_USE_RESULT bool halt ()
 
MUST_USE_RESULT bool resume ()
 
LifecycleState getLifecycleState ()
 
bool drain ()
 

Protected Member Functions

size_t getNumUnits () override
 
- Protected Member Functions inherited from ScsiController
virtual void cancelRequest (const Request &request)
 
void shutdownDiskCaches (bool deviceAvailable=true)
 
void searchDisks ()
 
- Protected Member Functions inherited from Device
 NOT_COPYABLE_OR_ASSIGNABLE (Device)
 
- Protected Member Functions inherited from RequestQueue
virtual bool workerPlacement (ThreadPlacement &) const
 
 RequestQueue (const RequestQueue &)
 
void operator= (const RequestQueue &)
 
virtual bool compareRequests (const Request &a, const Request &b)
 
int work ()
 
NextRequestResult getNextRequest (Request *&request)
 
bool drainIntakeLocked (size_t priority)
 
void publishRequest (Request *request)
 
Request * findDuplicate (const Request &request)
 
void discardRequest (Request *request)
 
uint64_t addAsyncRequestInternal (size_t priority, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)
 
PreallocatedPublishResult publishPreallocatedRequest (PreallocatedRequest &request, PreallocatedRequest::State availableState, size_t priority, uint64_t p1, uint64_t p2, uint64_t p3, uint64_t p4, uint64_t p5, uint64_t p6, uint64_t p7, uint64_t p8)
 
void releasePreallocatedRequest (Request *request)
 
void invokeCancelRequest (const Request &request)
 
bool callbackActiveOnCurrentThread () const
 
void releaseRequest (Request *request)
 
uint64_t waitForRequest (Request *request)
 
bool startWorker ()
 
bool stopWorker ()
 
void closePreallocatedAdmission ()
 
void waitForPreallocatedPublishers ()
 
- Protected Member Functions inherited from IrqHandler
virtual ~IrqHandler ()
 
- Protected Member Functions inherited from IrqHandlerBase
virtual ~IrqHandlerBase ()
 

Private Member Functions

bool waitReady (bool ready)
 
bool disable ()
 
void failController ()
 
bool command (NvmeQueue &queue, Nvme::Command command, void *buffer=nullptr, size_t bytes=0, bool writing=false, uint32_t *result=nullptr, bool interruptProbe=false, bool cacheFill=false, physical_uintptr_t directWritePhysical=0)
 
bool readWrite (uint32_t nsid, uint64_t lba, uint32_t blocks, void *buffer, size_t bytes, bool writing, bool cacheFill, physical_uintptr_t directWritePhysical=0)
 
bool createIoQueue (size_t index, uint16_t interruptVector)
 
NvmeQueue & ioQueue ()
 
bool primaryControllerCapabilitiesLocked (Nvme::PrimaryControllerCapabilities &capabilities)
 
bool secondaryControllersLocked (uint16_t firstControllerId, Nvme::SecondaryControllerList &controllers)
 
bool discoverNamespaces (uint32_t maximumId, bool &activeNamespaces)
 
NvmeDisk * findNamespace (uint32_t nsid)
 

Private Attributes

Device * m_Pci
 
IoBase * m_Registers
 
NvmeQueue m_Admin
 
NvmeQueue * m_Io [Nvme::MaxIoQueues]
 
size_t m_IoCount
 
size_t m_IoProcessor [Nvme::MaxIoQueues]
 
OperationBarrier m_Commands
 
Mutex m_WriteLock
 
Mutex m_ResetLock
 
Mutex m_VirtualizationLock
 
Mutex m_IrqLock
 
size_t m_ReadyMilliseconds
 
size_t m_MaxTransfer
 
irq_id_t m_Irq
 
irq_id_t m_IoIrq [Nvme::MaxIoQueues]
 
uint16_t m_OriginalCommand
 
uint16_t m_ControllerId
 
bool m_VirtualizationSupported
 
bool m_NamespaceManagementSupported
 
bool m_PciChanged
 
bool m_HardwareOwned
 
bool m_DmaInstalled
 
bool m_DmaIsolated
 
bool m_Interrupts
 
bool m_BatchInitialising
 
bool m_Failed
 
bool m_Stopping
 
bool m_Shutdown
 
char m_Model [41]
 

Friends

class NvmeDisk
 

Additional Inherited Members

- Public Types inherited from Device
enum  Type {
  Generic , Root , Disk , Bus ,
  Display , Network , Sound , Console ,
  Mouse , Controller , UsbController , UsbGeneric ,
  UsbContainer
}
 
typedef Device *(* Callback) (Device *)
 
- Public Types inherited from RequestQueue
enum class  OverrunStatus { Clear , Armed , Stalled , Overloaded }
 
enum class  PreallocatedPublishResult {
  Accepted , TokenBusy , QueueStopped , QueueFull ,
  InvalidPriority
}
 
enum  ActionOnDuplicate { Block , NewRequest , ReturnImmediately }
 
enum class  LifecycleState { Stopped , Accepting , Stopping , Destroyed }
 
- Static Public Member Functions inherited from Device
static bool treeLockHeldByCurrentThread ()
 
static void foreach (Callback callback, Device *root=0)
 
template<class F , class... Args>
static void foreach (pedigree_std::Callable< F > &callback, Device *root, Args... args)
 
static void addToRoot (Device *device)
 
static void searchByVendorId (uint16_t vendorId, void(*callback)(Device *), Device *root=0)
 
static void searchByVendorIdAndDeviceId (uint16_t vendorId, uint16_t deviceId, void(*callback)(Device *), Device *root=0)
 
static void searchByClass (uint16_t classCode, void(*callback)(Device *), Device *root=0)
 
static void searchByClassAndSubclass (uint16_t classCode, uint16_t subclassCode, void(*callback)(Device *), Device *root=0)
 
static void searchByClassSubclassAndProgInterface (uint16_t classCode, uint16_t subclassCode, uint8_t progInterface, void(*callback)(Device *), Device *root=0)
 
- Protected Types inherited from RequestQueue
enum class  NextRequestResult { Item , Empty , Retry }
 
- Static Protected Member Functions inherited from Device
static Device & root ()
 
- Static Protected Member Functions inherited from RequestQueue
static int trampoline (void *p)
 
static void completeRequest (Request *request, uint64_t returnValue, bool rejected)
 
static void retainRequest (Request *request)
 
- Protected Attributes inherited from Device
Vector< Address * > m_Addresses
 
Vector< Device * > m_Children
 
Device * m_pParent
 
Device * m_PhysicalFunction
 
size_t m_VirtualFunctionIndex
 
uintptr_t m_InterruptNumber
 
String m_SpecificType
 
PciBus::ConfigSpace m_ConfigHeader
 
uint8_t m_ClassCode
 
uint8_t m_SubclassCode
 
uint16_t m_VendorId
 
uint16_t m_DeviceId
 
uint8_t m_ProgInterface
 
uint32_t m_PciBusPos
 
uint32_t m_PciDevicePos
 
uint32_t m_PciFunctionNum
 
- Protected Attributes inherited from RequestQueue
IntakeLane m_IntakeLanes [REQUEST_QUEUE_NUM_PRIORITIES]
 
Request * m_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES]
 
Request * m_pRequestQueueTail [REQUEST_QUEUE_NUM_PRIORITIES]
 
Request * m_pActiveRequest
 
Atomic< size_t > m_State
 
Mutex m_LifecycleMutex
 
WaitQueue m_RequestQueueWaiters
 
WaitQueue m_WorkerWaiters
 
Thread * m_pThread
 
Atomic< PerProcessorScheduler * > m_pWorkerScheduler
 
SchedulerWorkerWake m_WorkerWake
 
Atomic< size_t > m_bWorkerReady
 
Atomic< size_t > m_bWorkerActive
 
size_t m_WorkerProgressGeneration
 
RequestQueueOverrunChecker m_OverrunChecker
 
Timer * m_pOverrunTimer
 
Atomic< size_t > m_PublicationState
 
size_t m_nMaxAsyncRequests
 
Atomic< size_t > m_nAsyncRequests
 
Atomic< size_t > m_nTotalRequests
 
Atomic< size_t > m_nActiveRequests
 
NormalStaticString m_Name
 
- Static Protected Attributes inherited from Device
static Device m_Root
 
static Mutex m_TreeLock
 
- Static Protected Attributes inherited from RequestQueue
static constexpr size_t PublicationClosed = static_cast<size_t>(1) << ((sizeof(size_t) * 8) - 1)
 
static constexpr size_t PublicationCountMask = ~PublicationClosed
 

Detailed Description

Definition at line 10 of file NvmeController.h.

Constructor & Destructor Documentation

◆ NvmeController()

NvmeController::NvmeController ( Device *  pci)
explicit

Definition at line 31 of file NvmeController.cc.

◆ ~NvmeController()

NvmeController::~NvmeController ( )
override

Definition at line 57 of file NvmeController.cc.

Member Function Documentation

◆ acceptsSpuriousInterrupts()

bool NvmeController::acceptsSpuriousInterrupts ( ) const
inlineoverridevirtual

A recyclable message vector may deliver a late edge from its previous source. Opt in only when the callback verifies its own device's pending work and an empty invocation has no side effects.

Reimplemented from IrqHandler.

Definition at line 55 of file NvmeController.h.

◆ command()

bool NvmeController::command ( NvmeQueue &  queue,
Nvme::Command  command,
void *  buffer = nullptr,
size_t  bytes = 0,
bool  writing = false,
uint32_t *  result = nullptr,
bool  interruptProbe = false,
bool  cacheFill = false,
physical_uintptr_t  directWritePhysical = 0 
)
private

Definition at line 103 of file NvmeController.cc.

◆ controllerId()

uint16_t NvmeController::controllerId ( ) const
inline

Definition at line 27 of file NvmeController.h.

◆ createIoQueue()

bool NvmeController::createIoQueue ( size_t  index,
uint16_t  interruptVector 
)
private

Definition at line 563 of file NvmeController.cc.

◆ disable()

bool NvmeController::disable ( )
private

Definition at line 73 of file NvmeController.cc.

◆ discoverNamespaces()

bool NvmeController::discoverNamespaces ( uint32_t  maximumId,
bool &  activeNamespaces 
)
private

Definition at line 590 of file NvmeController.cc.

◆ failController()

void NvmeController::failController ( )
private

Definition at line 79 of file NvmeController.cc.

◆ findNamespace()

NvmeDisk * NvmeController::findNamespace ( uint32_t  nsid)
private

Definition at line 616 of file NvmeController.cc.

◆ flush()

bool NvmeController::flush ( uint32_t  nsid)

Definition at line 650 of file NvmeController.cc.

◆ getNumUnits()

size_t NvmeController::getNumUnits ( )
inlineoverrideprotectedvirtual

Implements ScsiController.

Definition at line 63 of file NvmeController.h.

◆ identify()

bool NvmeController::identify ( uint32_t  nsid,
uint8_t  kind,
void *  buffer,
bool  interruptProbe = false 
)

Definition at line 121 of file NvmeController.cc.

◆ initialiseController()

bool NvmeController::initialiseController ( )

Definition at line 291 of file NvmeController.cc.

◆ interruptCompletions()

size_t NvmeController::interruptCompletions ( ) const

Definition at line 697 of file NvmeController.cc.

◆ ioQueue()

NvmeQueue & NvmeController::ioQueue ( )
private

Definition at line 581 of file NvmeController.cc.

◆ ioQueueCount()

size_t NvmeController::ioQueueCount ( ) const
inline

Definition at line 38 of file NvmeController.h.

◆ ioQueueInterruptCompletions()

size_t NvmeController::ioQueueInterruptCompletions ( size_t  queue) const

Definition at line 704 of file NvmeController.cc.

◆ irq()

IrqDisposition NvmeController::irq ( irq_id_t  number)
overridevirtual

Handles a pending IRQ in thread context.

Implements IrqHandler.

Definition at line 660 of file NvmeController.cc.

References Quiesced.

◆ maximumOutstanding()

size_t NvmeController::maximumOutstanding ( ) const

Definition at line 771 of file NvmeController.cc.

◆ maxTransfer()

size_t NvmeController::maxTransfer ( ) const
inline

Definition at line 45 of file NvmeController.h.

◆ model()

const char * NvmeController::model ( ) const
inline

Definition at line 48 of file NvmeController.h.

◆ pciDevice()

Device * NvmeController::pciDevice ( ) const
inline

Definition at line 42 of file NvmeController.h.

◆ primaryControllerCapabilities()

bool NvmeController::primaryControllerCapabilities ( Nvme::PrimaryControllerCapabilities &  capabilities)

Definition at line 132 of file NvmeController.cc.

◆ primaryControllerCapabilitiesLocked()

bool NvmeController::primaryControllerCapabilitiesLocked ( Nvme::PrimaryControllerCapabilities &  capabilities)
private

Definition at line 142 of file NvmeController.cc.

◆ readWrite() [1/2]

bool NvmeController::readWrite ( uint32_t  nsid,
uint64_t  lba,
uint32_t  blocks,
void *  buffer,
size_t  bytes,
bool  writing 
)

Definition at line 624 of file NvmeController.cc.

◆ readWrite() [2/2]

bool NvmeController::readWrite ( uint32_t  nsid,
uint64_t  lba,
uint32_t  blocks,
void *  buffer,
size_t  bytes,
bool  writing,
bool  cacheFill,
physical_uintptr_t  directWritePhysical = 0 
)
private

Definition at line 628 of file NvmeController.cc.

◆ secondaryControllers()

bool NvmeController::secondaryControllers ( uint16_t  firstControllerId,
Nvme::SecondaryControllerList &  controllers 
)

Definition at line 163 of file NvmeController.cc.

◆ secondaryControllersLocked()

bool NvmeController::secondaryControllersLocked ( uint16_t  firstControllerId,
Nvme::SecondaryControllerList &  controllers 
)
private

Definition at line 174 of file NvmeController.cc.

◆ sendCommand()

bool NvmeController::sendCommand ( size_t  ,
uintptr_t  ,
uint8_t  ,
uintptr_t  ,
uint16_t  ,
bool   
)
inlineoverridevirtual

Implements ScsiController.

Definition at line 58 of file NvmeController.h.

◆ setNamespaceAttachment()

bool NvmeController::setNamespaceAttachment ( uint32_t  nsid,
uint16_t  controllerId,
bool  attached 
)

Definition at line 268 of file NvmeController.cc.

◆ shutdown()

void NvmeController::shutdown ( )

Definition at line 707 of file NvmeController.cc.

◆ supportsConcurrentReads()

bool NvmeController::supportsConcurrentReads ( ) const
inlineoverridevirtual

Concurrent cache fills require independent transport command storage.

Reimplemented from ScsiController.

Definition at line 51 of file NvmeController.h.

◆ supportsVirtualizationManagement()

bool NvmeController::supportsVirtualizationManagement ( ) const
inline

Definition at line 30 of file NvmeController.h.

◆ virtualizationManagement()

bool NvmeController::virtualizationManagement ( uint16_t  controllerId,
Nvme::VirtualResource  resource,
Nvme::VirtualizationAction  action,
uint16_t  count,
uint16_t *  modified = nullptr 
)

Definition at line 201 of file NvmeController.cc.

◆ waitReady()

bool NvmeController::waitReady ( bool  ready)
private

Definition at line 61 of file NvmeController.cc.

Friends And Related Symbol Documentation

◆ NvmeDisk

friend class NvmeDisk
friend

Definition at line 68 of file NvmeController.h.

Member Data Documentation

◆ m_Admin

NvmeQueue NvmeController::m_Admin
private

Definition at line 86 of file NvmeController.h.

◆ m_BatchInitialising

bool NvmeController::m_BatchInitialising
private

Definition at line 108 of file NvmeController.h.

◆ m_Commands

OperationBarrier NvmeController::m_Commands
private

Definition at line 90 of file NvmeController.h.

◆ m_ControllerId

uint16_t NvmeController::m_ControllerId
private

Definition at line 100 of file NvmeController.h.

◆ m_DmaInstalled

bool NvmeController::m_DmaInstalled
private

Definition at line 105 of file NvmeController.h.

◆ m_DmaIsolated

bool NvmeController::m_DmaIsolated
private

Definition at line 106 of file NvmeController.h.

◆ m_Failed

bool NvmeController::m_Failed
private

Definition at line 109 of file NvmeController.h.

◆ m_HardwareOwned

bool NvmeController::m_HardwareOwned
private

Definition at line 104 of file NvmeController.h.

◆ m_Interrupts

bool NvmeController::m_Interrupts
private

Definition at line 107 of file NvmeController.h.

◆ m_Io

NvmeQueue* NvmeController::m_Io[Nvme::MaxIoQueues]
private

Definition at line 87 of file NvmeController.h.

◆ m_IoCount

size_t NvmeController::m_IoCount
private

Definition at line 88 of file NvmeController.h.

◆ m_IoIrq

irq_id_t NvmeController::m_IoIrq[Nvme::MaxIoQueues]
private

Definition at line 98 of file NvmeController.h.

◆ m_IoProcessor

size_t NvmeController::m_IoProcessor[Nvme::MaxIoQueues]
private

Definition at line 89 of file NvmeController.h.

◆ m_Irq

irq_id_t NvmeController::m_Irq
private

Definition at line 97 of file NvmeController.h.

◆ m_IrqLock

Mutex NvmeController::m_IrqLock
mutableprivate

Definition at line 94 of file NvmeController.h.

◆ m_MaxTransfer

size_t NvmeController::m_MaxTransfer
private

Definition at line 96 of file NvmeController.h.

◆ m_Model

char NvmeController::m_Model[41]
private

Definition at line 112 of file NvmeController.h.

◆ m_NamespaceManagementSupported

bool NvmeController::m_NamespaceManagementSupported
private

Definition at line 102 of file NvmeController.h.

◆ m_OriginalCommand

uint16_t NvmeController::m_OriginalCommand
private

Definition at line 99 of file NvmeController.h.

◆ m_Pci

Device* NvmeController::m_Pci
private

Definition at line 84 of file NvmeController.h.

◆ m_PciChanged

bool NvmeController::m_PciChanged
private

Definition at line 103 of file NvmeController.h.

◆ m_ReadyMilliseconds

size_t NvmeController::m_ReadyMilliseconds
private

Definition at line 95 of file NvmeController.h.

◆ m_Registers

IoBase* NvmeController::m_Registers
private

Definition at line 85 of file NvmeController.h.

◆ m_ResetLock

Mutex NvmeController::m_ResetLock
private

Definition at line 92 of file NvmeController.h.

◆ m_Shutdown

bool NvmeController::m_Shutdown
private

Definition at line 111 of file NvmeController.h.

◆ m_Stopping

bool NvmeController::m_Stopping
private

Definition at line 110 of file NvmeController.h.

◆ m_VirtualizationLock

Mutex NvmeController::m_VirtualizationLock
private

Definition at line 93 of file NvmeController.h.

◆ m_VirtualizationSupported

bool NvmeController::m_VirtualizationSupported
private

Definition at line 101 of file NvmeController.h.

◆ m_WriteLock

Mutex NvmeController::m_WriteLock
private

Definition at line 91 of file NvmeController.h.


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