The Pedigree Project 0.1
Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes | 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 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 maxTransfer () const
 
const char * model () const
 
bool supportsConcurrentReads () const override
 
IrqDisposition irq (irq_id_t number) 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)
 
DevicegetParent () const
 
void setParent (Device *p)
 
virtual const StringgetSpecificType ()
 
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 ()
 
virtual Vector< Address * > & addresses ()
 
virtual uintptr_t getInterruptNumber ()
 
virtual void setInterruptNumber (uintptr_t n)
 
void addChild (Device *pDevice)
 
DevicegetChild (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)
 
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 ()
 
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)
 
RequestfindDuplicate (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 createIoQueue ()
 
bool discoverNamespaces (uint32_t maximumId)
 
NvmeDiskfindNamespace (uint32_t nsid)
 

Private Attributes

Devicem_Pci
 
IoBasem_Registers
 
NvmeQueue m_Admin
 
NvmeQueue m_Io
 
OperationBarrier m_Commands
 
Mutex m_WriteLock
 
Mutex m_ResetLock
 
Mutex m_IrqLock
 
size_t m_ReadyMilliseconds
 
size_t m_MaxTransfer
 
irq_id_t m_Irq
 
uint16_t m_OriginalCommand
 
bool m_PciChanged
 
bool m_HardwareOwned
 
bool m_DmaInstalled
 
bool m_Interrupts
 
bool m_Failed
 
bool m_Stopping
 
bool m_Shutdown
 
char m_Model [41]
 

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 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 Deviceroot ()
 
- 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
 
Devicem_pParent
 
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]
 
Requestm_pRequestQueue [REQUEST_QUEUE_NUM_PRIORITIES]
 
Requestm_pRequestQueueTail [REQUEST_QUEUE_NUM_PRIORITIES]
 
Requestm_pActiveRequest
 
Atomic< size_t > m_State
 
Mutex m_LifecycleMutex
 
WaitQueue m_RequestQueueWaiters
 
WaitQueue m_WorkerWaiters
 
Threadm_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
 
Timerm_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 18 of file NvmeController.cc.

◆ ~NvmeController()

NvmeController::~NvmeController ( )
override

Definition at line 35 of file NvmeController.cc.

Member Function Documentation

◆ 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 
)
private

Definition at line 77 of file NvmeController.cc.

◆ createIoQueue()

bool NvmeController::createIoQueue ( )
private

Definition at line 217 of file NvmeController.cc.

◆ disable()

bool NvmeController::disable ( )
private

Definition at line 51 of file NvmeController.cc.

◆ discoverNamespaces()

bool NvmeController::discoverNamespaces ( uint32_t  maximumId)
private

Definition at line 237 of file NvmeController.cc.

◆ failController()

void NvmeController::failController ( )
private

Definition at line 57 of file NvmeController.cc.

◆ findNamespace()

NvmeDisk * NvmeController::findNamespace ( uint32_t  nsid)
private

Definition at line 261 of file NvmeController.cc.

◆ flush()

bool NvmeController::flush ( uint32_t  nsid)

Definition at line 289 of file NvmeController.cc.

◆ getNumUnits()

size_t NvmeController::getNumUnits ( )
inlineoverrideprotectedvirtual

Implements ScsiController.

Definition at line 37 of file NvmeController.h.

◆ identify()

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

Definition at line 91 of file NvmeController.cc.

◆ initialiseController()

bool NvmeController::initialiseController ( )

Definition at line 102 of file NvmeController.cc.

◆ interruptCompletions()

size_t NvmeController::interruptCompletions ( ) const

Definition at line 309 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 299 of file NvmeController.cc.

References Quiesced.

◆ maximumOutstanding()

size_t NvmeController::maximumOutstanding ( ) const

Definition at line 351 of file NvmeController.cc.

◆ maxTransfer()

size_t NvmeController::maxTransfer ( ) const
inline

Definition at line 22 of file NvmeController.h.

◆ model()

const char * NvmeController::model ( ) const
inline

Definition at line 25 of file NvmeController.h.

◆ readWrite()

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

Definition at line 269 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 32 of file NvmeController.h.

◆ shutdown()

void NvmeController::shutdown ( )

Definition at line 312 of file NvmeController.cc.

◆ supportsConcurrentReads()

bool NvmeController::supportsConcurrentReads ( ) const
inlineoverridevirtual

Concurrent cache fills require independent transport command storage.

Reimplemented from ScsiController.

Definition at line 28 of file NvmeController.h.

◆ waitReady()

bool NvmeController::waitReady ( bool  ready)
private

Definition at line 39 of file NvmeController.cc.

Member Data Documentation

◆ m_Admin

NvmeQueue NvmeController::m_Admin
private

Definition at line 52 of file NvmeController.h.

◆ m_Commands

OperationBarrier NvmeController::m_Commands
private

Definition at line 54 of file NvmeController.h.

◆ m_DmaInstalled

bool NvmeController::m_DmaInstalled
private

Definition at line 64 of file NvmeController.h.

◆ m_Failed

bool NvmeController::m_Failed
private

Definition at line 66 of file NvmeController.h.

◆ m_HardwareOwned

bool NvmeController::m_HardwareOwned
private

Definition at line 63 of file NvmeController.h.

◆ m_Interrupts

bool NvmeController::m_Interrupts
private

Definition at line 65 of file NvmeController.h.

◆ m_Io

NvmeQueue NvmeController::m_Io
private

Definition at line 53 of file NvmeController.h.

◆ m_Irq

irq_id_t NvmeController::m_Irq
private

Definition at line 60 of file NvmeController.h.

◆ m_IrqLock

Mutex NvmeController::m_IrqLock
mutableprivate

Definition at line 57 of file NvmeController.h.

◆ m_MaxTransfer

size_t NvmeController::m_MaxTransfer
private

Definition at line 59 of file NvmeController.h.

◆ m_Model

char NvmeController::m_Model[41]
private

Definition at line 69 of file NvmeController.h.

◆ m_OriginalCommand

uint16_t NvmeController::m_OriginalCommand
private

Definition at line 61 of file NvmeController.h.

◆ m_Pci

Device* NvmeController::m_Pci
private

Definition at line 50 of file NvmeController.h.

◆ m_PciChanged

bool NvmeController::m_PciChanged
private

Definition at line 62 of file NvmeController.h.

◆ m_ReadyMilliseconds

size_t NvmeController::m_ReadyMilliseconds
private

Definition at line 58 of file NvmeController.h.

◆ m_Registers

IoBase* NvmeController::m_Registers
private

Definition at line 51 of file NvmeController.h.

◆ m_ResetLock

Mutex NvmeController::m_ResetLock
private

Definition at line 56 of file NvmeController.h.

◆ m_Shutdown

bool NvmeController::m_Shutdown
private

Definition at line 68 of file NvmeController.h.

◆ m_Stopping

bool NvmeController::m_Stopping
private

Definition at line 67 of file NvmeController.h.

◆ m_WriteLock

Mutex NvmeController::m_WriteLock
private

Definition at line 55 of file NvmeController.h.


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