| 200 | }; |
| 201 | |
| 202 | class Controller{ |
| 203 | public: |
| 204 | enum DriverStatus{ |
| 205 | ControllerNotReady, |
| 206 | ControllerError, |
| 207 | ControllerReady, |
| 208 | }; |
| 209 | private: |
| 210 | |
| 211 | enum ControllerConfigCommandSet{ |
| 212 | NVMeConfigCmdSetNVM = 0, |
| 213 | NVMeConfigCmdSetAdminOnly = 0b111, |
| 214 | }; |
| 215 | |
| 216 | enum AdminCommands{ |
| 217 | AdminCmdDeleteIOSubmissionQueue = 0x0, |
| 218 | AdminCmdCreateIOSubmissionQueue = 0x1, |
| 219 | AdminCmdGetLogPage = 0x2, |
| 220 | AdminCmdDeleteIOCompletionQueue = 0x4, |
| 221 | AdminCmdCreateIOCompletionQueue = 0x5, |
| 222 | AdminCmdIdentify = 0x6, |
| 223 | }; |
| 224 | |
| 225 | enum ControllerType{ |
| 226 | IOController = 1, |
| 227 | DiscoveryController = 2, |
| 228 | AdminController = 3, |
| 229 | }; |
| 230 | |
| 231 | struct ControllerIdentity{ |
| 232 | uint16_t vendorID; // PCI Vendor ID |
| 233 | uint16_t subsystemVendorID; // PCI Subsystem Vendor ID |
| 234 | int8_t serialNumber[20]; // ASCII encoded serial number |
| 235 | int8_t modelNumber[40]; // ASCII encoded model number |
| 236 | int8_t firmwareRevision[8]; // ASCII encoded firmware revision |
| 237 | uint8_t recommendedArbitrationBurst; |
| 238 | uint8_t ieee[3]; // IEEE Organization Unique Identifier |
| 239 | uint8_t cmic; // Controller Multi-Path I/O and Namespace Sharing Capabilities |
| 240 | uint8_t maximumDataTransferSize; // Maximum Data Transfer Size (2 ^ (CAP.MPSMIN * n)) |
| 241 | uint16_t controllerID; // NVM unique controller ID |
| 242 | uint32_t version; |
| 243 | uint32_t rtd3ResumeLatency; |
| 244 | uint32_t rtd3EntryLatency; |
| 245 | uint32_t oaes; |
| 246 | uint32_t controllerAttributes; |
| 247 | uint16_t rrls; |
| 248 | uint8_t reserved[9]; |
| 249 | uint8_t controllerType; |
| 250 | uint8_t fGUID[16]; |
| 251 | uint16_t crdt[3]; |
| 252 | uint8_t reserved2[122]; |
| 253 | uint16_t oacs; |
| 254 | uint8_t acl; |
| 255 | uint8_t aerl; |
| 256 | uint8_t firmwareUpdates; |
| 257 | uint8_t logPageAttributes; |
| 258 | uint8_t errorLogPageEntries; |
| 259 | uint8_t numberOfPowerStates; |
nothing calls this directly
no outgoing calls
no test coverage detected