14 bool initialiseController();
16 bool identify(uint32_t nsid, uint8_t kind,
void* buffer,
bool interruptProbe =
false);
21 bool virtualizationManagement(uint16_t controllerId, Nvme::VirtualResource resource,
22 Nvme::VirtualizationAction action, uint16_t count,
23 uint16_t* modified =
nullptr);
26 bool setNamespaceAttachment(uint32_t nsid, uint16_t controllerId,
bool attached);
27 uint16_t controllerId()
const {
28 return m_ControllerId;
30 bool supportsVirtualizationManagement()
const {
31 return m_VirtualizationSupported;
33 bool readWrite(uint32_t nsid, uint64_t lba, uint32_t blocks,
void* buffer,
size_t bytes,
35 bool flush(uint32_t nsid);
36 size_t interruptCompletions()
const;
37 size_t maximumOutstanding()
const;
38 size_t ioQueueCount()
const {
41 size_t ioQueueInterruptCompletions(
size_t queue)
const;
42 Device* pciDevice()
const {
45 size_t maxTransfer()
const {
48 const char* model()
const {
58 bool sendCommand(
size_t, uintptr_t, uint8_t, uintptr_t, uint16_t,
bool)
override {
63 size_t getNumUnits()
override {
69 bool waitReady(
bool ready);
71 void failController();
73 bool writing =
false, uint32_t* result =
nullptr,
bool interruptProbe =
false,
74 bool cacheFill =
false, physical_uintptr_t directWritePhysical = 0);
75 bool readWrite(uint32_t nsid, uint64_t lba, uint32_t blocks,
void* buffer,
size_t bytes,
76 bool writing,
bool cacheFill, physical_uintptr_t directWritePhysical = 0);
77 bool createIoQueue(
size_t index, uint16_t interruptVector);
80 bool secondaryControllersLocked(uint16_t firstControllerId,
82 bool discoverNamespaces(uint32_t maximumId,
bool& activeNamespaces);
83 NvmeDisk* findNamespace(uint32_t nsid);
89 size_t m_IoProcessor[Nvme::MaxIoQueues];
93 Mutex m_VirtualizationLock;
94 mutable Mutex m_IrqLock;
95 size_t m_ReadyMilliseconds;
98 irq_id_t m_IoIrq[Nvme::MaxIoQueues];
99 uint16_t m_OriginalCommand;
100 uint16_t m_ControllerId;
101 bool m_VirtualizationSupported;
102 bool m_NamespaceManagementSupported;
104 bool m_HardwareOwned;
108 bool m_BatchInitialising;