| 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; |
| 260 | uint8_t apsta; |
| 261 | uint16_t wcTemp; // Minimum temperature to report overheat |
| 262 | uint16_t ccTemp; // Critical temperature threshold |
| 263 | uint16_t mtfa; |
| 264 | uint32_t hostMemoryBufferPreferredSize; // In 4KB Units |
| 265 | uint32_t hostMemoryBufferMinimumSize; // In 4KB Units |
| 266 | uint8_t unused[232]; // Our driver does not care |
| 267 | uint8_t sqEntrySize; // Submission Queue Entry Size (Bits 3:0) (2 ^ n) |
| 268 | uint8_t cqEntrySize; // Completion Queue Entry Size (Bits 3:0) (2 ^ n) |
| 269 | uint16_t maxCmd; |
| 270 | uint32_t numNamespaces; // Number of namespaces; |
| 271 | uint8_t unused2[248]; |
| 272 | int8_t name[256]; // UTF-8 encoded NVMe Name (null-terminated) |
| 273 | uint8_t unused3[3072]; |
| 274 | }; |
| 275 | static_assert(sizeof(ControllerIdentity) == 4096); |
| 276 | |
| 277 | struct NamespaceIdentity{ |
nothing calls this directly
no outgoing calls
no test coverage detected