MCPcopy Create free account
hub / github.com/LemonOSProject/LemonOS / NVMeQueue

Class NVMeQueue

Kernel/include/nvme.h:151–200  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149 static_assert(sizeof(NVMeCompletion) == 16);
150
151 class NVMeQueue{
152 uint16_t queueID;
153
154 uintptr_t completionBase;
155 uintptr_t submissionBase;
156
157 NVMeCompletion* completionQueue;
158 NVMeCommand* submissionQueue;
159
160 uint32_t* completionDB;
161 uint32_t* submissionDB;
162
163 uint16_t cQueueSize = 0; // Queue sizes in bytes
164 uint16_t sQueueSize = 0; // Queue sizes in bytes
165
166 uint16_t cqCount = 0; // Amount of elements in CQ
167 uint16_t sqCount = 0; // Amount of elements in SQ
168
169 lock_t queueLock = 0;
170
171 uint16_t nextCommandID = 0;
172 public:
173 bool completionCycleState = true;
174 uint16_t cqHead = 0;
175 uint16_t sqTail = 0;
176
177 ///////////////////////////////
178 /// \name NVMeQueue
179 ///
180 /// \param cid Completion Queue ID
181 /// \param sid Submission Queue ID
182 /// \param cqBase Completion Queue physical base
183 /// \param sqBase Submission Queue physical base
184 /// \param cq Completion Queue virtual base
185 /// \param sq Submission Queue virtual base
186 /// \param sz Queue size in bytes
187 ///////////////////////////////
188 NVMeQueue(uint16_t qid, uintptr_t cqBase, uintptr_t sqBase, void* cq, void* sq, uint32_t* cqDB, uint32_t* sqDB, uint16_t csz, uint16_t ssz);
189 NVMeQueue() = default;
190
191 long Consume(NVMeCommand& cmd);
192
193 void Submit(NVMeCommand& cmd);
194 void SubmitWait(NVMeCommand& cmd, NVMeCompletion& complet);
195
196 __attribute__((always_inline)) uint16_t CQSize() { return cqCount; }
197 __attribute__((always_inline)) uint16_t SQSize() { return sqCount; }
198 __attribute__((always_inline)) uintptr_t CQBase() { return completionBase; }
199 __attribute__((always_inline)) uintptr_t SQBase() { return submissionBase; }
200 };
201
202 class Controller{
203 public:

Callers 1

ControllerMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected