327#define NVME_REGISTER_CAP 0x00
328#define NVME_REGISTER_VS 0x08
329#define NVME_REGISTER_INTMS 0x0C
330#define NVME_REGISTER_INTMC 0x10
331#define NVME_REGISTER_CC 0x14
332#define NVME_REGISTER_CSTS 0x1C
333#define NVME_REGISTER_AQA 0x24
334#define NVME_REGISTER_ASQ 0x28
335#define NVME_REGISTER_ACQ 0x30
337#define NVME_CC_DISABLE 0
338#define NVME_CC_EN 0x1
339#define NVME_CC_EN_MASK 0x1
340#define NVME_CC_CSNVME 0x0
341#define NVME_CC_CSS_MASK 0x70
342#define NVME_CC_MPS_MASK 0x780
343#define NVME_CC_MPS_SHIFT 7
344#define NVME_CC_AMS_ROUNDROBIN 0
345#define NVME_CC_AMS_WIGHTED (1<<11)
346#define NVME_CC_AMS_MASK (0x7 << 11)
348#define NVME_CAP_MPS_MASK 0xfU
349#define NVME_CAP_MPSMAX(x) ((x >> 52) & NVME_CAP_MPS_MASK)
350#define NVME_CAP_MPSMIN(x) ((x >> 48) & NVME_CAP_MPS_MASK)
352#define NVME_CAP_MQES_MASK 0xffffU
353#define NVME_CAP_MQES(x) ((x) & NVME_CAP_MQES_MASK)
355#define NVME_CFG_MPS_MASK 0xfUL
356#define NVME_CFG_MPS(x) (((x) & NVME_CFG_MPS_MASK) << 7)
357#define NVME_CFG_CSS_MASK 0x7
358#define NVME_CFG_CSS(x) (((x) & NVME_CFG_CSS_MASK) << 4)
359#define NVME_CFG_ENABLE (1<<0)
361#define NVME_CONFIG_COMMAND_SET_NVM 0x0
362#define NVME_CONFIG_COMMAND_ALL_SUPPORTED_IO 0x6
363#define NVME_CONFIG_COMMAND_SET_ADMIN_ONLY 0x7
365#define NVME_CFG_DEFAULT_IOCQES (4<<20)
366#define NVME_CFG_DEFAULT_IOSQES (6<<16)
368#define NVME_AQA_AQS_MASK 0xfffU
369#define NVME_AQA_ACQS(x) (((x) & NVME_AQA_AQS_MASK) << 16)
370#define NVME_AQA_ASQS(x) (((x) & NVME_AQA_AQS_MASK) << 0)
372#define NVME_CAP_DSTRD_MASK 0xfU
373#define NVME_CAP_DSTRD(x) (((x) >> 32) & NVME_CAP_DSTRD_MASK)
375#define NVME_NSSR_RESET_VALUE 0x4e564d65
unsigned int uint32_t
Definition acefiex.h:163
unsigned char uint8_t
Definition acefiex.h:161
COMPILER_DEPENDENT_UINT64 uint64_t
Definition acefiex.h:165
unsigned short int uint16_t
Definition acefiex.h:162
signed char int8_t
Definition acefiex.h:158
NVMeQueue * NVMeGetQueue(uint16_t queueid)
Definition nvme.cpp:225
struct _nvme_cmd_ NVMeCommand
struct _nvme_create_io_sub_queue_ NVMeCreateIOSubmissionQueueCommand
struct _nvme_set_features_cmd_ NVMeSetFeatureCommand
struct _nvme_create_io_comp_queue_cmd_ NVMeCreateIOCompletionQueueCommand
struct _NVMeWriteCommand_ NVMeWriteCommand
struct _NVMeReadCommand_ NVMeReadCommand
volatile struct _controller_identity_ NVMeControllerIdentity
AdminCommands
Definition nvme.h:204
@ AdminCmdDeleteIOSubmissionQueue
Definition nvme.h:205
@ AdminCmdCreateIOCompletionQueue
Definition nvme.h:209
@ AdminCmdSetFeatures
Definition nvme.h:211
@ AdminCmdDeleteIOCompletionQueue
Definition nvme.h:208
@ AdminCmdGetLogPage
Definition nvme.h:207
@ AdminCmdIdentify
Definition nvme.h:210
@ AdminCmdCreateIOSubmissionQueue
Definition nvme.h:206
struct _nvme_completion_ NVMeCompletion
struct _nvme_identify_cmd_ NVMeIdentifyCommand
struct _nvme_dev_ NVMeDev
struct _nvme_delete_io_queue_cmd_ NVMeDeleteIOQueueCommand
void NVMeSubmitCommand(NVMeQueue *queue, NVMeCommand *cmd, NVMeCompletion *comp)
Definition nvme.cpp:246
struct _nvme_queue_ NVMeQueue
struct _namespace_id_ NamespaceIdentity
uint32_t reserved
Definition nvme.h:126
uint32_t limitedRetry
Definition nvme.h:129
uint64_t startLBA
Definition nvme.h:122
uint32_t forceUnitAccess
Definition nvme.h:128
uint32_t prInfo
Definition nvme.h:127
uint32_t blockNum
Definition nvme.h:125
uint64_t startLBA
Definition nvme.h:136
uint32_t blockNum
Definition nvme.h:139
uint32_t prInfo
Definition nvme.h:143
uint32_t reserved2
Definition nvme.h:140
uint32_t forceUnitAccess
Definition nvme.h:144
uint32_t limitedRetry
Definition nvme.h:145
uint32_t directiveType
Definition nvme.h:141
uint32_t reserved
Definition nvme.h:142
uint32_t hostMemoryBufferPreferredSize
Definition nvme.h:248
uint8_t unused[232]
Definition nvme.h:250
uint32_t controllerAttributes
Definition nvme.h:230
uint32_t rtd3EntryLatency
Definition nvme.h:228
uint8_t recommendedArbitrationBurst
Definition nvme.h:221
uint8_t ieee[3]
Definition nvme.h:222
uint16_t controllerID
Definition nvme.h:225
uint16_t rrls
Definition nvme.h:231
uint32_t rtd3ResumeLatency
Definition nvme.h:227
uint32_t numNamespaces
Definition nvme.h:254
uint8_t unused3[3072]
Definition nvme.h:257
uint16_t ccTemp
Definition nvme.h:246
uint32_t version
Definition nvme.h:226
uint8_t reserved2[122]
Definition nvme.h:236
uint8_t numberOfPowerStates
Definition nvme.h:243
uint16_t oacs
Definition nvme.h:237
uint32_t oaes
Definition nvme.h:229
uint8_t firmwareUpdates
Definition nvme.h:240
uint8_t reserved[9]
Definition nvme.h:232
uint8_t cmic
Definition nvme.h:223
uint8_t unused2[248]
Definition nvme.h:255
uint8_t fGUID[16]
Definition nvme.h:234
uint8_t sqEntrySize
Definition nvme.h:251
uint8_t errorLogPageEntries
Definition nvme.h:242
int8_t name[256]
Definition nvme.h:256
uint8_t apsta
Definition nvme.h:244
uint16_t vendorID
Definition nvme.h:216
uint16_t mtfa
Definition nvme.h:247
uint32_t hostMemoryBufferMinimumSize
Definition nvme.h:249
uint8_t controllerType
Definition nvme.h:233
uint16_t subsystemVendorID
Definition nvme.h:217
uint8_t logPageAttributes
Definition nvme.h:241
uint8_t acl
Definition nvme.h:238
uint8_t aerl
Definition nvme.h:239
int8_t modelNumber[40]
Definition nvme.h:219
uint8_t maximumDataTransferSize
Definition nvme.h:224
uint16_t wcTemp
Definition nvme.h:245
uint8_t cqEntrySize
Definition nvme.h:252
int8_t firmwareRevision[8]
Definition nvme.h:220
int8_t serialNumber[20]
Definition nvme.h:218
uint16_t maxCmd
Definition nvme.h:253
uint16_t crdt[3]
Definition nvme.h:235
uint8_t fmtLBASize
Definition nvme.h:280
uint8_t nsFeat
Definition nvme.h:278
uint64_t nsCap
Definition nvme.h:276
uint8_t numLBAFormat
Definition nvme.h:279
uint64_t nsUse
Definition nvme.h:277
uint8_t vendor[3712]
Definition nvme.h:284
uint8_t reserved[192]
Definition nvme.h:283
uint8_t unused[101]
Definition nvme.h:281
NVMeLBAFormat lbaFormat[16]
Definition nvme.h:282
uint64_t namespaceSize
Definition nvme.h:275
uint32_t nsid
Definition nvme.h:163
NVMeIdentifyCommand identify
Definition nvme.h:172
uint32_t reserved
Definition nvme.h:158
NVMeWriteCommand write
Definition nvme.h:178
NVMeCreateIOCompletionQueueCommand createIOCQ
Definition nvme.h:173
uint64_t resv
Definition nvme.h:164
NVMeReadCommand read
Definition nvme.h:177
uint32_t commandID
Definition nvme.h:160
uint64_t prp1
Definition nvme.h:166
uint64_t metadataPtr
Definition nvme.h:165
uint32_t fuse
Definition nvme.h:157
uint64_t prp2
Definition nvme.h:167
NVMeDeleteIOQueueCommand deleteIOQ
Definition nvme.h:175
NVMeCreateIOSubmissionQueueCommand createIOSQ
Definition nvme.h:174
uint32_t cmdDwords[6]
Definition nvme.h:170
uint32_t opcode
Definition nvme.h:156
uint32_t psdt
Definition nvme.h:159
NVMeSetFeatureCommand setFeatures
Definition nvme.h:176
uint32_t sqID
Definition nvme.h:190
uint32_t status
Definition nvme.h:198
uint32_t reserved
Definition nvme.h:186
uint32_t phaseTag
Definition nvme.h:197
uint32_t dw0
Definition nvme.h:185
uint32_t commandID
Definition nvme.h:196
uint32_t sqHead
Definition nvme.h:189
uint32_t reserved
Definition nvme.h:69
uint32_t intVector
Definition nvme.h:70
uint32_t contiguous
Definition nvme.h:67
uint32_t queueSize
Definition nvme.h:61
uint32_t intEnable
Definition nvme.h:68
uint32_t queueID
Definition nvme.h:60
uint32_t cqID
Definition nvme.h:90
uint32_t queueSize
Definition nvme.h:81
uint32_t contiguous
Definition nvme.h:87
uint32_t queueID
Definition nvme.h:80
uint32_t reserved
Definition nvme.h:89
uint32_t priority
Definition nvme.h:88
uint32_t queueID
Definition nvme.h:98
uint16_t queueAllocatedID
Definition nvme.h:324
uint32_t doorbellStride
Definition nvme.h:321
uint8_t majorVersion
Definition nvme.h:315
uint32_t minPageSize
Definition nvme.h:318
uint64_t mmiobase
Definition nvme.h:314
char * nvmedevpath
Definition nvme.h:312
AuVFSNode * devfs
Definition nvme.h:313
uint16_t numSQEAllocated
Definition nvme.h:323
uint32_t maxPageSize
Definition nvme.h:319
list_t * NVMeQueueList
Definition nvme.h:320
uint16_t numCQEAllocated
Definition nvme.h:322
uint8_t minorVersion
Definition nvme.h:316
uint16_t maxQueueEntries
Definition nvme.h:317
uint32_t cns
Definition nvme.h:47
uint32_t reserved
Definition nvme.h:48
uint32_t cntID
Definition nvme.h:49
uint32_t nvmSetID
Definition nvme.h:52
@ CNSNamespaceList
Definition nvme.h:43
@ CNSNamespace
Definition nvme.h:41
@ CNSContoller
Definition nvme.h:42
bool completion_cycle_state
Definition nvme.h:307
NVMeCommand * submissionQueue
Definition nvme.h:296
uint64_t completionMMIOBase
Definition nvme.h:290
uint16_t sq_count
Definition nvme.h:304
uint16_t nextCommandId
Definition nvme.h:308
uint32_t nvmeCQDoorbell
Definition nvme.h:298
uint16_t cq_size
Definition nvme.h:301
uint16_t cq_head
Definition nvme.h:306
uint64_t submissionMMIOBase
Definition nvme.h:291
uint16_t sq_tail
Definition nvme.h:305
uint16_t queueId
Definition nvme.h:289
NVMeCompletion * completionQueue
Definition nvme.h:295
uint64_t submissionPhysBase
Definition nvme.h:293
uint32_t nvmeSQDoorbell
Definition nvme.h:299
uint64_t completionPhysBase
Definition nvme.h:292
uint16_t cq_count
Definition nvme.h:303
uint16_t sq_size
Definition nvme.h:302
@ FeatureIDNumberOfQueues
Definition nvme.h:105
uint32_t dw13
Definition nvme.h:116
uint32_t save
Definition nvme.h:111
uint32_t reserved
Definition nvme.h:110
uint32_t dw12
Definition nvme.h:115
uint32_t dw11
Definition nvme.h:114
uint32_t featureID
Definition nvme.h:109
struct VirtioQueue * queue
Definition virtiokbd.c:44